/** * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.brixcms.jcr.base.action; import javax.jcr.Item; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.lock.Lock; import javax.jcr.version.Version; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class CompoundActionHandler extends AbstractActionHandler { private final List<AbstractActionHandler> handlers = new ArrayList<AbstractActionHandler>(); public void addHandler(AbstractActionHandler handler) { if (handler == null) { throw new IllegalArgumentException("Argument 'handler' may not be null."); } handlers.add(handler); sort(); } private void sort() { Collections.sort(handlers, new Comparator<AbstractActionHandler>() { public int compare(AbstractActionHandler o1, AbstractActionHandler o2) { return o1.getPriority() - o2.getPriority(); } }); } @Override public void afterItemRefresh(Item item, boolean keepChanges) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterItemRefresh(item, keepChanges); } } @Override public void afterItemSave(Item item) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterItemSave(item); } } @Override public void afterNodeAdd(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeAdd(node); } } @Override public void afterNodeAddMixin(Node node, String mixin) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeAddMixin(node, mixin); } } @Override public void afterNodeCancelMerge(Node node, Version version) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeCancelMerge(node, version); } } @Override public void afterNodeCheckin(Node node, Version version) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeCheckin(node, version); } } @Override public void afterNodeCheckout(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeCheckout(node); } } @Override public void afterNodeChildNodesOrderChange(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeChildNodesOrderChange(node); } } @Override public void afterNodeDoneMerge(Node node, Version version) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeDoneMerge(node, version); } } @Override public void afterNodeLock(Node node, boolean isDeep, boolean isSessionScoped, Lock lock) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeLock(node, isDeep, isSessionScoped, lock); } } @Override public void afterNodeRemoveMixin(Node node, String mixin) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeRemoveMixin(node, mixin); } } @Override public void afterNodeRestoreVersion(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeRestoreVersion(node); } } @Override public void afterNodeUnlock(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeUnlock(node); } } @Override public void afterNodeUpdate(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterNodeUpdate(node); } } @Override public void afterPropertyRemove(Node node, String propertyName) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterPropertyRemove(node, propertyName); } } @Override public void afterPropertySet(Property property) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterPropertySet(property); } } @Override public void afterSessionImportXML(String parentAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterSessionImportXML(parentAbsPath); } } @Override public void afterSessionNodeMove(String sourcePath, String destinationPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterSessionNodeMove(sourcePath, destinationPath); } } @Override public void afterSessionRefresh(boolean keepChanges) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterSessionRefresh(keepChanges); } } @Override public void afterSessionSave() throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterSessionSave(); } } @Override public void afterWorkspaceClone(String srcWorkspace, String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterWorkspaceClone(srcWorkspace, srcAbsPath, destAbsPath); } } @Override public void afterWorkspaceCopy(String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterWorkspaceCopy(srcAbsPath, destAbsPath); } } @Override public void afterWorkspaceCopy(String srcWorkspace, String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterWorkspaceCopy(srcWorkspace, srcAbsPath, destAbsPath); } } @Override public void afterWorkspaceImportXML(String parentAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterWorkspaceImportXML(parentAbsPath); } } @Override public void afterWorkspaceMove(String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.afterWorkspaceMove(srcAbsPath, destAbsPath); } } @Override public void beforeItemRefresh(Item item, boolean keepChanges) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeItemRefresh(item, keepChanges); } } @Override public void beforeItemSave(Item item) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeItemSave(item); } } @Override public void beforeNodeAdd(Node parent, String name, String primaryType) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeAdd(parent, name, primaryType); } } @Override public void beforeNodeAddMixin(Node node, String mixin) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeAddMixin(node, mixin); } } @Override public void beforeNodeCancelMerge(Node node, Version version) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeCancelMerge(node, version); } } @Override public void beforeNodeCheckin(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeCheckin(node); } } @Override public void beforeNodeCheckout(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeCheckout(node); } } @Override public void beforeNodeChildNodesOrderChange(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeChildNodesOrderChange(node); } } @Override public void beforeNodeDoneMerge(Node node, Version version) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeDoneMerge(node, version); } } @Override public void beforeNodeLock(Node node, boolean isDeep, boolean isSessionScoped) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeLock(node, isDeep, isSessionScoped); } } @Override public void beforeNodeRemove(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeRemove(node); } } @Override public void beforeNodeRemoveMixin(Node node, String mixin) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeRemoveMixin(node, mixin); } } @Override public void beforeNodeRestoreVersion(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeRestoreVersion(node); } } @Override public void beforeNodeUnlock(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeUnlock(node); } } @Override public void beforeNodeUpdate(Node node) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeNodeUpdate(node); } } @Override public void beforePropertyRemove(Node node, String propertyName) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforePropertyRemove(node, propertyName); } } @Override public void beforePropertySet(Node node, String propertyName) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforePropertySet(node, propertyName); } } @Override public void beforeSessionImportXML(String parentAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeSessionImportXML(parentAbsPath); } } @Override public void beforeSessionNodeMove(String sourcePath, String destinationPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeSessionNodeMove(sourcePath, destinationPath); } } @Override public void beforeSessionRefresh(boolean keepChanges) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeSessionRefresh(keepChanges); } } @Override public void beforeSessionSave() throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeSessionSave(); } } @Override public void beforeWorkspaceClone(String srcWorkspace, String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeWorkspaceClone(srcWorkspace, srcAbsPath, destAbsPath); } } @Override public void beforeWorkspaceCopy(String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeWorkspaceCopy(srcAbsPath, destAbsPath); } } @Override public void beforeWorkspaceCopy(String srcWorkspace, String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeWorkspaceCopy(srcWorkspace, srcAbsPath, destAbsPath); } } @Override public void beforeWorkspaceImportXML(String parentAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeWorkspaceImportXML(parentAbsPath); } } @Override public void beforeWorkspaceMove(String srcAbsPath, String destAbsPath) throws RepositoryException { for (AbstractActionHandler handler : handlers) { handler.beforeWorkspaceMove(srcAbsPath, destAbsPath); } } public void removeHAndler(AbstractActionHandler handler) { handlers.remove(handler); } }