1 package org.weda.model.impl; 2 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 import org.weda.data.DataProvider; 7 import org.weda.data.DataProviderServiceException; 8 import org.weda.model.EditorModel; 9 import org.weda.model.EditorModelFactory; 10 import org.weda.model.EditorModelRegistry; 11 import org.weda.model.EditorModelRegistryException; 12 import org.weda.model.EditorModelGroup; 13 import org.weda.tapestry.component.EditorGroup; 14 15 /** 16 * 17 * @author tim 18 */ 19 public class EditorModelRegistryImpl implements EditorModelRegistry{ 20 private Map<String, EditorModelGroup> modelGroups = 21 new HashMap<String, EditorModelGroup>(); 22 23 public EditorModelGroup getEditorModelGroup(String name) 24 throws EditorModelRegistryException 25 { 26 if (modelGroups.containsKey(name)) 27 return modelGroups.get(name); 28 else 29 throw new EditorModelRegistryException( 30 String.format( 31 "Editor model group (%s) not registered in registry" 32 , name)); 33 } 34 35 public void setEditorModelFactories(List<EditorModelFactory> factories){ 36 for (EditorModelFactory factory: factories) 37 for (EditorModelGroup group: factory.getEditorModelGroups()) 38 modelGroups.put(group.getName(), group); 39 } 40 41 public DataProvider getDataProvider(Object dataIdentificator) 42 throws DataProviderServiceException 43 { 44 EditorModelDataId dataId = (EditorModelDataId)dataIdentificator; 45 try{ 46 EditorModelGroup group = 47 getEditorModelGroup(dataId.getEditorGroupName()); 48 EditorModel model = 49 group.getEditorModel(dataId.getEditorModelName()); 50 EditorModelDataProvider provider = 51 new EditorModelDataProvider(model); 52 return provider; 53 }catch(Exception e){ 54 throw new DataProviderServiceException( 55 String.format( 56 "Can't create data provider for editor model (%s) " + 57 "in editor model group (%s)" 58 , dataId.getEditorModelName() 59 , dataId.getEditorGroupName()) 60 , e); 61 } 62 } 63 64 public Class getDataIdentificatorClass() { 65 return EditorModelDataId.class; 66 } 67 68 }