package com.github.dynamicextensionsalfresco.actions; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.alfresco.repo.action.executer.ActionExecuter; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class DefaultActionExecuterRegistry implements ActionExecuterRegistry, ApplicationContextAware { /* Dependencies */ private ApplicationContext applicationContext; /* State */ private final Map<String, ActionExecuter> actionExecutersByName = new ConcurrentHashMap<String, ActionExecuter>(); /* Operations */ @Override public boolean hasActionExecuter(final String name) { /* Note: we must verify the ApplicationContext for matching bean names as well. */ return actionExecutersByName.containsKey(name) || applicationContext.containsBeanDefinition(name); } @Override public ActionExecuter getActionExecuter(final String name) { return actionExecutersByName.get(name); } @Override public void registerActionExecuter(final ActionExecuter actionExecuter) { final String name = actionExecuter.getActionDefinition().getName(); if (hasActionExecuter(name)) { throw new IllegalStateException("Duplicate ActionExecuter " + name); } getActionExecutersByName().put(name, actionExecuter); } @Override public void unregisterActionExecuter(final ActionExecuter actionExecuter) { if (getActionExecutersByName().containsValue(actionExecuter)) { actionExecutersByName.remove(actionExecuter.getActionDefinition().getName()); } } /* Dependencies */ @Override public void setApplicationContext(final ApplicationContext applicationContext) { this.applicationContext = applicationContext; } /* State */ protected Map<String, ActionExecuter> getActionExecutersByName() { return actionExecutersByName; } }