use of org.alfresco.repo.virtual.template.FilingData 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);
}
}
use of org.alfresco.repo.virtual.template.FilingData in project alfresco-repository by Alfresco.
the class VirtualStoreImpl method createFilingData.
@Override
public FilingData createFilingData(Reference parentReference, QName assocTypeQName, QName assocQName, QName nodeTypeQName, Map<QName, Serializable> properties) throws VirtualizationException {
VirtualFolderDefinition structure = resolveVirtualFolderDefinition(parentReference);
FilingRule filingRule = structure.getFilingRule();
if (filingRule == null) {
filingRule = new NullFilingRule(environment);
}
FilingParameters filingParameters = new FilingParameters(parentReference, assocTypeQName, assocQName, nodeTypeQName, properties);
FilingData filingData = filingRule.createFilingData(filingParameters);
return filingData;
}
Aggregations