Skip to content

Commit ce81dc6

Browse files
committed
ApiBoot Resource 添加资源信息
1 parent 266cbbe commit ce81dc6

File tree

6 files changed

+202
-43
lines changed

6 files changed

+202
-43
lines changed

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/aop/interceptor/ApiBootResourceLoadMethodInterceptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public Object invoke(MethodInvocation invocation) throws Throwable {
9393
case INSERT:
9494
logger.debug("Execute insert resource.");
9595
// pull resource form param
96-
apiBootResourcePusher.pullResource(declaredMethod, params);
96+
apiBootResourcePusher.insertResource(declaredMethod, params);
9797
break;
9898
case DELETE:
9999
logger.debug("Execute delete resource.");

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/pusher/ApiBootResourcePusher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public interface ApiBootResourcePusher {
5151
* @param param method param array
5252
* @throws ApiBootException ApiBoot Exception
5353
*/
54-
void pullResource(Method declaredMethod, Object[] param) throws ApiBootException;
54+
void insertResource(Method declaredMethod, Object[] param) throws ApiBootException;
5555

5656
/**
5757
* Delete resource

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/pusher/support/ApiBootAbstractResourcePusher.java

Lines changed: 140 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,14 @@
2929

3030
import java.lang.reflect.Field;
3131
import java.lang.reflect.Method;
32+
import java.util.ArrayList;
3233
import java.util.List;
3334
import java.util.Map;
3435

3536
/**
37+
* ApiBoot Resource Pusher Abstract Support
38+
* Provide access to resource or source field
39+
*
3640
* @author:恒宇少年 - 于起宇
3741
* <p>
3842
* DateTime:2019-04-19 09:40
@@ -62,6 +66,26 @@ public abstract class ApiBootAbstractResourcePusher implements ApiBootResourcePu
6266
*/
6367
public abstract void deleteResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType);
6468

69+
/**
70+
* insert resource urls
71+
*
72+
* @param declaredMethod declared method
73+
* @param sourceFieldValue sourceFieldValue
74+
* @param resourceType resourceType
75+
* @param resourceUrls resource urls
76+
*/
77+
public abstract void insertResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls);
78+
79+
/**
80+
* update resource urls
81+
*
82+
* @param declaredMethod declared method
83+
* @param sourceFieldValue sourceFieldValue
84+
* @param resourceType resourceType
85+
* @param resourceUrls resource urls
86+
*/
87+
public abstract void updateResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls);
88+
6589
/**
6690
* unified pull resource
6791
*
@@ -70,10 +94,25 @@ public abstract class ApiBootAbstractResourcePusher implements ApiBootResourcePu
7094
* @throws ApiBootException
7195
*/
7296
@Override
73-
public void pullResource(Method declaredMethod, Object[] param) throws ApiBootException {
74-
97+
public void insertResource(Method declaredMethod, Object[] param) throws ApiBootException {
98+
// get method declared ResourceField annotations
99+
List<ResourceField> resourceFields = getResourceFields(declaredMethod);
100+
resourceFields.stream().forEach(resourceField -> {
101+
// get expression match source filed value
102+
Object sourceFieldValue = getMatchSourceValue(resourceField.source(), declaredMethod, param);
103+
// get expression match resource field value
104+
Object resourceFieldValue = getMatchResourceValue(resourceField.name(), declaredMethod, param);
105+
106+
// if have value
107+
if (!ObjectUtils.isEmpty(sourceFieldValue) && !ObjectUtils.isEmpty(resourceFieldValue)) {
108+
List<String> resourceUrls = convertToList(resourceFieldValue);
109+
// call implementation class "deleteResourceUrl" method
110+
this.insertResourceUrl(declaredMethod, String.valueOf(sourceFieldValue), resourceField.type(), resourceUrls);
111+
}
112+
});
75113
}
76114

115+
77116
/**
78117
* unified delete resource
79118
*
@@ -83,43 +122,16 @@ public void pullResource(Method declaredMethod, Object[] param) throws ApiBootEx
83122
*/
84123
@Override
85124
public void deleteResource(Method declaredMethod, Object[] param) throws ApiBootException {
125+
// get method declared ResourceField annotations
86126
List<ResourceField> resourceFields = getResourceFields(declaredMethod);
87127
resourceFields.stream().forEach(resourceField -> {
88-
// source file name
89-
String sourceFieldName = resourceField.source();
90-
91-
List<String> matchContents = ResourceSourceExpression.getMatchContent(sourceFieldName);
92-
93-
// don't match expression
94-
// default parameters using index 0
95-
if (ObjectUtils.isEmpty(matchContents)) {
96-
Object paramObject = param[0];
97-
// source field
98-
Field field = getSourceField(declaredMethod, paramObject.getClass(), sourceFieldName, resourceField.name());
99-
// source field value
100-
Object sourceFieldValue = getFieldValue(field, paramObject);
128+
// get expression match source filed value
129+
Object sourceFieldValue = getMatchSourceValue(resourceField.source(), declaredMethod, param);
130+
// if have value
131+
if (!ObjectUtils.isEmpty(sourceFieldValue)) {
132+
// call implementation class "deleteResourceUrl" method
101133
this.deleteResourceUrl(declaredMethod, String.valueOf(sourceFieldValue), resourceField.type());
102134
}
103-
// match expression
104-
else {
105-
String sourceFieldValue = null;
106-
// ognl expression
107-
if (ResourceSourceExpression.getOgnlMatch(sourceFieldName).find()) {
108-
// param object
109-
Object paramObject = param[Integer.valueOf(matchContents.get(0))];
110-
// source field
111-
Field field = getSourceField(declaredMethod, paramObject.getClass(), matchContents.get(1), resourceField.name());
112-
// source field value
113-
sourceFieldValue = String.valueOf(getFieldValue(field, paramObject));
114-
}
115-
// basic expression
116-
else if (ResourceSourceExpression.getBasicMatch(sourceFieldName).find()) {
117-
sourceFieldValue = String.valueOf(param[Integer.valueOf(matchContents.get(0))]);
118-
}
119-
if (!ObjectUtils.isEmpty(sourceFieldValue)) {
120-
this.deleteResourceUrl(declaredMethod, sourceFieldValue, resourceField.type());
121-
}
122-
}
123135
});
124136
}
125137

@@ -132,7 +144,17 @@ else if (ResourceSourceExpression.getBasicMatch(sourceFieldName).find()) {
132144
*/
133145
@Override
134146
public void updateResource(Method declaredMethod, Object[] param) throws ApiBootException {
135-
147+
// get method declared ResourceField annotations
148+
List<ResourceField> resourceFields = getResourceFields(declaredMethod);
149+
resourceFields.stream().forEach(resourceField -> {
150+
// get expression match source filed value
151+
Object sourceFieldValue = getMatchSourceValue(resourceField.source(), declaredMethod, param);
152+
// if have value
153+
if (!ObjectUtils.isEmpty(sourceFieldValue)) {
154+
// call implementation class "insertResourceUrl" method
155+
this.updateResourceUrl(declaredMethod, String.valueOf(sourceFieldValue), resourceField.type(), null);
156+
}
157+
});
136158
}
137159

138160
/**
@@ -144,7 +166,7 @@ public void updateResource(Method declaredMethod, Object[] param) throws ApiBoot
144166
*/
145167
@Override
146168
public void insertOrUpdateResource(Method declaredMethod, Object[] param) throws ApiBootException {
147-
169+
// TODO
148170
}
149171

150172
/**
@@ -215,7 +237,7 @@ private void push(Method method, List<ResourceField> resourceFields, Object obje
215237
resourceFields.stream().forEach(resourceField -> {
216238
try {
217239
// source
218-
Field sourceField = getSourceField(method, objectClass, resourceField.source(), resourceField.name());
240+
Field sourceField = getSourceField(method, objectClass, resourceField.source());
219241
// target
220242
Field resourceFieldInstance = getResourceField(method, objectClass, resourceField.name());
221243

@@ -246,6 +268,73 @@ else if (resourceField.isList()) {
246268

247269
}
248270

271+
/**
272+
* Get expression match value
273+
*
274+
* @param matchFieldName match field name
275+
* @param declaredMethod declared method
276+
* @param param method param
277+
* @return match value
278+
*/
279+
protected Object getMatchValue(String matchFieldName, Method declaredMethod, Object[] param) {
280+
// pattern expression match contents
281+
List<String> matchContents = ResourceSourceExpression.getMatchContent(matchFieldName);
282+
283+
// source field value
284+
Object sourceFieldValue = null;
285+
286+
// don't match expression
287+
// default parameters using index 0
288+
if (ObjectUtils.isEmpty(matchContents)) {
289+
Object paramObject = param[0];
290+
// source field
291+
Field field = getSourceField(declaredMethod, paramObject.getClass(), matchFieldName);
292+
// source field value
293+
sourceFieldValue = getFieldValue(field, paramObject);
294+
}
295+
// match expression
296+
else {
297+
// ognl expression
298+
if (ResourceSourceExpression.getOgnlMatch(matchFieldName).find()) {
299+
// param object
300+
Object paramObject = param[Integer.valueOf(matchContents.get(0))];
301+
// source field
302+
Field field = getSourceField(declaredMethod, paramObject.getClass(), matchContents.get(1));
303+
// source field value
304+
sourceFieldValue = getFieldValue(field, paramObject);
305+
}
306+
// basic expression
307+
else if (ResourceSourceExpression.getBasicMatch(matchFieldName).find()) {
308+
sourceFieldValue = param[Integer.valueOf(matchContents.get(0))];
309+
}
310+
}
311+
return sourceFieldValue;
312+
}
313+
314+
/**
315+
* Get expression match resource field value
316+
*
317+
* @param resourceFieldName ResourceField Annotation name
318+
* @param declaredMethod declared method
319+
* @param param method param array
320+
* @return resource field value
321+
*/
322+
protected Object getMatchResourceValue(String resourceFieldName, Method declaredMethod, Object[] param) {
323+
return getMatchValue(resourceFieldName, declaredMethod, param);
324+
}
325+
326+
/**
327+
* Get expression match source field value
328+
*
329+
* @param sourceFieldName ResourceField Annotation source
330+
* @param declaredMethod declared method
331+
* @param param method param array
332+
* @return source field value
333+
*/
334+
protected Object getMatchSourceValue(String sourceFieldName, Method declaredMethod, Object[] param) {
335+
return getMatchValue(sourceFieldName, declaredMethod, param);
336+
}
337+
249338
/**
250339
* get Field value
251340
*
@@ -272,9 +361,9 @@ protected Object getFieldValue(Field field, Object object) {
272361
* @return Field Instance
273362
* @throws NoSuchFieldException No Such Field Exception
274363
*/
275-
protected Field getSourceField(Method method, Class objectClass, String sourceFieldName, String resourceFieldName) {
364+
protected Field getSourceField(Method method, Class objectClass, String sourceFieldName) {
276365
// cache from memory
277-
ResourcePushField resourcePushField = ApiBootResourceContext.getPushFieldFromCache(method, resourceFieldName);
366+
ResourcePushField resourcePushField = ApiBootResourceContext.getPushFieldFromCache(method, sourceFieldName);
278367
// if don't have source field from cache
279368
if (ObjectUtils.isEmpty(resourcePushField) || ObjectUtils.isEmpty(resourcePushField.getSourceField())) {
280369
Field sourceField = ReflectionUtils.findField(objectClass, sourceFieldName);
@@ -288,7 +377,7 @@ protected Field getSourceField(Method method, Class objectClass, String sourceFi
288377
}
289378

290379
// cache to memory
291-
ApiBootResourceContext.setPushFieldToCache(method, resourceFieldName, resourcePushField);
380+
ApiBootResourceContext.setPushFieldToCache(method, sourceFieldName, resourcePushField);
292381
}
293382
return resourcePushField.getSourceField();
294383
}
@@ -353,4 +442,14 @@ protected List<ResourceField> getResourceFields(Method method) {
353442
}
354443
return resourceFields;
355444
}
445+
446+
protected List<String> convertToList(Object value) {
447+
List<String> resourceUrls = new ArrayList<>();
448+
if (value instanceof List) {
449+
resourceUrls.addAll((List) value);
450+
} else {
451+
resourceUrls.add(String.valueOf(value));
452+
}
453+
return resourceUrls;
454+
}
356455
}

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/pusher/support/ApiBootJdbcResourcePusher.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,30 @@ public List<String> loadResourceUrl(Method declaredMethod, String sourceFieldVal
7474
public void deleteResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType) {
7575
apiBootResourceStoreDelegate.deleteResource(sourceFieldValue, resourceType);
7676
}
77+
78+
/**
79+
* insert resource urls
80+
*
81+
* @param declaredMethod declared method
82+
* @param sourceFieldValue sourceFieldValue
83+
* @param resourceType resourceType
84+
* @param resourceUrls resource urls
85+
*/
86+
@Override
87+
public void insertResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls) {
88+
apiBootResourceStoreDelegate.addResource(sourceFieldValue, resourceType, resourceUrls);
89+
}
90+
91+
/**
92+
* update resource urls
93+
*
94+
* @param declaredMethod declared method
95+
* @param sourceFieldValue sourceFieldValue
96+
* @param resourceType resourceType
97+
* @param resourceUrls resource urls
98+
*/
99+
@Override
100+
public void updateResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls) {
101+
apiBootResourceStoreDelegate.updateResource(sourceFieldValue, resourceType, resourceUrls);
102+
}
77103
}

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/pusher/support/ApiBootMemoryResourcePusher.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,21 @@ public void deleteResourceUrl(Method declaredMethod, String sourceFieldValue, St
8888
// remove memory resource urls
8989
RESOURCE_URLS.remove(resourceKey);
9090
}
91+
92+
/**
93+
* insert to memory
94+
*
95+
* @param declaredMethod declared method
96+
* @param sourceFieldValue sourceFieldValue
97+
* @param resourceType resourceType
98+
* @param resourceUrls resource urls
99+
*/
100+
@Override
101+
public void insertResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls) {
102+
super.insertResourceUrl(declaredMethod, sourceFieldValue, resourceType, resourceUrls);
103+
// formatter key
104+
String resourceKey = ApiBootResourceContext.formatterCacheKey(declaredMethod, sourceFieldValue, resourceType);
105+
// remove memory resource urls
106+
RESOURCE_URLS.put(resourceKey, resourceUrls);
107+
}
91108
}

api-boot-project/api-boot-plugins/api-boot-plugin-resource-load/src/main/java/org/minbox/framework/api/boot/plugin/resource/load/pusher/support/ApiBootRedisResourcePusher.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,4 +90,21 @@ public void deleteResourceUrl(Method declaredMethod, String sourceFieldValue, St
9090
// delete from jdbc
9191
super.deleteResourceUrl(declaredMethod, sourceFieldValue, resourceType);
9292
}
93+
94+
/**
95+
* insert into redis
96+
*
97+
* @param declaredMethod declared method
98+
* @param sourceFieldValue sourceFieldValue
99+
* @param resourceType resourceType
100+
* @param resourceUrls resource urls
101+
*/
102+
@Override
103+
public void insertResourceUrl(Method declaredMethod, String sourceFieldValue, String resourceType, List<String> resourceUrls) {
104+
super.insertResourceUrl(declaredMethod, sourceFieldValue, resourceType, resourceUrls);
105+
// formatter redis key
106+
String resourceRedisKey = ApiBootResourceContext.formatterCacheKey(declaredMethod, sourceFieldValue, resourceType);
107+
// push resource urls to redis
108+
redisTemplate.opsForList().rightPushAll(resourceRedisKey, resourceUrls);
109+
}
93110
}

0 commit comments

Comments
 (0)