1
2
3
4 package org.rcfaces.core.internal.contentAccessor;
5
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.HashMap;
9 import java.util.Iterator;
10 import java.util.List;
11 import java.util.Map;
12
13 import org.apache.commons.digester.Digester;
14 import org.rcfaces.core.internal.RcfacesContext;
15 import org.rcfaces.core.lang.IContentFamily;
16 import org.rcfaces.core.provider.AbstractProvider;
17
18
19
20
21
22
23 public class ContentAccessorsRegistryImpl extends AbstractProvider implements
24 IContentAccessorRegistry {
25 private static final String REVISION = "$Revision: 1.3 $";
26
27 private static final IContentAccessorHandler[] CONTENT_ACCESSOR_HANDLER_EMPTY_ARRAY = new IContentAccessorHandler[0];
28
29 private final Map contentAccessorsByType = new HashMap(8);
30
31 private IContentAccessorHandler defaultContentAccessors[] = CONTENT_ACCESSOR_HANDLER_EMPTY_ARRAY;
32
33 public ContentAccessorsRegistryImpl() {
34
35 RcfacesContext rcfacesContext = RcfacesContext.getCurrentInstance();
36
37 if (rcfacesContext.getContentAccessorRegistry() == null) {
38 rcfacesContext.setContentAccessorRegistry(this);
39 }
40 }
41
42 public String getId() {
43 return "ContentAccessorsRegistry";
44 }
45
46 public IContentAccessorHandler[] listContentAccessorHandlers(
47 IContentFamily type) {
48 IContentAccessorHandler contentAccessorHandlers[] = (IContentAccessorHandler[]) contentAccessorsByType
49 .get(type);
50 if (contentAccessorHandlers == null) {
51 return defaultContentAccessors;
52 }
53
54 return contentAccessorHandlers;
55 }
56
57 public void declareContentAccessorHandler(IContentFamily contentFamily,
58 IContentAccessorHandler contentAccessorHandler) {
59
60 if (contentFamily == null) {
61
62 for (Iterator it = contentAccessorsByType.keySet().iterator(); it
63 .hasNext();) {
64
65 contentFamily = (IContentFamily) it.next();
66
67 declareContentAccessorHandler(contentFamily,
68 contentAccessorHandler);
69 }
70
71
72
73 List l = new ArrayList(Arrays.asList(defaultContentAccessors));
74 l.add(contentAccessorHandler);
75 defaultContentAccessors = (IContentAccessorHandler[]) l
76 .toArray(new IContentAccessorHandler[l.size()]);
77
78 return;
79 }
80
81 List l = new ArrayList();
82 IContentAccessorHandler cah[] = listContentAccessorHandlers(contentFamily);
83 if (cah.length > 0) {
84 l.addAll(Arrays.asList(cah));
85
86 } else if (defaultContentAccessors.length > 0) {
87 l.addAll(Arrays.asList(defaultContentAccessors));
88 }
89 l.add(contentAccessorHandler);
90
91 contentAccessorsByType.put(contentFamily, l
92 .toArray(new IContentAccessorHandler[l.size()]));
93
94 }
95
96 public void configureRules(Digester digester) {
97 super.configureRules(digester);
98
99
100 }
101
102 }