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 }