1
22
23 package com.liferay.portal.spring.aop;
24
25 import com.liferay.portal.kernel.log.Log;
26 import com.liferay.portal.kernel.log.LogFactoryUtil;
27 import com.liferay.portal.model.BaseModel;
28 import com.liferay.portal.model.ModelExtensionHandler;
29
30 import java.util.ArrayList;
31 import java.util.List;
32
33 import org.aspectj.lang.ProceedingJoinPoint;
34 import org.aspectj.lang.Signature;
35
36
42 public class ModelExtensionAdvice<T> {
43
44 public ModelExtensionHandler<T> getModelExtensionHandler() {
45 return _modelExtensionHandler;
46 }
47
48 public Object invoke(ProceedingJoinPoint proceedingJoinPoint)
49 throws Throwable {
50
51 Object result = proceedingJoinPoint.proceed();
52
53 Signature signature = proceedingJoinPoint.getSignature();
54
55 if (_extensionMethodNames.isEmpty() ||
56 _extensionMethodNames.contains(signature.getName())) {
57
58 if (_log.isDebugEnabled()) {
59 StringBuilder sb = new StringBuilder();
60
61 sb.append("Extending method ");
62 sb.append(signature.getDeclaringTypeName());
63 sb.append(".");
64 sb.append(signature.getName());
65 sb.append("(");
66
67 Object[] args = proceedingJoinPoint.getArgs();
68
69 for (int i = 0; i < args.length; i++) {
70 if (i > 0) {
71 sb.append(", ");
72 }
73
74 sb.append(args[i].getClass().getSimpleName());
75 }
76
77 sb.append(")");
78
79 _log.debug(sb.toString());
80 }
81
82 if (result instanceof BaseModel) {
83 result = _modelExtensionHandler.extendSingle(
84 (BaseModel<T>)result);
85 }
86 else if (result instanceof List) {
87 result = _modelExtensionHandler.extendList(
88 (List<BaseModel<T>>)result);
89 }
90 }
91
92 return result;
93 }
94
95 public void setModelExtensionHandler(
96 ModelExtensionHandler<T> modelExtensionHandler) {
97
98 _modelExtensionHandler = modelExtensionHandler;
99
100 if (_modelExtensionHandler.getExtensionMethodNames() != null) {
101 _extensionMethodNames =
102 _modelExtensionHandler.getExtensionMethodNames();
103 }
104 else {
105 _extensionMethodNames = new ArrayList<String>();
106 }
107 }
108
109 private static final Log _log =
110 LogFactoryUtil.getLog(ModelExtensionAdvice.class);
111
112 private List<String> _extensionMethodNames;
113 private ModelExtensionHandler<T> _modelExtensionHandler;
114
115 }