View Javadoc

1   
2   package org.weda.model.impl;
3   
4   import java.util.ArrayList;
5   import java.util.Collection;
6   import java.util.Collections;
7   import java.util.HashMap;
8   import java.util.List;
9   import java.util.Map;
10  import org.weda.cache.CacheEntity;
11  import org.weda.cache.CacheManager;
12  import org.weda.enhance.InjectHivemindObject;
13  import org.weda.model.EditorModel;
14  import org.weda.model.EditorModelException;
15  import org.weda.model.EditorModelGroup;
16  import org.weda.model.EditorModelGroupException;
17  import org.weda.property.ObjectDescriptorRegistry;
18  import org.weda.property.PropertyDescriptor;
19  import org.weda.property.impl.ObjectDescriptorException;
20  
21  /**
22   *
23   * @author tim
24   */
25  public abstract class BaseEditorModelGroup<T extends EditorModel> 
26          implements EditorModelGroup<T> 
27  {    
28      @InjectHivemindObject private static CacheManager cacheManager;
29      
30      protected Map<String, T> models = new HashMap<String, T>();
31      private String name;    
32      
33      public void init() throws EditorModelGroupException {        
34      }
35          
36      public T getEditorModel(String name)
37          throws EditorModelGroupException 
38      {
39          if (!models.containsKey(name))
40              throw new EditorModelGroupException(
41                  String.format(
42                      "Model (%s) is not registered inside model group (%s)"
43                      , name, getName()));
44          return models.get(name);
45      }
46      
47      public Collection<T> getEditorModels() throws EditorModelGroupException {
48          return Collections.unmodifiableCollection(models.values());
49      }
50      
51      public void addEditorModel(T model){
52          model.setModelGroup(this);
53          models.put(model.getName(), model);
54      }
55  
56      public String getName() {
57          return name;
58      }
59  
60      public void setName(String name) {
61          this.name = name;
62      }
63      
64      public abstract PropertyDescriptor getPropertyDescriptor(
65              String propertyPath) throws EditorModelGroupException;
66  
67  
68      public Object getCachedModelValue(String modelName) {
69          return getModelValues().getModelValue(modelName);
70      }
71  
72      public void cacheModelValue(String modelName, Object value) {
73          getModelValues().putModelValue(modelName, value);
74      }
75      
76      public boolean isModelValueCached(String modelName) {
77          GroupCacheEntity values = (GroupCacheEntity)
78              cacheManager.getCacheService().get(getId());
79          return values!=null && values.containsModelValue(modelName);
80      }
81      
82      public void clearModelValues() throws EditorModelException {
83          cacheManager.getCacheService().release(getId());
84          for (EditorModel model: models.values())
85              model.resetModel();
86      }
87      
88      private GroupCacheEntity getModelValues(){
89          String id = getId();
90          GroupCacheEntity values = (GroupCacheEntity)
91              cacheManager.getCacheService().get(id);
92          if (values==null){
93              values = new GroupCacheEntity();
94              cacheManager.getCacheService().setCacheEntity(id, values);
95          }
96          return values;
97      }
98      
99      private String getId(){
100         return this.getClass().getName()+"@"+getName();
101     }
102 
103     public void clearModelValue(String modelName) {
104         GroupCacheEntity values = (GroupCacheEntity)
105             cacheManager.getCacheService().get(getId());
106         if (values!=null)
107             values.removeModelValue(modelName);
108     }
109 
110     private class GroupCacheEntity implements CacheEntity {
111         private Map<String, Object> values = new HashMap<String, Object>();
112         
113         public void release() {
114         }
115 
116         public Object getValue() {
117             return values;
118         }
119         
120         public void putModelValue(String modelName, Object modelValue){
121             values.put(modelName, modelValue);
122         }
123         
124         public Object getModelValue(String modelName){
125             return values.get(modelName);
126         }
127         
128         public boolean containsModelValue(String modelName){
129             return values.containsKey(modelName);
130         }
131         
132         public void removeModelValue(String modelName){
133             values.remove(modelName);
134         }
135         
136     } 
137 }