1 package org.collectionspace.services.nuxeo.listener;
3 import java.io.Serializable;
4 import java.util.ArrayList;
5 import java.util.HashMap;
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;
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>();
22 static final String DOCMODEL_CONTEXT_PROPERTY_PREFIX = ScopeType.DEFAULT.getScopePrefix();
24 public AbstractCSEventListenerImpl() {
25 // Intentionally left blank
28 protected List<String> getRepositoryNameList() {
29 return repositoryNameList;
32 protected Map<String, Map<String, Map<String, String>>> getEventListenerParamsMap() {
33 return eventListenerParamsMap;
37 public boolean isRegistered(Event event) {
38 boolean result = false;
40 if (event != null && event.getContext() != null) {
41 result = repositoryNameList.contains(event.getContext().getRepositoryName());
49 * Returns 'true' if this collection changed as a result of the call.
52 public boolean register(String respositoryName, EventListenerConfig eventListenerConfig) {
53 boolean result = false;
55 // Using the repositoryName as a qualifier, register this event listener's name as specified in the tenant bindings.
56 setName(respositoryName, eventListenerConfig.getId());
58 // Register this event listener with the given repository name
59 if (getRepositoryNameList().add(respositoryName)) {
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) {
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
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
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);
97 protected void setName(String repositoryName, String eventListenerName) {
98 nameMap.put(repositoryName, eventListenerName);
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
108 public String getName(String repositoryName) {
109 return nameMap.get(repositoryName);
113 // Set a property in the document model's transient context.
116 public void setDocModelContextProperty(DocumentModel collectionObjectDocModel, String key, Serializable value) {
117 ScopedMap contextData = collectionObjectDocModel.getContextData();
118 contextData.putIfAbsent(DOCMODEL_CONTEXT_PROPERTY_PREFIX + key, value);
122 // Clear a property from the docModel's context
125 public void clearDocModelContextProperty(DocumentModel docModel, String key) {
126 ScopedMap contextData = docModel.getContextData();
127 contextData.remove(DOCMODEL_CONTEXT_PROPERTY_PREFIX + key);