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 }