OpenCMIS server performance improvements

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@29571 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Florian Mü
2011-08-05 13:58:17 +00:00
parent 382ed97a94
commit 46ef31e926
6 changed files with 143 additions and 73 deletions

View File

@@ -18,9 +18,9 @@
*/
package org.alfresco.opencmis.mapping;
import org.alfresco.opencmis.CMISConnector;
import java.util.List;
import org.alfresco.opencmis.dictionary.CMISNodeInfo;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
/**
* Action Evaluator whose evaluation takes place on parent
@@ -30,7 +30,6 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef;
public class ParentActionEvaluator extends AbstractActionEvaluator
{
private AbstractActionEvaluator evaluator;
private CMISConnector cmisConnector;
/**
* Construct
@@ -38,11 +37,10 @@ public class ParentActionEvaluator extends AbstractActionEvaluator
* @param serviceRegistry
* @param action
*/
protected ParentActionEvaluator(CMISConnector cmisConnector, AbstractActionEvaluator evaluator)
protected ParentActionEvaluator(AbstractActionEvaluator evaluator)
{
super(evaluator.getServiceRegistry(), evaluator.getAction());
this.evaluator = evaluator;
this.cmisConnector = cmisConnector;
}
public boolean isAllowed(CMISNodeInfo nodeInfo)
@@ -52,10 +50,10 @@ public class ParentActionEvaluator extends AbstractActionEvaluator
return false;
}
ChildAssociationRef car = getServiceRegistry().getNodeService().getPrimaryParent(nodeInfo.getNodeRef());
if ((car != null) && (car.getParentRef() != null))
List<CMISNodeInfo> parents = nodeInfo.getParents();
if (!parents.isEmpty())
{
return evaluator.isAllowed(cmisConnector.createNodeInfo(car.getParentRef()));
return evaluator.isAllowed(parents.get(0));
}
return false;

View File

@@ -19,11 +19,11 @@
package org.alfresco.opencmis.mapping;
import java.io.Serializable;
import java.util.List;
import org.alfresco.opencmis.CMISConnector;
import org.alfresco.opencmis.dictionary.CMISNodeInfo;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.apache.chemistry.opencmis.commons.PropertyIds;
/**
@@ -51,10 +51,10 @@ public class ParentProperty extends AbstractProperty
return null;
}
ChildAssociationRef car = getServiceRegistry().getNodeService().getPrimaryParent(nodeInfo.getNodeRef());
if ((car != null) && (car.getParentRef() != null))
List<CMISNodeInfo> parents = nodeInfo.getParents();
if (!parents.isEmpty())
{
return car.getParentRef().toString();
return parents.get(0).getObjectId();
}
return null;

View File

@@ -159,9 +159,8 @@ public class RuntimePropertyAccessorMapping implements PropertyAccessorMapping,
Action.CAN_GET_PROPERTIES, PermissionService.READ_PROPERTIES));
registerEvaluator(BaseTypeId.CMIS_DOCUMENT, new FixedValueActionEvaluator(serviceRegistry,
Action.CAN_GET_OBJECT_RELATIONSHIPS, true));
registerEvaluator(BaseTypeId.CMIS_DOCUMENT, new ParentActionEvaluator(cmisConnector,
new PermissionActionEvaluator(serviceRegistry, Action.CAN_GET_OBJECT_PARENTS,
PermissionService.READ_PERMISSIONS)));
registerEvaluator(BaseTypeId.CMIS_DOCUMENT, new ParentActionEvaluator(new PermissionActionEvaluator(
serviceRegistry, Action.CAN_GET_OBJECT_PARENTS, PermissionService.READ_PERMISSIONS)));
// Is CAN_MOVE correct mapping?
registerEvaluator(BaseTypeId.CMIS_DOCUMENT, new CurrentVersionEvaluator(serviceRegistry,
new PermissionActionEvaluator(serviceRegistry, Action.CAN_MOVE_OBJECT, PermissionService.DELETE_NODE),
@@ -213,11 +212,10 @@ public class RuntimePropertyAccessorMapping implements PropertyAccessorMapping,
Action.CAN_GET_PROPERTIES, PermissionService.READ_PROPERTIES));
registerEvaluator(BaseTypeId.CMIS_FOLDER, new FixedValueActionEvaluator(serviceRegistry,
Action.CAN_GET_OBJECT_RELATIONSHIPS, true));
registerEvaluator(BaseTypeId.CMIS_FOLDER, new ParentActionEvaluator(cmisConnector,
new PermissionActionEvaluator(serviceRegistry, Action.CAN_GET_OBJECT_PARENTS,
PermissionService.READ_PERMISSIONS)));
registerEvaluator(BaseTypeId.CMIS_FOLDER, new ParentActionEvaluator(new PermissionActionEvaluator(
serviceRegistry, Action.CAN_GET_OBJECT_PARENTS, PermissionService.READ_PERMISSIONS)));
registerEvaluator(BaseTypeId.CMIS_FOLDER, new RootFolderEvaluator(serviceRegistry, new ParentActionEvaluator(
cmisConnector, new PermissionActionEvaluator(serviceRegistry, Action.CAN_GET_FOLDER_PARENT,
new PermissionActionEvaluator(serviceRegistry, Action.CAN_GET_FOLDER_PARENT,
PermissionService.READ_PERMISSIONS)), false));
registerEvaluator(BaseTypeId.CMIS_FOLDER, new PermissionActionEvaluator(serviceRegistry,
Action.CAN_GET_DESCENDANTS, PermissionService.READ_CHILDREN));