/*
* (C) Copyright 2012-2016 Nuxeo SA (http://nuxeo.com/) and others.
*
* 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.
*
* Contributors:
* Nuxeo
*/
package org.nuxeo.ecm.core.io.impl;
import java.io.File;
import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.ecm.core.api.PathRef;
import org.nuxeo.ecm.core.api.security.ACE;
import org.nuxeo.ecm.core.api.security.ACL;
import org.nuxeo.ecm.core.api.security.ACP;
import org.nuxeo.ecm.core.io.DocumentPipe;
import org.nuxeo.ecm.core.io.DocumentReader;
import org.nuxeo.ecm.core.io.DocumentWriter;
import org.nuxeo.ecm.core.io.impl.plugins.DocumentModelWriter;
import org.nuxeo.ecm.core.io.impl.plugins.NuxeoArchiveReader;
import org.nuxeo.ecm.core.io.impl.plugins.NuxeoArchiveWriter;
import org.nuxeo.ecm.core.io.impl.plugins.SingleDocumentReader;
import org.nuxeo.ecm.core.test.CoreFeature;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.runner.Deploy;
import org.nuxeo.runtime.test.runner.Features;
import org.nuxeo.runtime.test.runner.FeaturesRunner;
import org.nuxeo.runtime.test.runner.LocalDeploy;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
/**
* @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a>
* @since 5.9.1
*/
@RunWith(FeaturesRunner.class)
@Features(CoreFeature.class)
@RepositoryConfig(init = ComplexDocRepositoryInit.class)
@Deploy("org.nuxeo.ecm.core.io")
@LocalDeploy("org.nuxeo.ecm.core.io:OSGI-INF/doc-type-contrib.xml")
public class TestImportExportWithComplexXSD {
@Inject
protected CoreSession session;
@Test
public void checkComplexTypeExportImport() throws Exception {
DocumentModel doc = session.getDocument(new PathRef("/testDoc"));
assertNotNull(doc);
verifyProperties(doc);
File out = Framework.createTempFile("model-io", ".zip");
DocumentReader reader = new SingleDocumentReader(session, doc);
DocumentWriter writer = new NuxeoArchiveWriter(out);
try {
// creating a pipe
DocumentPipe pipe = new DocumentPipeImpl(10);
pipe.setReader(reader);
pipe.setWriter(writer);
pipe.run();
} finally {
writer.close();
reader.close();
}
Assert.assertTrue(out.length() > 0);
DocumentModel newParent = session.createDocumentModel("/", "importRoot", "Folder");
newParent.setPropertyValue("dc:title", "Import Root");
newParent = session.createDocument(newParent);
session.save();
reader = new NuxeoArchiveReader(out);
writer = new DocumentModelWriter(session, newParent.getPathAsString());
try {
// creating a pipe
DocumentPipe pipe = new DocumentPipeImpl(10);
pipe.setReader(reader);
pipe.setWriter(writer);
pipe.run();
} finally {
writer.close();
reader.close();
out.delete();
}
DocumentModelList children = session.getChildren(newParent.getRef());
Assert.assertEquals(1, children.totalSize());
verifyProperties(children.get(0));
}
protected void verifyProperties(DocumentModel doc) throws Exception {
Assert.assertEquals("Insurance", doc.getPropertyValue("cs:modelType"));
Assert.assertEquals("V1", doc.getPropertyValue("cs:currentVersion"));
Assert.assertEquals("Internal", doc.getPropertyValue("cs:origin"));
Map<String, Serializable> segment = (Map<String, Serializable>) doc.getPropertyValue("cs:segmentVariable");
Assert.assertEquals("MySegment", segment.get("name"));
Assert.assertEquals("SomeTarget", segment.get("target"));
Assert.assertEquals("rawVariable", segment.get("variableType"));
Assert.assertNull(segment.get("dataType"));
List<String> roles = (List<String>) segment.get("roles");
Assert.assertEquals(3, roles.size());
Assert.assertTrue(roles.contains("Score"));
Assert.assertTrue(roles.contains("ComparisonScore"));
Assert.assertTrue(roles.contains("Decision"));
ACP acp = doc.getACP();
assertNotNull(acp);
ACL acl = acp.getACL(ACL.LOCAL_ACL);
assertEquals(2, acl.size());
ACE ace = acl.get(0);
assertEquals("leela", ace.getUsername());
assertEquals("Read", ace.getPermission());
assertNull(ace.getCreator());
assertNull(ace.getBegin());
assertNull(ace.getEnd());
ace = acl.get(1);
assertEquals("fry", ace.getUsername());
assertEquals("Write", ace.getPermission());
assertEquals("leela", ace.getCreator());
Calendar begin = ace.getBegin();
assertNotNull(begin);
Calendar expectedBegin = new GregorianCalendar(2000, 10, 10);
assertEquals(expectedBegin, begin);
Calendar end = ace.getEnd();
assertNotNull(end);
Calendar expectedEnd = new GregorianCalendar(2010, 10, 10);
assertEquals(expectedEnd, end);
}
}