diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/classified-content-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/classified-content-context.xml index c3222767b6..5f8035cfc2 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/classified-content-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/classified-content-context.xml @@ -66,8 +66,6 @@ - - diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AbstractPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AbstractPostMethodInvocationProcessor.java deleted file mode 100644 index 894e6e0216..0000000000 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AbstractPostMethodInvocationProcessor.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2005-2015 Alfresco Software Limited. - * - * This file is part of Alfresco - * - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - */ -package org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor; - - -/** - * Abstract Post Method Invocation Processor - * - * @author Tuna Aksoy - * @since 3.0 - */ -public abstract class AbstractPostMethodInvocationProcessor extends BasePostMethodInvocationProcessor -{ - /** - * Abstract method to process a single element - * - * @param object The element to process - * @return Processed element - */ - protected abstract T processSingleElement(T object); - - /** - * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#process(java.lang.Object) - */ - @Override - public T process(T object) - { - T result = object; - - if (result != null) - { - result = processSingleElement(result); - } - - return result; - } -} diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ArrayPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ArrayPostMethodInvocationProcessor.java index f1fce3b821..1584276c36 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ArrayPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ArrayPostMethodInvocationProcessor.java @@ -19,7 +19,6 @@ package org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor; import static java.lang.reflect.Array.newInstance; -import static org.alfresco.util.ParameterCheck.mandatory; import java.lang.reflect.Array; import java.util.ArrayList; @@ -52,39 +51,40 @@ public class ArrayPostMethodInvocationProcessor extends BasePostMethodInvocation @Override public T process(T object) { - mandatory("object", object); - T result = object; - T[] objects = (T[]) result; - T obj = objects[0]; - BasePostMethodInvocationProcessor processor = getPostMethodInvocationProcessor().getProcessor(obj); - if (processor != null) + if (result != null) { - int length = objects.length; - List processedObjects = new ArrayList(); + T[] objects = (T[]) result; + T obj = objects[0]; - for (int i = 0; i < length; i++) + BasePostMethodInvocationProcessor processor = getPostMethodInvocationProcessor().getProcessor(obj); + if (processor != null) { - Object processedObject = processor.process(objects[i]); - if (processedObject != null) + int length = objects.length; + List processedObjects = new ArrayList(); + + for (int i = 0; i < length; i++) { - processedObjects.add(processedObject); + Object processedObject = processor.process(objects[i]); + if (processedObject != null) + { + processedObjects.add(processedObject); + } } + + int size = processedObjects.size(); + T[] objs = (T[]) newInstance(obj.getClass(), size); + + for (int i = 0; i < size; i++) + { + objs[i] = (T) processedObjects.get(i); + } + + result = (T) objs; } - - int size = processedObjects.size(); - T[] objs = (T[]) newInstance(obj.getClass(), size); - - for (int i = 0; i < size; i++) - { - objs[i] = (T) processedObjects.get(i); - } - - result = (T) objs; } return result; } - } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AssociationRefPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AssociationRefPostMethodInvocationProcessor.java index 990aa3df7c..e7e83dfe8b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AssociationRefPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/AssociationRefPostMethodInvocationProcessor.java @@ -29,7 +29,7 @@ import org.springframework.stereotype.Component; * @since 3.0 */ @Component -public class AssociationRefPostMethodInvocationProcessor extends AbstractPostMethodInvocationProcessor +public class AssociationRefPostMethodInvocationProcessor extends BasePostMethodInvocationProcessor { /** * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#getClassName() @@ -41,19 +41,29 @@ public class AssociationRefPostMethodInvocationProcessor extends AbstractPostMet } /** - * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AbstractPostMethodInvocationProcessor#processSingleElement(java.lang.Object) + * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#process(java.lang.Object) */ @Override - protected T processSingleElement(T object) + public T process(T object) { - AssociationRef associationRef = getClassName().cast(object); + T result = object; - NodeRef sourceRef = associationRef.getSourceRef(); - NodeRef filteredSource = filter(sourceRef); + if (result != null) + { + AssociationRef associationRef = getClassName().cast(result); - NodeRef targetRef = associationRef.getTargetRef(); - NodeRef filteredTarget = filter(targetRef); + NodeRef sourceRef = associationRef.getSourceRef(); + NodeRef filteredSource = filter(sourceRef); - return (filteredSource == null || filteredTarget == null) ? null : object; + NodeRef targetRef = associationRef.getTargetRef(); + NodeRef filteredTarget = filter(targetRef); + + if (filteredSource == null || filteredTarget == null) + { + result = null; + } + } + + return result; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/BasePostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/BasePostMethodInvocationProcessor.java index 9e8a9ff221..9024286533 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/BasePostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/BasePostMethodInvocationProcessor.java @@ -24,11 +24,9 @@ import javax.annotation.PostConstruct; import org.alfresco.module.org_alfresco_module_rm.classification.ContentClassificationService; import org.alfresco.module.org_alfresco_module_rm.classification.SecurityClearanceService; -import org.alfresco.repo.cache.SimpleCache; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.util.Pair; import org.springframework.beans.factory.annotation.Autowired; /** @@ -59,10 +57,6 @@ public abstract class BasePostMethodInvocationProcessor @Autowired private PostMethodInvocationProcessor postMethodInvocationProcessor; - /** Cache to hold the filtered node information */ - @Autowired - private SimpleCache, Pair> basePostMethodInvocationProcessorCache; - /** * @return the nodeService */ @@ -103,14 +97,6 @@ public abstract class BasePostMethodInvocationProcessor return this.postMethodInvocationProcessor; } - /** - * @return the cache - */ - protected SimpleCache, Pair> getCache() - { - return this.basePostMethodInvocationProcessorCache; - } - /** * @param nodeService the nodeService to set */ @@ -152,11 +138,12 @@ public abstract class BasePostMethodInvocationProcessor } /** - * @param cache the cache to set + * Registers the post method invocation processors */ - public void setCache(SimpleCache, Pair> cache) + @PostConstruct + public void register() { - this.basePostMethodInvocationProcessorCache = cache; + getPostMethodInvocationProcessor().register(this); } /** @@ -172,16 +159,7 @@ public abstract class BasePostMethodInvocationProcessor * @param object The object to check * @return The given object */ - public abstract T process(T object); - - /** - * Registers the post method invocation processors - */ - @PostConstruct - public void register() - { - getPostMethodInvocationProcessor().register(this); - } + protected abstract T process(T object); /** * Filters the node if the give node reference exist and it is a @@ -202,29 +180,6 @@ public abstract class BasePostMethodInvocationProcessor filter = null; } -// if (filter != null) -// { -// String uniqueCacheKey = getFullyAuthenticatedUser() /*+ userClearance?*/; -// -// Pair cacheKey = new Pair(uniqueCacheKey, filter); -// Pair cacheValue = getCache().get(cacheKey); -// -// if (cacheValue == null || !cacheValue.getFirst().booleanValue()) -// { -// if (getNodeService().exists(nodeRef) && -// getDictionaryService().isSubClass(getNodeService().getType(nodeRef), TYPE_CONTENT) && -// !getContentClassificationService().hasClearance(nodeRef)) -// { -// filter = null; -// } -// getCache().put(new Pair(uniqueCacheKey, nodeRef), new Pair(true, filter)); -// } -// else -// { -// filter = getCache().get(cacheKey).getSecond(); -// } -// } - return filter; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ChildAssociationRefPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ChildAssociationRefPostMethodInvocationProcessor.java index b6d2b85786..acd003e9d2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ChildAssociationRefPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ChildAssociationRefPostMethodInvocationProcessor.java @@ -29,7 +29,7 @@ import org.springframework.stereotype.Component; * @since 3.0 */ @Component -public class ChildAssociationRefPostMethodInvocationProcessor extends AbstractPostMethodInvocationProcessor +public class ChildAssociationRefPostMethodInvocationProcessor extends BasePostMethodInvocationProcessor { /** * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#getClassName() @@ -41,28 +41,34 @@ public class ChildAssociationRefPostMethodInvocationProcessor extends AbstractPo } /** - * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AbstractPostMethodInvocationProcessor#processSingleElement(java.lang.Object) + * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#process(java.lang.Object) */ @Override - protected T processSingleElement(T object) + public T process(T object) { - T result; + T result = object; - ChildAssociationRef childAssociationRef = getClassName().cast(object); - - NodeRef childRef = childAssociationRef.getChildRef(); - NodeRef filteredChildRef = filter(childRef); - - NodeRef parentRef = childAssociationRef.getParentRef(); - NodeRef filteredParentRef; - if (parentRef == null) + if (result != null) { - result = filteredChildRef == null ? null : object; - } - else - { - filteredParentRef = filter(parentRef); - result = (filteredChildRef == null || filteredParentRef == null) ? null : object; + ChildAssociationRef childAssociationRef = getClassName().cast(result); + + NodeRef childRef = childAssociationRef.getChildRef(); + NodeRef filteredChildRef = filter(childRef); + + NodeRef parentRef = childAssociationRef.getParentRef(); + NodeRef filteredParentRef; + if (parentRef == null && filteredChildRef == null) + { + result = null; + } + else + { + filteredParentRef = filter(parentRef); + if (filteredChildRef == null || filteredParentRef == null) + { + result = null; + } + } } return result; diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/NodeRefPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/NodeRefPostMethodInvocationProcessor.java index 9e7a267fda..d358357077 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/NodeRefPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/NodeRefPostMethodInvocationProcessor.java @@ -28,7 +28,7 @@ import org.springframework.stereotype.Component; * @since 3.0 */ @Component -public class NodeRefPostMethodInvocationProcessor extends AbstractPostMethodInvocationProcessor +public class NodeRefPostMethodInvocationProcessor extends BasePostMethodInvocationProcessor { /** * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#getClassName() @@ -40,12 +40,22 @@ public class NodeRefPostMethodInvocationProcessor extends AbstractPostMethodInvo } /** - * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AbstractPostMethodInvocationProcessor#processSingleElement(java.lang.Object) + * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#process(java.lang.Object) */ @Override - protected T processSingleElement(T object) + public T process(T object) { - NodeRef nodeRef = getClassName().cast(object); - return filter(nodeRef) == null ? null : object; + T result = object; + + if (result != null) + { + NodeRef nodeRef = getClassName().cast(result); + if (filter(nodeRef) == null) + { + result = null; + } + } + + return result; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PagingResultsPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PagingResultsPostMethodInvocationProcessor.java index 0497efd59c..345f82e88b 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PagingResultsPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PagingResultsPostMethodInvocationProcessor.java @@ -50,34 +50,41 @@ public class PagingResultsPostMethodInvocationProcessor extends BasePostMethodIn @Override public T process(T object) { - final PagingResults pagingResults = getClassName().cast(object); - List page = pagingResults.getPage(); - final List processedPage = getPostMethodInvocationProcessor().process(page); + T result = object; - return (T) new PagingResults() + if (result != null) { - @Override - public String getQueryExecutionId() + final PagingResults pagingResults = getClassName().cast(result); + List page = pagingResults.getPage(); + final List processedPage = getPostMethodInvocationProcessor().process(page); + + result = (T) new PagingResults() { - return pagingResults.getQueryExecutionId(); - } - @Override - public List getPage() - { - return processedPage; - } - @Override - public boolean hasMoreItems() - { - // FIXME: hasMoreItems might not be correct - return pagingResults.hasMoreItems(); - } - @Override - public Pair getTotalResultCount() - { - int size = processedPage.size(); - return new Pair(size, size); - } - }; + @Override + public String getQueryExecutionId() + { + return pagingResults.getQueryExecutionId(); + } + @Override + public List getPage() + { + return processedPage; + } + @Override + public boolean hasMoreItems() + { + // hasMoreItems might not be correct. Cannot determine the correct value as request details are needed. + return pagingResults.hasMoreItems(); + } + @Override + public Pair getTotalResultCount() + { + int size = processedPage.size(); + return new Pair(size, size); + } + }; + } + + return result; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PermissionCheckValuePostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PermissionCheckValuePostMethodInvocationProcessor.java index e7e68c335c..946059818a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PermissionCheckValuePostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/PermissionCheckValuePostMethodInvocationProcessor.java @@ -29,7 +29,7 @@ import org.springframework.stereotype.Component; * @since 3.0 */ @Component -public class PermissionCheckValuePostMethodInvocationProcessor extends AbstractPostMethodInvocationProcessor +public class PermissionCheckValuePostMethodInvocationProcessor extends BasePostMethodInvocationProcessor { /** * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#getClassName() @@ -41,13 +41,23 @@ public class PermissionCheckValuePostMethodInvocationProcessor extends AbstractP } /** - * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AbstractPostMethodInvocationProcessor#processSingleElement(java.lang.Object) + * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#process(java.lang.Object) */ @Override - protected T processSingleElement(T object) + public T process(T object) { - PermissionCheckValue permissionCheckValue = getClassName().cast(object); - NodeRef nodeRef = permissionCheckValue.getNodeRef(); - return filter(nodeRef) == null ? null : object; + T result = object; + + if (result != null) + { + PermissionCheckValue permissionCheckValue = getClassName().cast(result); + NodeRef nodeRef = permissionCheckValue.getNodeRef(); + if (filter(nodeRef) == null) + { + result = null; + } + } + + return result; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/QueryEngineResultsPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/QueryEngineResultsPostMethodInvocationProcessor.java index 298f56f95e..397fe98922 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/QueryEngineResultsPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/QueryEngineResultsPostMethodInvocationProcessor.java @@ -52,26 +52,33 @@ public class QueryEngineResultsPostMethodInvocationProcessor extends BasePostMet @Override public T process(T object) { - QueryEngineResults queryEngineResults = getClassName().cast(object); - Map, ResultSet> resultsMap = queryEngineResults.getResults(); - Map, ResultSet> returnMap = new HashMap<>(); - BasePostMethodInvocationProcessor processor = null; + T result = object; - for (Entry, ResultSet> entry : resultsMap.entrySet()) + if (result != null) { - ResultSet value = entry.getValue(); - if (processor == null) + QueryEngineResults queryEngineResults = getClassName().cast(result); + Map, ResultSet> resultsMap = queryEngineResults.getResults(); + Map, ResultSet> returnMap = new HashMap<>(); + BasePostMethodInvocationProcessor processor = null; + + for (Entry, ResultSet> entry : resultsMap.entrySet()) { - processor = getPostMethodInvocationProcessor().getProcessor(value); + ResultSet value = entry.getValue(); + if (processor == null) + { + processor = getPostMethodInvocationProcessor().getProcessor(value); + } + + ResultSet newResultSet = processor.process(value); + if (newResultSet != null) + { + returnMap.put(entry.getKey(), newResultSet); + } } - ResultSet newResultSet = processor.process(value); - if (newResultSet != null) - { - returnMap.put(entry.getKey(), newResultSet); - } + result = (T) new QueryEngineResults(returnMap); } - return (T) new QueryEngineResults(returnMap); + return result; } } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ResultSetPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ResultSetPostMethodInvocationProcessor.java index 81e5a322ae..4123b3967a 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ResultSetPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/ResultSetPostMethodInvocationProcessor.java @@ -61,7 +61,7 @@ public class ResultSetPostMethodInvocationProcessor extends BasePostMethodInvoca if (result != null) { - ResultSet returnedObject = getClassName().cast(object); + ResultSet returnedObject = getClassName().cast(result); BitSet inclusionMask = new BitSet(returnedObject.length()); FilteringResultSet filteringResultSet = new FilteringResultSet(returnedObject, inclusionMask); diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/StoreRefPostMethodInvocationProcessor.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/StoreRefPostMethodInvocationProcessor.java index 2093953cff..f0f310c86f 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/StoreRefPostMethodInvocationProcessor.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/classification/interceptor/processor/StoreRefPostMethodInvocationProcessor.java @@ -29,7 +29,7 @@ import org.springframework.stereotype.Component; * @since 3.0 */ @Component -public class StoreRefPostMethodInvocationProcessor extends AbstractPostMethodInvocationProcessor +public class StoreRefPostMethodInvocationProcessor extends BasePostMethodInvocationProcessor { /** * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.BasePostMethodInvocationProcessor#getClassName() @@ -44,10 +44,20 @@ public class StoreRefPostMethodInvocationProcessor extends AbstractPostMethodInv * @see org.alfresco.module.org_alfresco_module_rm.classification.interceptor.processor.AbstractPostMethodInvocationProcessor#processSingleElement(java.lang.Object) */ @Override - protected T processSingleElement(T object) + public T process(T object) { - StoreRef storeRef = getClassName().cast(object); - NodeRef nodeRef = getNodeService().getRootNode(storeRef); - return filter(nodeRef) == null ? null : object; + T result = object; + + if (result != null) + { + StoreRef storeRef = getClassName().cast(result); + NodeRef nodeRef = getNodeService().getRootNode(storeRef); + if (filter(nodeRef) == null) + { + result = null; + } + } + + return result; } }