]> git.aero2k.de Git - tmp/jakarta-migration.git/blob
ed6579b7769edc1c8da2755ec9a8274a435096fe
[tmp/jakarta-migration.git] /
1 package org.collectionspace.services.nuxeo.listener;
2
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import org.collectionspace.services.common.api.Tools;
10 import org.collectionspace.services.config.tenant.EventListenerConfig;
11 import org.collectionspace.services.config.tenant.Param;
12 import org.nuxeo.common.collections.ScopeType;
13 import org.nuxeo.common.collections.ScopedMap;
14 import org.nuxeo.ecm.core.api.DocumentModel;
15 import org.nuxeo.ecm.core.event.Event;
16
17 public abstract class AbstractCSEventListenerImpl implements CSEventListener {
18         private static List<String> repositoryNameList = new ArrayList<String>();
19         private static Map<String, Map<String, Map<String, String>>> eventListenerParamsMap = new HashMap<String, Map<String, Map<String, String>>>();  // <repositoryName, Map<EventListenerId, Map<key, value>>>
20         private static Map<String, String> nameMap = new HashMap<String, String>();
21         
22         static final String DOCMODEL_CONTEXT_PROPERTY_PREFIX = ScopeType.DEFAULT.getScopePrefix();
23         
24         public AbstractCSEventListenerImpl() {
25                 // Intentionally left blank
26         }
27         
28         protected List<String> getRepositoryNameList() {
29                 return repositoryNameList;
30         }
31         
32         protected Map<String, Map<String, Map<String, String>>> getEventListenerParamsMap() {
33                 return eventListenerParamsMap;
34         }
35
36         @Override
37         public boolean isRegistered(Event event) {
38                 boolean result = false;
39                 
40                 if (event != null && event.getContext() != null) {
41                         result = repositoryNameList.contains(event.getContext().getRepositoryName());
42                 }
43                 
44                 return result;
45         }
46
47
48         /**
49          * Returns 'true' if this collection changed as a result of the call. 
50          */
51         @Override
52         public boolean register(String respositoryName, EventListenerConfig eventListenerConfig) {
53                 boolean result = false;
54                 
55                 // Using the repositoryName as a qualifier, register this event listener's name as specified in the tenant bindings.
56                 setName(respositoryName, eventListenerConfig.getId());
57                 
58                 // Register this event listener with the given repository name
59                 if (getRepositoryNameList().add(respositoryName)) {
60                         result = true;
61                 }
62                 
63                 // Set this event listeners parameters, if any.  Params are qualified with the repositoryName since multiple tenants might be registering the same event listener but with different params.
64                 List<Param> paramList = eventListenerConfig.getParamList().getParam(); // values from the tenant bindings that we need to copy into the event listener
65                 if (paramList != null) {
66                         //
67                         // Get the list of event listeners for a given repository
68                         Map<String, Map<String, String>> eventListenerRepoParams = getEventListenerParamsMap().get(respositoryName); // Get the set of event listers for a given repository
69                         if (eventListenerRepoParams == null) {
70                                 eventListenerRepoParams = new HashMap<String, Map<String, String>>();
71                                 getEventListenerParamsMap().put(respositoryName, eventListenerRepoParams); // create and put an empty map
72                                 result = true;
73                         }
74                         //
75                         // Get the list of params for a given event listener for a given repository
76                         Map<String, String> eventListenerParams = eventListenerRepoParams.get(eventListenerConfig.getId()); // Get the set of params for a given event listener for a given repository
77                         if (eventListenerParams == null) {
78                                 eventListenerParams = new HashMap<String, String>();
79                                 eventListenerRepoParams.put(eventListenerConfig.getId(), eventListenerParams); // create and put an empty map
80                                 result = true;
81                         }
82                         //
83                         // copy all the values from the tenant bindings into the event listener
84                         for (Param params : paramList) {
85                                 String key = params.getKey();
86                                 String value = params.getValue();
87                                 if (Tools.notBlank(key)) {
88                                         eventListenerParams.put(key, value);
89                                         result = true;
90                                 }
91                         }
92                 }
93                 
94                 return result;
95         }
96         
97         protected void setName(String repositoryName, String eventListenerName) {
98                 nameMap.put(repositoryName, eventListenerName);
99         }
100
101         @Override
102         public Map<String, String> getParams(Event event) {
103                 String repositoryName = event.getContext().getRepositoryName();
104                 return getEventListenerParamsMap().get(repositoryName).get(getName(repositoryName));  // We need to qualify with the repositoryName since this event listener might be register by multiple tenants using different params
105         }
106         
107         @Override
108         public String getName(String repositoryName) {
109                 return nameMap.get(repositoryName);
110         }
111         
112         //
113         // Set a property in the document model's transient context.
114         //
115         @Override
116     public void setDocModelContextProperty(DocumentModel collectionObjectDocModel, String key, Serializable value) {
117         ScopedMap contextData = collectionObjectDocModel.getContextData();
118         contextData.putIfAbsent(DOCMODEL_CONTEXT_PROPERTY_PREFIX + key, value);        
119     }
120         
121     //
122     // Clear a property from the docModel's context
123         //
124         @Override
125         public void clearDocModelContextProperty(DocumentModel docModel, String key) {
126         ScopedMap contextData = docModel.getContextData();
127         contextData.remove(DOCMODEL_CONTEXT_PROPERTY_PREFIX + key);     
128         }
129
130 }