mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-10-08 14:51:49 +00:00
119558 gcornwell: Merged code coverage improvements to 5.1-MC1 (5.1.0) r117774 gjames: RA-567: Increase /workflow/processes API code coverage r117773 gjames: RA-567: /workflow/processes coverage, removed unused ActivitiTypeConverter r116883 gjames: RA-531: reapplied change after merge, for MultiTServiceImpl test coverage r116629 gjames: RA-568 Increase /workflow/process-definitions API code coverage r116574 gjames: RA-569 Increase /workflow/tasks API code coverage r116286 gjames: RA-567: Increase /workflow/processes API code coverage r115853 gjames: RA-566: Increasing /people api coverage (description field) r115811 gjames: RA-566: Increasing /people api coverage r113007 gjames: Adding additional test coverage for DictionaryNamespaceComponent and DynamicNamespacePrefixResolver RA-521 r113006 gjames: Adding additional test coverage for DictionaryNamespaceComponent and DictionaryComponent RA-514 r112969 gjames: Adding additional test coverage for TemplateServiceImpl RA-530 r112960 gjames: Alternative test approach for ModuleServiceImpl RA-520 r112703 gjames: Adding additional test coverage for NodeLocatorService RA-522 r112702 gjames: Adding additional test coverage for JobLockServiceImpl RA-516 r112699 gjames: Adding additional test coverage for ModuleServiceImpl RA-520 r112508 gjames: Adding additional test coverage for RenditionServiceImpl RA-526 r112476 gjames: Adding additional test coverage for ContentServiceImpl RA-513 r112475 gjames: Adding additional test coverage for MimetypeMap RA-519 r112238 gjames: Adding additional test coverage for MimetypeMap RA-519 r112237 gjames: Adding additional test coverage for TaggingService RA-529 r112236 gjames: Adding additional test coverage for MultiTServiceImpl RA-531 r112206 gjames: Adding additional test coverage for ContentServiceImpl RA-513 r112167 gcornwell: RA-523: Increase NodeService code coverage (removed redundant code that was testing a version store we no longer use) r112102 gjames: Reverted changes to PermissionServiceImpl for RA-524 r112048 gjames: Temporarily removed some PermissionServiceImpl code. I need to put it back. r111620 gjames: Adding additional test coverage for PermissionService RA-524 r111619 gjames: Added some @Override to make Sonar happier r111456 gjames: Adding additional test coverage for AuthenticationService RA-509 r111427 gjames: Adding additional test coverage for AttributeService RA-509 r111317 gjames: Adding additional test coverage for WorkflowService RA-533 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@119945 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
255 lines
10 KiB
Java
255 lines
10 KiB
Java
/*
|
|
* Copyright (C) 2005-2010 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.repo.version;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
import org.alfresco.model.ContentModel;
|
|
import org.alfresco.repo.version.common.VersionUtil;
|
|
import org.alfresco.service.cmr.repository.AssociationRef;
|
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
|
import org.alfresco.service.cmr.repository.InvalidNodeRefException;
|
|
import org.alfresco.service.cmr.repository.NodeRef;
|
|
import org.alfresco.service.cmr.repository.NodeService;
|
|
import org.alfresco.service.cmr.repository.StoreRef;
|
|
import org.alfresco.service.namespace.QName;
|
|
import org.alfresco.service.namespace.QNamePattern;
|
|
|
|
/**
|
|
* The version2 store node service implementation
|
|
*/
|
|
public class Node2ServiceImpl extends NodeServiceImpl implements NodeService, Version2Model
|
|
{
|
|
/**
|
|
* The name of the spoofed root association
|
|
*/
|
|
private static final QName rootAssocName = QName.createQName(Version2Model.NAMESPACE_URI, "versionedState");
|
|
|
|
|
|
/**
|
|
* Type translation for version store
|
|
*/
|
|
public QName getType(NodeRef nodeRef) throws InvalidNodeRefException
|
|
{
|
|
// frozen node type -> replaced by actual node type of the version node
|
|
return (QName)this.dbNodeService.getType(VersionUtil.convertNodeRef(nodeRef));
|
|
}
|
|
|
|
/**
|
|
* Aspects translation for version store
|
|
*/
|
|
public Set<QName> getAspects(NodeRef nodeRef) throws InvalidNodeRefException
|
|
{
|
|
Set<QName> aspects = this.dbNodeService.getAspects(VersionUtil.convertNodeRef(nodeRef));
|
|
aspects.remove(Version2Model.ASPECT_VERSION);
|
|
return aspects;
|
|
}
|
|
|
|
/**
|
|
* Properties translation for version store
|
|
*/
|
|
public Map<QName, Serializable> getProperties(NodeRef nodeRef) throws InvalidNodeRefException
|
|
{
|
|
Map<QName, Serializable> props = dbNodeService.getProperties(VersionUtil.convertNodeRef(nodeRef));
|
|
VersionUtil.convertFrozenToOriginalProps(props);
|
|
|
|
return props;
|
|
}
|
|
|
|
/**
|
|
* Property translation for version store
|
|
*/
|
|
public Serializable getProperty(NodeRef nodeRef, QName qname) throws InvalidNodeRefException
|
|
{
|
|
// TODO optimise - get property directly and convert if needed
|
|
Map<QName, Serializable> properties = getProperties(VersionUtil.convertNodeRef(nodeRef));
|
|
return properties.get(qname);
|
|
}
|
|
|
|
/**
|
|
* The node will appear to be attached to the root of the version store
|
|
*
|
|
* @see NodeService#getParentAssocs(NodeRef, QNamePattern, QNamePattern)
|
|
*/
|
|
public List<ChildAssociationRef> getParentAssocs(NodeRef nodeRef, QNamePattern typeQNamePattern, QNamePattern qnamePattern)
|
|
{
|
|
List<ChildAssociationRef> result = new ArrayList<ChildAssociationRef>();
|
|
if (qnamePattern.isMatch(rootAssocName) == true)
|
|
{
|
|
result.add(new ChildAssociationRef(
|
|
ContentModel.ASSOC_CHILDREN,
|
|
dbNodeService.getRootNode(new StoreRef(StoreRef.PROTOCOL_WORKSPACE, Version2Model.STORE_ID)),
|
|
rootAssocName,
|
|
nodeRef));
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Child Assocs translation for version store
|
|
*/
|
|
public List<ChildAssociationRef> getChildAssocs(NodeRef nodeRef, QNamePattern typeQNamePattern, QNamePattern qnamePattern) throws InvalidNodeRefException
|
|
{
|
|
// Get the child assoc references from the version store
|
|
List<ChildAssociationRef> childAssocRefs = this.dbNodeService.getChildAssocs(
|
|
VersionUtil.convertNodeRef(nodeRef),
|
|
typeQNamePattern, qnamePattern);
|
|
|
|
List<ChildAssociationRef> result = new ArrayList<ChildAssociationRef>(childAssocRefs.size());
|
|
|
|
for (ChildAssociationRef childAssocRef : childAssocRefs)
|
|
{
|
|
if (! childAssocRef.getTypeQName().equals(Version2Model.CHILD_QNAME_VERSIONED_ASSOCS))
|
|
{
|
|
// Get the child reference
|
|
NodeRef childRef = childAssocRef.getChildRef();
|
|
NodeRef referencedNode = (NodeRef)this.dbNodeService.getProperty(childRef, ContentModel.PROP_REFERENCE);
|
|
|
|
if (this.dbNodeService.exists(referencedNode))
|
|
{
|
|
// Build a child assoc ref to add to the returned list
|
|
ChildAssociationRef newChildAssocRef = new ChildAssociationRef(
|
|
childAssocRef.getTypeQName(),
|
|
childAssocRef.getParentRef(),
|
|
childAssocRef.getQName(),
|
|
referencedNode,
|
|
childAssocRef.isPrimary(),
|
|
childAssocRef.getNthSibling());
|
|
|
|
result.add(newChildAssocRef);
|
|
}
|
|
}
|
|
}
|
|
|
|
// sort the results so that the order appears to be exactly as it was originally
|
|
Collections.sort(result);
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Simulates the node begin attached to the root node of the version store.
|
|
*/
|
|
public ChildAssociationRef getPrimaryParent(NodeRef nodeRef) throws InvalidNodeRefException
|
|
{
|
|
return new ChildAssociationRef(
|
|
ContentModel.ASSOC_CHILDREN,
|
|
dbNodeService.getRootNode(new StoreRef(StoreRef.PROTOCOL_WORKSPACE, Version2Model.STORE_ID)),
|
|
rootAssocName,
|
|
nodeRef);
|
|
}
|
|
|
|
/**
|
|
* Assocs translation for version store
|
|
*
|
|
* @since 3.3 (Ent)
|
|
*/
|
|
@Override
|
|
public List<AssociationRef> getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern)
|
|
{
|
|
// Get the assoc references from the version store
|
|
List<ChildAssociationRef> childAssocRefs = this.dbNodeService.getChildAssocs(
|
|
VersionUtil.convertNodeRef(sourceRef),
|
|
Version2Model.CHILD_QNAME_VERSIONED_ASSOCS, qnamePattern);
|
|
|
|
List<AssociationRef> result = new ArrayList<AssociationRef>(childAssocRefs.size());
|
|
|
|
for (ChildAssociationRef childAssocRef : childAssocRefs)
|
|
{
|
|
// Get the assoc reference
|
|
NodeRef childRef = childAssocRef.getChildRef();
|
|
NodeRef referencedNode = (NodeRef)this.dbNodeService.getProperty(childRef, ContentModel.PROP_REFERENCE);
|
|
|
|
if (this.dbNodeService.exists(referencedNode))
|
|
{
|
|
Long assocDbId = (Long)this.dbNodeService.getProperty(childRef, Version2Model.PROP_QNAME_ASSOC_DBID);
|
|
|
|
// Build an assoc ref to add to the returned list
|
|
AssociationRef newAssocRef = new AssociationRef(
|
|
assocDbId,
|
|
sourceRef,
|
|
childAssocRef.getQName(),
|
|
referencedNode);
|
|
|
|
result.add(newAssocRef);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
* <p>
|
|
*
|
|
* Implementation for version store v2
|
|
*/
|
|
@Override
|
|
public List<AssociationRef> getTargetAssocsByPropertyValue(NodeRef sourceRef, QNamePattern qnamePattern, QName propertyQName, Serializable propertyValue)
|
|
{
|
|
// If lightWeightVersionStore call default version store implementation.
|
|
if (sourceRef.getStoreRef().getIdentifier().equals(VersionModel.STORE_ID))
|
|
{
|
|
return super.getTargetAssocsByPropertyValue(sourceRef, qnamePattern, propertyQName, propertyValue);
|
|
}
|
|
|
|
// Get the assoc references from the version store.
|
|
List<ChildAssociationRef> childAssocRefs = this.dbNodeService.getChildAssocs(VersionUtil.convertNodeRef(sourceRef),
|
|
Version2Model.CHILD_QNAME_VERSIONED_ASSOCS, qnamePattern);
|
|
|
|
List<AssociationRef> result = new ArrayList<AssociationRef>(childAssocRefs.size());
|
|
|
|
for (ChildAssociationRef childAssocRef : childAssocRefs)
|
|
{
|
|
// Get the assoc reference.
|
|
NodeRef childRef = childAssocRef.getChildRef();
|
|
NodeRef referencedNode = (NodeRef) this.dbNodeService.getProperty(childRef, ContentModel.PROP_REFERENCE);
|
|
|
|
if (this.dbNodeService.exists(referencedNode))
|
|
{
|
|
Long assocDbId = (Long) this.dbNodeService.getProperty(childRef, Version2Model.PROP_QNAME_ASSOC_DBID);
|
|
|
|
// Check if property type validation has to be done.
|
|
if (propertyQName != null)
|
|
{
|
|
Serializable propertyValueRetrieved = this.dbNodeService.getProperty(referencedNode, propertyQName);
|
|
|
|
// Check if property value has been retrieved (property
|
|
// exists) and is equal to the requested value.
|
|
if (propertyValueRetrieved == null || !propertyValueRetrieved.equals(propertyValue))
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
// Build an assoc ref to add to the returned list.
|
|
AssociationRef newAssocRef = new AssociationRef(assocDbId, sourceRef, childAssocRef.getQName(), referencedNode);
|
|
result.add(newAssocRef);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|