1
2
3
4
5
6
7 package org.weda.enhance.impl;
8
9 import java.lang.reflect.Field;
10 import java.util.HashMap;
11 import java.util.Map;
12 import org.jboss.aop.joinpoint.FieldReadInvocation;
13 import org.jboss.aop.joinpoint.FieldWriteInvocation;
14 import org.weda.message.Messages;
15 import org.weda.message.impl.InplaceMessage;
16
17 /**
18 *
19 * @author Mikhail Titov
20 */
21 public class MessageAspect {
22 private Map<Field, InplaceMessage> messages =
23 new HashMap<Field, InplaceMessage>();
24
25 public Object resolveInplaceMessage(FieldReadInvocation joinPoint)
26 throws Throwable
27 {
28 Field field = joinPoint.getField();
29 String value = (String)joinPoint.invokeNext();
30 if (value==null)
31 return null;
32 InplaceMessage inplaceMessage = messages.get(field);
33 if (inplaceMessage == null || !value.equals(inplaceMessage.getSource()))
34 {
35 inplaceMessage =
36 getInplaceMessage(
37 field, joinPoint.getTargetObject(), value);
38 }
39 return inplaceMessage.getMessage();
40 }
41
42 private InplaceMessage getInplaceMessage(
43 Field field, Object target, String source)
44 throws Exception
45 {
46 Messages objectMessages =
47 AspectHelperImpl.INSTANCE.getMessagesRegistry()
48 .getMessagesForObject(target);
49 InplaceMessage mess = new InplaceMessage(objectMessages, source);
50 messages.put(field, mess);
51 return mess;
52 }
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 }