View Javadoc

1   /*
2    * MessageAspect.java
3    *
4    * Created on 13 Июнь 2006 г., 1:23
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  //    public Object initMessagesField(FieldWriteInvocation joinPoint) 
55  //        throws Throwable 
56  //    {
57  //        Object res = joinPoint.invokeNext();
58  //        Field field = joinPoint.getField();
59  //        Object targetObject = joinPoint.getTargetObject();
60  //        String value = (String)field.get(targetObject);
61  //        InplaceMessage mess = null;
62  //        if (res==value)
63  //            messages.remove(field);
64  //        else {            
65  //            Messages objectMessages = 
66  //                    AspectHelperImpl.INSTANCE.getMessagesRegistry()
67  //                        .getMessagesForObject(targetObject);
68  //                mess = new InplaceMessage(objectMessages, value);
69  //            messages.put(field, mess);
70  //        }
71  //        return res;
72  //    }
73      
74  }