package fr.acxio.tools.agia.alfresco;
/*
* Copyright 2014 Acxio
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.webservice.repository.RepositoryServiceSoapBindingStub;
import org.alfresco.webservice.repository.UpdateResult;
import org.alfresco.webservice.types.CML;
import org.alfresco.webservice.types.CMLAddAspect;
import org.alfresco.webservice.types.CMLCreate;
import org.alfresco.webservice.types.CMLCreateAssociation;
import org.alfresco.webservice.types.CMLDelete;
import org.alfresco.webservice.types.CMLUpdate;
import org.alfresco.webservice.types.CMLWriteContent;
import org.alfresco.webservice.types.ContentFormat;
import org.alfresco.webservice.types.NamedValue;
import org.alfresco.webservice.types.Node;
import org.alfresco.webservice.types.ParentReference;
import org.alfresco.webservice.types.Predicate;
import org.alfresco.webservice.types.Query;
import org.alfresco.webservice.types.Reference;
import org.alfresco.webservice.types.Store;
import org.alfresco.webservice.util.Constants;
import org.alfresco.webservice.util.ContentUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import fr.acxio.tools.agia.alfresco.configuration.AlfrescoNamespaceContext;
import fr.acxio.tools.agia.alfresco.domain.Aspect;
import fr.acxio.tools.agia.alfresco.domain.Document;
import fr.acxio.tools.agia.alfresco.domain.Folder;
import fr.acxio.tools.agia.alfresco.domain.NodeList;
import fr.acxio.tools.agia.alfresco.domain.Property;
import fr.acxio.tools.agia.alfresco.domain.QName;
import fr.acxio.tools.agia.alfresco.domain.QueryAssociation;
import fr.acxio.tools.agia.alfresco.domain.RefAssociation;
@RunWith(JUnit4.class)
public class AlfrescoNodeWriterTest {
private AlfrescoNamespaceContext namespaceContext = new AlfrescoNamespaceContext();
private AlfrescoNodeWriter nodeWriter = new AlfrescoNodeWriter();
private NodePathResolver nodePathResolver = new DefaultNodePathResolver();
@Before
public void setUp() throws Exception {
RepositoryServiceSoapBindingStub aRepoService = mock(RepositoryServiceSoapBindingStub.class);
AlfrescoServiceImpl aAlfrescoService = mock(AlfrescoServiceImpl.class);
when(aAlfrescoService.getRepositoryService()).thenReturn(aRepoService);
when(aAlfrescoService.getEndpointAddress()).thenReturn("endpoint");
when(aAlfrescoService.getUsername()).thenReturn("username");
UpdateResult[] aUpdateResult = new UpdateResult[1];
aUpdateResult[0] = new UpdateResult();
aUpdateResult[0].setDestination(null);
when(aRepoService.update(any(CML.class))).thenReturn(aUpdateResult); // FIXME : add a CML matcher that helps to verify the send CML
Node[] aNode = new Node[1];
aNode[0] = new Node();
aNode[0].setReference(new Reference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, "00000000-0000-0000-0000-000000000001", null));
Reference reference = new Reference(AlfrescoServicesConsumer.STORE, null, "/app:company_home");
Predicate predicate = new Predicate(new Reference[]{reference}, null, null);
when(aRepoService.get(eq(predicate))).thenReturn(aNode);
Node[] aManyNodes = new Node[2];
aManyNodes[0] = new Node();
aManyNodes[0].setReference(new Reference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, "00000000-0000-0000-0000-000000000002", null));
aManyNodes[1] = new Node();
aManyNodes[1].setReference(new Reference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, "00000000-0000-0000-0000-000000000003", null));
Reference referenceMany = new Reference(AlfrescoServicesConsumer.STORE, null, "/cm:many");
Predicate predicateMany = new Predicate(new Reference[]{referenceMany}, null, null);
when(aRepoService.get(eq(predicateMany))).thenReturn(aManyNodes);
nodeWriter.setAlfrescoService(aAlfrescoService);
nodeWriter.setNodePathResolver(nodePathResolver);
nodeWriter.init();
}
@After
public void tearDown() throws Exception {
nodeWriter.cleanup();
}
@Test(expected=NullPointerException.class)
public void testWriteNull() throws Exception {
nodeWriter.write(null);
}
@Test
public void testWriteEmpty() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
nodeWriter.write(aData);
RepositoryServiceSoapBindingStub aRepoService = nodeWriter.getAlfrescoService().getRepositoryService();
verify(aRepoService, times(0)).update(any(CML.class));
verify(aRepoService, times(0)).query(any(Store.class), any(Query.class), anyBoolean());
verify(aRepoService, times(0)).get(any(Predicate.class));
}
@Test(expected=VersionOperationException.class)
public void testWriteTooManyNodesForOnePath() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "many"));
aRootFolder.setPathElement("cm:many");
aNodeList.add(aRootFolder);
aData.add(aNodeList);
nodeWriter.write(aData);
}
@Test
public void testWrite() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aDocument = new Document();
aDocument.setParent(aTestFolder);
aTestFolder.addDocument(aDocument);
aDocument.setType(new QName("cm:content", namespaceContext));
aDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer Content"));
aDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aDocument.setMimeType("application/pdf");
aDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_Content");
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aDocument);
aData.add(aNodeList);
nodeWriter.write(aData);
// Verify sent CML
RepositoryServiceSoapBindingStub aRepoService = nodeWriter.getAlfrescoService().getRepositoryService();
CML aCML = new CML();
ParentReference aRootfolderReference = new ParentReference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, null, "/app:company_home", Constants.ASSOC_CONTAINS, "{http://www.alfresco.org/model/content/1.0}Test Batch Writer");
NamedValue aFolderNameProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}name", false, "Test Batch Writer", null);
CMLCreate aFolderCreate = new CMLCreate("1", aRootfolderReference, null, null, null, "{http://www.alfresco.org/model/content/1.0}folder", new NamedValue[] {aFolderNameProperty});
ParentReference aFolderReference = new ParentReference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, null, "/app:company_home/cm:Test_x0020_Batch_x0020_Writer", Constants.ASSOC_CONTAINS, "{http://www.alfresco.org/model/content/1.0}Test Batch Writer Content");
NamedValue aDocumentNameProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}name", false, "Test Batch Writer Content", null);
NamedValue aDocumentTitleProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}title", false, "Text content", null);
CMLCreate aDocumentCreate = new CMLCreate("2", aFolderReference, null, null, null, "{http://www.alfresco.org/model/content/1.0}content", new NamedValue[] {aDocumentNameProperty, aDocumentTitleProperty});
CMLAddAspect aDocumentAspect = new CMLAddAspect("{http://www.alfresco.org/model/content/1.0}titled", null, null, "2");
FileInputStream aInputStream = new FileInputStream("src/test/resources/testFiles/content1.pdf");
CMLWriteContent aDocumentContent = new CMLWriteContent(Constants.PROP_CONTENT, ContentUtils.convertToByteArray(aInputStream), new ContentFormat("application/pdf", null), null, "2");
aCML.setAddAspect(new CMLAddAspect[] {aDocumentAspect});
aCML.setCreate(new CMLCreate[] {aFolderCreate, aDocumentCreate});
aCML.setWriteContent(new CMLWriteContent[] {aDocumentContent});
aCML.setCreateAssociation(new CMLCreateAssociation[] {});
aCML.setUpdate(new CMLUpdate[] {});
aCML.setDelete(new CMLDelete[] {});
verify(aRepoService, times(1)).update(eq(aCML));
verify(aRepoService, times(0)).query(any(Store.class), any(Query.class), anyBoolean());
verify(aRepoService, times(3)).get(any(Predicate.class));
}
@Test
public void testWriteRefAssoc() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aSourceDocument = new Document();
aSourceDocument.setParent(aTestFolder);
aTestFolder.addDocument(aSourceDocument);
aSourceDocument.setType(new QName("cm:content", namespaceContext));
aSourceDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer Source"));
aSourceDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aSourceDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aSourceDocument.addAspect(new Aspect(new QName("cm:referencing", namespaceContext)));
aSourceDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aSourceDocument.setMimeType("application/pdf");
aSourceDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_Source");
aSourceDocument.addAssociation(new RefAssociation(new QName("cm:references", namespaceContext), "2"));
Document aTargetDocument = new Document();
aTargetDocument.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument);
aTargetDocument.setAssocTargetId("2");
aTargetDocument.setType(new QName("cm:content", namespaceContext));
aTargetDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer Target"));
aTargetDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument.setMimeType("application/pdf");
aTargetDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_Target");
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aSourceDocument);
aNodeList.add(aTargetDocument);
aData.add(aNodeList);
nodeWriter.write(aData);
// Verify sent CML
RepositoryServiceSoapBindingStub aRepoService = nodeWriter.getAlfrescoService().getRepositoryService();
CML aCML = new CML();
ParentReference aRootfolderReference = new ParentReference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, null, "/app:company_home", Constants.ASSOC_CONTAINS, "{http://www.alfresco.org/model/content/1.0}Test Batch Writer");
NamedValue aFolderNameProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}name", false, "Test Batch Writer", null);
CMLCreate aFolderCreate = new CMLCreate("1", aRootfolderReference, null, null, null, "{http://www.alfresco.org/model/content/1.0}folder", new NamedValue[] {aFolderNameProperty});
ParentReference aFolderReference = new ParentReference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, null, "/app:company_home/cm:Test_x0020_Batch_x0020_Writer", Constants.ASSOC_CONTAINS, "{http://www.alfresco.org/model/content/1.0}Test Batch Writer Source");
NamedValue aDocumentNameProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}name", false, "Test Batch Writer Source", null);
NamedValue aDocumentTitleProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}title", false, "Text content", null);
CMLCreate aDocumentCreate = new CMLCreate("2", aFolderReference, null, null, null, "{http://www.alfresco.org/model/content/1.0}content", new NamedValue[] {aDocumentNameProperty, aDocumentTitleProperty});
CMLAddAspect aDocumentTitledAspect = new CMLAddAspect("{http://www.alfresco.org/model/content/1.0}titled", null, null, "2");
CMLAddAspect aDocumentReferencingAspect = new CMLAddAspect("{http://www.alfresco.org/model/content/1.0}referencing", null, null, "2");
FileInputStream aInputStream = new FileInputStream("src/test/resources/testFiles/content1.pdf");
CMLWriteContent aDocumentContent = new CMLWriteContent(Constants.PROP_CONTENT, ContentUtils.convertToByteArray(aInputStream), new ContentFormat("application/pdf", null), null, "2");
ParentReference aFolderReference2 = new ParentReference(fr.acxio.tools.agia.alfresco.AlfrescoServicesConsumer.STORE, null, "/app:company_home/cm:Test_x0020_Batch_x0020_Writer", Constants.ASSOC_CONTAINS, "{http://www.alfresco.org/model/content/1.0}Test Batch Writer Target");
NamedValue aDocument2NameProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}name", false, "Test Batch Writer Target", null);
NamedValue aDocument2TitleProperty = new NamedValue("{http://www.alfresco.org/model/content/1.0}title", false, "Text content", null);
CMLCreate aDocument2Create = new CMLCreate("3", aFolderReference2, null, null, null, "{http://www.alfresco.org/model/content/1.0}content", new NamedValue[] {aDocument2NameProperty, aDocument2TitleProperty});
CMLAddAspect aDocument2TitledAspect = new CMLAddAspect("{http://www.alfresco.org/model/content/1.0}titled", null, null, "3");
FileInputStream aInputStream2 = new FileInputStream("src/test/resources/testFiles/content1.pdf");
CMLWriteContent aDocument2Content = new CMLWriteContent(Constants.PROP_CONTENT, ContentUtils.convertToByteArray(aInputStream2), new ContentFormat("application/pdf", null), null, "3");
CMLCreateAssociation aCMLCreateAssociation = new CMLCreateAssociation(null, "2", null, "3", "{http://www.alfresco.org/model/content/1.0}references");
aCML.setAddAspect(new CMLAddAspect[] {aDocumentTitledAspect, aDocumentReferencingAspect, aDocument2TitledAspect});
aCML.setCreate(new CMLCreate[] {aFolderCreate, aDocumentCreate, aDocument2Create});
aCML.setWriteContent(new CMLWriteContent[] {aDocumentContent, aDocument2Content});
aCML.setCreateAssociation(new CMLCreateAssociation[] {aCMLCreateAssociation});
aCML.setUpdate(new CMLUpdate[] {});
aCML.setDelete(new CMLDelete[] {});
verify(aRepoService, times(1)).update(eq(aCML));
verify(aRepoService, times(0)).query(any(Store.class), any(Query.class), anyBoolean());
verify(aRepoService, times(4)).get(any(Predicate.class));
}
@Test
public void testWriteManyRefAssoc() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aSourceDocument = new Document();
aSourceDocument.setParent(aTestFolder);
aTestFolder.addDocument(aSourceDocument);
aSourceDocument.setType(new QName("cm:content", namespaceContext));
aSourceDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer SourceMR"));
aSourceDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aSourceDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aSourceDocument.addAspect(new Aspect(new QName("cm:referencing", namespaceContext)));
aSourceDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aSourceDocument.setMimeType("application/pdf");
aSourceDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_SourceMR");
aSourceDocument.addAssociation(new RefAssociation(new QName("cm:references", namespaceContext), "2"));
Document aTargetDocument1 = new Document();
aTargetDocument1.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument1);
aTargetDocument1.setAssocTargetId("2");
aTargetDocument1.setType(new QName("cm:content", namespaceContext));
aTargetDocument1.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer TargetM1"));
aTargetDocument1.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument1.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument1.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument1.setMimeType("application/pdf");
aTargetDocument1.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_TargetM1");
Document aTargetDocument2 = new Document();
aTargetDocument2.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument2);
aTargetDocument2.setAssocTargetId("2"); // Same target id must create same association
aTargetDocument2.setType(new QName("cm:content", namespaceContext));
aTargetDocument2.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer TargetM2"));
aTargetDocument2.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument2.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument2.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument2.setMimeType("application/pdf");
aTargetDocument2.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_TargetM2");
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aSourceDocument);
aNodeList.add(aTargetDocument1);
aNodeList.add(aTargetDocument2);
aData.add(aNodeList);
nodeWriter.write(aData);
}
@Test
public void testWriteRefAssocNoTarget() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aSourceDocument = new Document();
aSourceDocument.setParent(aTestFolder);
aTestFolder.addDocument(aSourceDocument);
aSourceDocument.setType(new QName("cm:content", namespaceContext));
aSourceDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer SourceRN"));
aSourceDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aSourceDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aSourceDocument.addAspect(new Aspect(new QName("cm:referencing", namespaceContext)));
aSourceDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aSourceDocument.setMimeType("application/pdf");
aSourceDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_SourceRN");
aSourceDocument.addAssociation(new RefAssociation(new QName("cm:references", namespaceContext), "2"));
Document aTargetDocument = new Document();
aTargetDocument.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument);
aTargetDocument.setAssocTargetId("3");
aTargetDocument.setType(new QName("cm:content", namespaceContext));
aTargetDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer TargetN"));
aTargetDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument.setMimeType("application/pdf");
aTargetDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_TargetN");
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aSourceDocument);
aNodeList.add(aTargetDocument);
aData.add(aNodeList);
nodeWriter.write(aData);
}
@Test
public void testWriteQueryAssoc() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aTargetDocument = new Document();
aTargetDocument.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument);
aTargetDocument.setType(new QName("cm:content", namespaceContext));
aTargetDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer TargetQ"));
aTargetDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument.setMimeType("application/pdf");
aTargetDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_TargetQ");
Document aTargetDocument2 = new Document();
aTargetDocument2.setParent(aTestFolder);
aTestFolder.addDocument(aTargetDocument2);
aTargetDocument2.setType(new QName("cm:content", namespaceContext));
aTargetDocument2.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer TargetQ2"));
aTargetDocument2.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aTargetDocument2.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aTargetDocument2.setContentPath("src/test/resources/testFiles/content1.pdf");
aTargetDocument2.setMimeType("application/pdf");
aTargetDocument2.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_TargetQ2");
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aTargetDocument);
aNodeList.add(aTargetDocument2);
aData.add(aNodeList);
nodeWriter.write(aData);
aNodeList.clear();
aData.clear();
Document aSourceDocument = new Document();
aSourceDocument.setParent(aTestFolder);
aTestFolder.addDocument(aSourceDocument);
aSourceDocument.setType(new QName("cm:content", namespaceContext));
aSourceDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer SourceQ"));
aSourceDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aSourceDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aSourceDocument.addAspect(new Aspect(new QName("cm:referencing", namespaceContext)));
aSourceDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aSourceDocument.setMimeType("application/pdf");
aSourceDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_SourceQ");
aSourceDocument.addAssociation(new QueryAssociation(new QName("cm:references", namespaceContext), "lucene", "PATH:\"/app:company_home/cm:Test_x0020_Batch_x0020_Writer/*\" AND @cm\\:name:\"Test Batch Writer TargetQ*\""));
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aSourceDocument);
aData.add(aNodeList);
nodeWriter.write(aData);
}
@Test
public void testWriteQueryAssocNoTarget() throws Exception {
List<NodeList> aData = new ArrayList<NodeList>();
NodeList aNodeList = new NodeList();
Folder aRootFolder = new Folder();
aRootFolder.setParent(null);
aRootFolder.setType(new QName("cm:folder", namespaceContext));
aRootFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "company_home"));
aRootFolder.setPathElement("app:company_home");
Folder aTestFolder = new Folder();
aTestFolder.setParent(aRootFolder);
aRootFolder.addFolder(aTestFolder);
aTestFolder.setType(new QName("cm:folder", namespaceContext));
aTestFolder.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer"));
aTestFolder.setPathElement("cm:Test_x0020_Batch_x0020_Writer");
Document aSourceDocument = new Document();
aSourceDocument.setParent(aTestFolder);
aTestFolder.addDocument(aSourceDocument);
aSourceDocument.setType(new QName("cm:content", namespaceContext));
aSourceDocument.addProperty(new Property(new QName("cm:name", namespaceContext), "Test Batch Writer SourceQN"));
aSourceDocument.addProperty(new Property(new QName("cm:title", namespaceContext), "Text content"));
aSourceDocument.addAspect(new Aspect(new QName("cm:titled", namespaceContext)));
aSourceDocument.addAspect(new Aspect(new QName("cm:referencing", namespaceContext)));
aSourceDocument.setContentPath("src/test/resources/testFiles/content1.pdf");
aSourceDocument.setMimeType("application/pdf");
aSourceDocument.setPathElement("cm:Test_x0020_Batch_x0020_Writer_x0020_SourceQN");
aSourceDocument.addAssociation(new QueryAssociation(new QName("cm:references", namespaceContext), "lucene", "PATH:\"/app:company_home/cm:Test_x0020_Batch_x0020_Writer/*\" AND @cm\\:name:\"UNKNOWN*\""));
aNodeList.add(aRootFolder);
aNodeList.add(aTestFolder);
aNodeList.add(aSourceDocument);
aData.add(aNodeList);
nodeWriter.write(aData);
}
}