KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > ofbiz > entityext > eca > EntityEcaUtil


1 /*
2  * $Id: EntityEcaUtil.java 5462 2005-08-05 18:35:48Z jonesde $
3  *
4  * Copyright (c) 2002-2003 The Open For Business Project - www.ofbiz.org
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
21  * OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
22  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  *
24  */

25 package org.ofbiz.entityext.eca;
26
27 import java.util.HashMap JavaDoc;
28 import java.util.Iterator JavaDoc;
29 import java.util.LinkedList JavaDoc;
30 import java.util.List JavaDoc;
31 import java.util.Map JavaDoc;
32 import java.util.Collection JavaDoc;
33
34 import org.ofbiz.base.component.ComponentConfig;
35 import org.ofbiz.base.config.GenericConfigException;
36 import org.ofbiz.base.config.MainResourceHandler;
37 import org.ofbiz.base.config.ResourceHandler;
38 import org.ofbiz.base.util.Debug;
39 import org.ofbiz.base.util.UtilXml;
40 import org.ofbiz.base.util.cache.UtilCache;
41 import org.ofbiz.entity.config.DelegatorInfo;
42 import org.ofbiz.entity.config.EntityConfigUtil;
43 import org.ofbiz.entity.config.EntityEcaReaderInfo;
44 import org.ofbiz.entity.GenericDelegator;
45 import org.w3c.dom.Element JavaDoc;
46
47 /**
48  * EntityEcaUtil
49  *
50  * @author <a HREF="mailto:jonesde@ofbiz.org">David E. Jones</a>
51  * @author <a HREF="mailto:jaz@ofbiz.org">Andy Zeneski</a>
52  * @version $Rev: 5462 $
53  * @since 2.1
54  */

55 public class EntityEcaUtil {
56
57     public static final String JavaDoc module = EntityEcaUtil.class.getName();
58
59     public static UtilCache entityEcaReaders = new UtilCache("entity.EcaReaders", 0, 0, false);
60
61     public static Map JavaDoc getEntityEcaCache(String JavaDoc entityEcaReaderName) {
62         Map JavaDoc ecaCache = (Map JavaDoc) entityEcaReaders.get(entityEcaReaderName);
63         if (ecaCache == null) {
64             synchronized (EntityEcaUtil.class) {
65                 ecaCache = (Map JavaDoc) entityEcaReaders.get(entityEcaReaderName);
66                 if (ecaCache == null) {
67                     ecaCache = new HashMap JavaDoc();
68                     readConfig(entityEcaReaderName, ecaCache);
69                     entityEcaReaders.put(entityEcaReaderName, ecaCache);
70                 }
71             }
72         }
73         return ecaCache;
74     }
75
76     public static String JavaDoc getEntityEcaReaderName(String JavaDoc delegatorName) {
77         DelegatorInfo delegatorInfo = EntityConfigUtil.getDelegatorInfo(delegatorName);
78         if (delegatorInfo == null) {
79             Debug.logError("BAD ERROR: Could not find delegator config with name: " + delegatorName, module);
80             return null;
81         }
82         return delegatorInfo.entityEcaReader;
83     }
84
85     protected static void readConfig(String JavaDoc entityEcaReaderName, Map JavaDoc ecaCache) {
86         EntityEcaReaderInfo entityEcaReaderInfo = EntityConfigUtil.getEntityEcaReaderInfo(entityEcaReaderName);
87         if (entityEcaReaderInfo == null) {
88             Debug.logError("BAD ERROR: Could not find entity-eca-reader config with name: " + entityEcaReaderName, module);
89             return;
90         }
91
92         Iterator JavaDoc eecaResourceIter = entityEcaReaderInfo.resourceElements.iterator();
93         while (eecaResourceIter.hasNext()) {
94             Element JavaDoc eecaResourceElement = (Element JavaDoc) eecaResourceIter.next();
95             ResourceHandler handler = new MainResourceHandler(EntityConfigUtil.ENTITY_ENGINE_XML_FILENAME, eecaResourceElement);
96             addEcaDefinitions(handler, ecaCache);
97         }
98
99         // get all of the component resource eca stuff, ie specified in each ofbiz-component.xml file
100
List JavaDoc componentResourceInfos = ComponentConfig.getAllEntityResourceInfos("eca");
101         Iterator JavaDoc componentResourceInfoIter = componentResourceInfos.iterator();
102         while (componentResourceInfoIter.hasNext()) {
103             ComponentConfig.EntityResourceInfo componentResourceInfo = (ComponentConfig.EntityResourceInfo) componentResourceInfoIter.next();
104             if (entityEcaReaderName.equals(componentResourceInfo.readerName)) {
105                 addEcaDefinitions(componentResourceInfo.createResourceHandler(), ecaCache);
106             }
107         }
108     }
109
110     protected static void addEcaDefinitions(ResourceHandler handler, Map JavaDoc ecaCache) {
111         Element JavaDoc rootElement = null;
112         try {
113             rootElement = handler.getDocument().getDocumentElement();
114         } catch (GenericConfigException e) {
115             Debug.logError(e, module);
116             return;
117         }
118
119         List JavaDoc ecaList = UtilXml.childElementList(rootElement, "eca");
120         Iterator JavaDoc ecaIt = ecaList.iterator();
121         int numDefs = 0;
122         while (ecaIt.hasNext()) {
123             Element JavaDoc e = (Element JavaDoc) ecaIt.next();
124             String JavaDoc entityName = e.getAttribute("entity");
125             String JavaDoc eventName = e.getAttribute("event");
126             Map JavaDoc eventMap = (Map JavaDoc) ecaCache.get(entityName);
127             List JavaDoc rules = null;
128             if (eventMap == null) {
129                 eventMap = new HashMap JavaDoc();
130                 rules = new LinkedList JavaDoc();
131                 ecaCache.put(entityName, eventMap);
132                 eventMap.put(eventName, rules);
133             } else {
134                 rules = (List JavaDoc) eventMap.get(eventName);
135                 if (rules == null) {
136                     rules = new LinkedList JavaDoc();
137                     eventMap.put(eventName, rules);
138                 }
139             }
140             rules.add(new EntityEcaRule(e));
141             numDefs++;
142         }
143         Debug.logImportant("Loaded " + numDefs + " Entity ECA definitions from " + handler.getLocation() + " in loader " + handler.getLoaderName(), module);
144     }
145
146     public static Collection JavaDoc getEntityEcaRules(GenericDelegator delegator, String JavaDoc entityName, String JavaDoc event) {
147         Map JavaDoc ecaCache = EntityEcaUtil.getEntityEcaCache(EntityEcaUtil.getEntityEcaReaderName(delegator.getDelegatorName()));
148         Map JavaDoc eventMap = (Map JavaDoc) ecaCache.get(entityName);
149         if (eventMap != null) {
150             if (event != null) {
151                 return (Collection JavaDoc) eventMap.get(event);
152             } else {
153                 return eventMap.values();
154             }
155         }
156         return null;
157     }
158 }
159
Popular Tags