use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualVersionServiceExtension method revert.
@Override
public void revert(NodeRef nodeRef, Version version) {
VersionServiceTrait theTrait = getTrait();
Reference reference = Reference.fromNodeRef(nodeRef);
if (reference == null) {
theTrait.revert(nodeRef, version);
} else {
NodeRef materialNode = smartStore.materialize(reference);
Version actualVersion = VirtualVersionServiceExtension.this.materializeVersionIfReference(version);
theTrait.revert(materialNode, actualVersion);
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualNodeServiceExtension method addProperties.
@Override
public void addProperties(NodeRef nodeRef, Map<QName, Serializable> properties) {
Reference reference = Reference.fromNodeRef(nodeRef);
if (reference != null) {
NodeRef actualNodeRef = reference.execute(new GetActualNodeRefMethod(null));
getTrait().addProperties(actualNodeRef, properties);
} else {
getTrait().addProperties(nodeRef, properties);
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualNodeServiceExtension method getTargetAssocs.
@Override
public List<AssociationRef> getTargetAssocs(NodeRef sourceRef, QNamePattern qnamePattern) {
NodeServiceTrait theTrait = getTrait();
List<AssociationRef> targetAssocs = null;
Reference reference = Reference.fromNodeRef(sourceRef);
if (reference != null) {
if (smartStore.canMaterialize(reference)) {
NodeRef materializedReferece = smartStore.materialize(reference);
targetAssocs = theTrait.getTargetAssocs(materializedReferece, qnamePattern);
} else {
targetAssocs = new LinkedList<>();
}
} else {
targetAssocs = theTrait.getTargetAssocs(sourceRef, qnamePattern);
}
List<AssociationRef> virtualizedIfNeededTargetAssocs = null;
Reference sourceReference = Reference.fromNodeRef(sourceRef);
if (sourceReference != null) {
virtualizedIfNeededTargetAssocs = new LinkedList<>();
for (AssociationRef associationRef : targetAssocs) {
NodeRef targetNodeRef = associationRef.getTargetRef();
Reference targetReference = NodeProtocol.newReference(targetNodeRef, sourceReference.execute(new GetParentReferenceMethod()));
AssociationRef virtualAssocRef = new AssociationRef(associationRef.getId(), sourceRef, associationRef.getTypeQName(), targetReference.toNodeRef(targetNodeRef.getStoreRef()));
virtualizedIfNeededTargetAssocs.add(virtualAssocRef);
}
} else {
virtualizedIfNeededTargetAssocs = targetAssocs;
if (DownloadModel.TYPE_DOWNLOAD.equals(environment.getType(sourceRef))) {
if (qnamePattern.isMatch(DownloadModel.ASSOC_REQUESTED_NODES)) {
List<AssociationRef> virtualTargetAssocs = getDownloadTargetAssocs(sourceRef);
virtualizedIfNeededTargetAssocs.addAll(virtualTargetAssocs);
}
}
}
return virtualizedIfNeededTargetAssocs;
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualNodeServiceExtension method getChildAssocsByPropertyValue.
@Override
public List<ChildAssociationRef> getChildAssocsByPropertyValue(NodeRef nodeRef, QName propertyQName, Serializable value) {
NodeServiceTrait theTrait = getTrait();
boolean canVirtualize = canVirtualizeAssocNodeRef(nodeRef);
if (canVirtualize) {
Reference reference = smartStore.virtualize(nodeRef);
List<ChildAssociationRef> virtualAssociations = smartStore.getChildAssocsByPropertyValue(reference, propertyQName, value);
List<ChildAssociationRef> associations = new LinkedList<>(virtualAssociations);
if (smartStore.canMaterialize(reference)) {
NodeRef materialReference = smartStore.materialize(reference);
List<ChildAssociationRef> actualAssociations = theTrait.getChildAssocsByPropertyValue(materialReference, propertyQName, value);
associations.addAll(actualAssociations);
}
return associations;
} else {
return theTrait.getChildAssocsByPropertyValue(nodeRef, propertyQName, value);
}
}
use of org.alfresco.repo.virtual.ref.Reference in project alfresco-repository by Alfresco.
the class VirtualNodeServiceExtension method createNode.
@Override
public ChildAssociationRef createNode(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName, Map<QName, Serializable> properties) {
NodeServiceTrait theTrait = getTrait();
if ((Reference.fromNodeRef(parentRef) != null) && !isVirtualContextFolder(parentRef, environment)) {
// (repo)
if (environment.isSubClass(nodeTypeQName, ContentModel.TYPE_FOLDER)) {
throw new VirtualizationException("The creation of folders within virtual folders is disabled.");
}
try {
Reference parentReference = Reference.fromNodeRef(parentRef);
FilingData filingData = smartStore.createFilingData(parentReference, assocTypeQName, assocQName, nodeTypeQName, properties);
NodeRef childParentNodeRef = filingData.getFilingNodeRef();
if (childParentNodeRef != null) {
Map<QName, Serializable> filingDataProperties = filingData.getProperties();
QName changedAssocQName = assocQName;
if (filingDataProperties.containsKey(ContentModel.PROP_NAME)) {
String fileName = (String) filingDataProperties.get(ContentModel.PROP_NAME);
String changedFileName = handleExistingFile(childParentNodeRef, fileName);
if (!changedFileName.equals(fileName)) {
filingDataProperties.put(ContentModel.PROP_NAME, changedFileName);
QName filingDataAssocQName = filingData.getAssocQName();
changedAssocQName = QName.createQName(filingDataAssocQName.getNamespaceURI(), QName.createValidLocalName(changedFileName));
}
}
ChildAssociationRef actualChildAssocRef = theTrait.createNode(childParentNodeRef, filingData.getAssocTypeQName(), changedAssocQName == null ? filingData.getAssocQName() : changedAssocQName, filingData.getNodeTypeQName(), filingDataProperties);
Reference nodeProtocolChildRef = NodeProtocol.newReference(actualChildAssocRef.getChildRef(), parentReference);
QName vChildAssocQName = QName.createQNameWithValidLocalName(VirtualContentModel.VIRTUAL_CONTENT_MODEL_1_0_URI, actualChildAssocRef.getQName().getLocalName());
ChildAssociationRef childAssocRef = new ChildAssociationRef(actualChildAssocRef.getTypeQName(), parentRef, vChildAssocQName, nodeProtocolChildRef.toNodeRef());
Set<QName> aspects = filingData.getAspects();
for (QName aspect : aspects) {
theTrait.addAspect(actualChildAssocRef.getChildRef(), aspect, filingDataProperties);
}
return childAssocRef;
} else {
throw new InvalidNodeRefException("Can not create node using parent ", parentRef);
}
} catch (VirtualizationException e) {
throw new InvalidNodeRefException("Could not create node in virtual context.", parentRef, e);
}
} else {
QName materialAssocQName = materializeAssocQName(assocQName);
if (isVirtualContextFolder(parentRef, environment)) {
parentRef = smartStore.materializeIfPossible(parentRef);
}
return theTrait.createNode(parentRef, assocTypeQName, materialAssocQName, nodeTypeQName, properties);
}
}
Aggregations