org.nuxeo.ecm.platform.filemanager.TestExportedZipImporterPlugin.java Source code

Java tutorial

Introduction

Here is the source code for org.nuxeo.ecm.platform.filemanager.TestExportedZipImporterPlugin.java

Source

/*
 * (C) Copyright 2006 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 - initial API and implementation
 *
 *
 *
 */

package org.nuxeo.ecm.platform.filemanager;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;

import java.io.File;
import java.util.zip.ZipFile;

import javax.inject.Inject;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.nuxeo.ecm.core.api.Blob;
import org.nuxeo.ecm.core.api.Blobs;
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.io.DocumentPipe;
import org.nuxeo.ecm.core.io.DocumentReader;
import org.nuxeo.ecm.core.io.DocumentWriter;
import org.nuxeo.ecm.core.io.impl.DocumentPipeImpl;
import org.nuxeo.ecm.core.io.impl.plugins.DocumentTreeReader;
import org.nuxeo.ecm.core.io.impl.plugins.NuxeoArchiveWriter;
import org.nuxeo.ecm.core.test.CoreFeature;
import org.nuxeo.ecm.core.test.annotations.Granularity;
import org.nuxeo.ecm.core.test.annotations.RepositoryConfig;
import org.nuxeo.ecm.platform.filemanager.api.FileManager;
import org.nuxeo.ecm.platform.filemanager.service.extension.ExportedZipImporter;
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;

/**
 * Check IO archive import via Unit Tests.
 *
 * @author tiry
 */
@RunWith(FeaturesRunner.class)
@Features(CoreFeature.class)
@RepositoryConfig(init = RepositoryInit.class, cleanup = Granularity.METHOD)
@Deploy({ "org.nuxeo.ecm.platform.types.api", "org.nuxeo.ecm.platform.types.core",
        "org.nuxeo.ecm.platform.filemanager.core" })
public class TestExportedZipImporterPlugin {

    protected DocumentModel sourceWS;

    protected DocumentModel destWS;

    protected DocumentModel wsRoot;

    @Inject
    protected CoreSession coreSession;

    private File archiveFile;

    public void createTestDocumentsAndArchive() throws Exception {
        wsRoot = coreSession.getDocument(new PathRef("/default-domain/workspaces"));

        DocumentModel ws = coreSession.createDocumentModel(wsRoot.getPathAsString(), "sourceWS", "Workspace");
        ws.setProperty("dublincore", "title", "Source Workspace");
        ws = coreSession.createDocument(ws);

        DocumentModel ws2 = coreSession.createDocumentModel(wsRoot.getPathAsString(), "destWS", "Workspace");
        ws2.setProperty("dublincore", "title", "Destination Workspace");
        ws2 = coreSession.createDocument(ws2);

        DocumentModel file = coreSession.createDocumentModel(ws.getPathAsString(), "myfile", "File");
        file.setProperty("dublincore", "title", "MyFile");
        file.setProperty("dublincore", "coverage", "MyFileCoverage");
        file = coreSession.createDocument(file);

        DocumentModel folder = coreSession.createDocumentModel(ws.getPathAsString(), "myfolder", "Folder");
        folder.setProperty("dublincore", "title", "MyFolder");
        folder = coreSession.createDocument(folder);

        DocumentModel subfile = coreSession.createDocumentModel(folder.getPathAsString(), "mysubfile", "File");
        subfile.setProperty("dublincore", "title", "MySubFile");
        subfile = coreSession.createDocument(subfile);

        DocumentReader reader = new DocumentTreeReader(coreSession, ws, false);

        archiveFile = File.createTempFile("TestExportedZipImporterPlugin_", ",zip");
        archiveFile.delete();
        DocumentWriter writer = new NuxeoArchiveWriter(archiveFile);

        DocumentPipe pipe = new DocumentPipeImpl(10);
        pipe.setReader(reader);
        pipe.setWriter(writer);
        pipe.run();

        writer.close();
        reader.close();

        sourceWS = ws;
        destWS = ws2;
    }

    @After
    public void cleanupTempFolder() {
        FileUtils.deleteQuietly(archiveFile);
    }

    @Test
    public void testArchiveDetection() throws Exception {
        createTestDocumentsAndArchive();
        ZipFile archive = ExportedZipImporter.getArchiveFileIfValid(archiveFile);
        assertNotNull(archive);
        archive.close();
    }

    @Test
    public void testImportViaFileManager() throws Exception {
        createTestDocumentsAndArchive();
        FileManager fm = Framework.getService(FileManager.class);
        Blob blob = Blobs.createBlob(archiveFile);
        fm.createDocumentFromBlob(coreSession, blob, destWS.getPathAsString(), true, "toto.zip");
        DocumentModelList children = coreSession.getChildren(destWS.getRef());
        assertTrue(children.size() > 0);
        DocumentModel importedWS = children.get(0);
        assertEquals(importedWS.getTitle(), sourceWS.getTitle());
        DocumentModelList subChildren = coreSession.getChildren(importedWS.getRef());
        assertSame(2, subChildren.size());

        DocumentModel subFolder = coreSession.getChild(importedWS.getRef(), "myfolder");
        assertNotNull(subFolder);

        DocumentModel subFile = coreSession.getChild(importedWS.getRef(), "myfile");
        assertNotNull(subFile);

        DocumentModelList subSubChildren = coreSession.getChildren(subFolder.getRef());
        assertSame(1, subSubChildren.size());
    }

    @Test
    public void testOverrideImportViaFileManager() throws Exception {
        createTestDocumentsAndArchive();
        // first update the source DM of the exported source
        sourceWS.setProperty("dublincore", "title", "I have been changed");
        sourceWS = coreSession.saveDocument(sourceWS);

        // remove one children
        DocumentModel subFile = coreSession.getChild(sourceWS.getRef(), "myfile");
        coreSession.removeDocument(subFile.getRef());
        coreSession.save();

        FileManager fm = Framework.getService(FileManager.class);
        Blob blob = Blobs.createBlob(archiveFile);
        fm.createDocumentFromBlob(coreSession, blob, wsRoot.getPathAsString(), true, "toto.zip");
        sourceWS = coreSession.getChild(wsRoot.getRef(), "sourceWS");
        assertNotNull(sourceWS);
        assertEquals("Source Workspace", sourceWS.getTitle());

        subFile = coreSession.getChild(sourceWS.getRef(), "myfile");
        assertNotNull(subFile);
    }

}