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 }