Package org.apache.chemistry.opencmis.fit.runtime

Source Code of org.apache.chemistry.opencmis.fit.runtime.AbstractTransientObjectIT

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.
*/
package org.apache.chemistry.opencmis.fit.runtime;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.fail;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.OperationContext;
import org.apache.chemistry.opencmis.client.api.TransientDocument;
import org.apache.chemistry.opencmis.client.api.TransientFolder;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
import org.junit.Test;

public abstract class AbstractTransientObjectIT extends AbstractSessionTest {

    @Test
    public void transientUpdate() throws Exception {
        ObjectId parentId = session
                .createObjectId(this.fixture.getTestRootId());
        String filename1 = UUID.randomUUID().toString();
        String typeId = FixtureData.DOCUMENT_TYPE_ID.value();

        Map<String, Object> properties = new HashMap<String, Object>();
        properties.put(PropertyIds.NAME, filename1);
        properties.put(PropertyIds.OBJECT_TYPE_ID, typeId);

        String mimetype = "text/html; charset=UTF-8";
        String content1 = "Im Walde rauscht ein Wasserfall. Wenn's nicht mehr rauscht ist's Wasser all.";

        byte[] buf1 = content1.getBytes("UTF-8");
        ByteArrayInputStream in1 = new ByteArrayInputStream(buf1);
        ContentStream contentStream1 = session.getObjectFactory()
                .createContentStream(filename1, buf1.length, mimetype, in1);
        assertNotNull(contentStream1);

        ObjectId id = session.createDocument(properties, parentId,
                contentStream1, VersioningState.NONE);
        assertNotNull(id);

        // prepare new non-cache operation context
        OperationContext oc = session.createOperationContext();
        oc.setFilterString("*");
        oc.setCacheEnabled(false);

        // set new name and save
        Document doc2 = (Document) session.getObject(id, oc);
        TransientDocument tdoc2 = doc2.getTransientDocument();

        assertEquals(filename1, tdoc2.getName());

        ContentStream cs2 = tdoc2.getContentStream();
        assertNotNull(cs2);
        assertContent(buf1, readContent(cs2));

        String filename2 = UUID.randomUUID().toString();
        tdoc2.setName(filename2);
        assertEquals(filename2, tdoc2.getName());

        ObjectId id2 = tdoc2.save();
        assertNotNull(id2);

        // set new content and save
        Document doc3 = (Document) session.getObject(id2, oc);
        TransientDocument tdoc3 = doc3.getTransientDocument();

        assertEquals(filename2, tdoc3.getName());

        ContentStream cs3 = tdoc3.getContentStream();
        assertNotNull(cs3);
        assertContent(buf1, readContent(cs3));

        String content3 = "Es rauscht noch.";

        byte[] buf3 = content3.getBytes("UTF-8");
        ByteArrayInputStream in3 = new ByteArrayInputStream(buf3);
        ContentStream contentStream3 = session.getObjectFactory()
                .createContentStream(tdoc3.getName(), buf3.length, mimetype,
                        in3);
        assertNotNull(contentStream3);

        tdoc3.setContentStream(contentStream3, true);

        ObjectId id3 = tdoc3.save();
        assertNotNull(id3);

        // set new name, delete content and save
        Document doc4 = (Document) session.getObject(id3, oc);
        TransientDocument tdoc4 = doc4.getTransientDocument();

        assertEquals(tdoc3.getName(), tdoc4.getName());

        ContentStream cs4 = tdoc4.getContentStream();
        assertNotNull(cs4);
        assertContent(buf3, readContent(cs4));

        String filename4 = UUID.randomUUID().toString();
        tdoc4.setName(filename4);
        assertEquals(filename4, tdoc4.getName());

        tdoc4.deleteContentStream();

        ObjectId id4 = tdoc4.save();
        assertNotNull(id4);

        // delete object
        Document doc5 = (Document) session.getObject(id4, oc);
        TransientDocument tdoc5 = doc5.getTransientDocument();

        assertEquals(filename4, tdoc5.getName());

        ContentStream cs5 = tdoc4.getContentStream();
        assertNull(cs5);

        assertEquals(false, tdoc5.isMarkedForDelete());

        tdoc5.delete(true);

        assertEquals(true, tdoc5.isMarkedForDelete());

        ObjectId id5 = tdoc5.save();
        assertNull(id5);

        // check
        try {
            this.session.getObject(id4, oc);
            fail("CmisObjectNotFoundException expected!");
        } catch (CmisObjectNotFoundException e) {
            // expected
        }
    }

    @Test
    public void transientFolderSessionCheck() {
        String path = "/" + Fixture.TEST_ROOT_FOLDER_NAME + "/"
                + FixtureData.FOLDER1_NAME;
        Folder folder1 = (Folder) session.getObjectByPath(path);
        assertNotNull("folder not found: " + path, folder1);

        TransientFolder tfolder = folder1.getTransientFolder();
        assertNotNull(tfolder);

        String newFolderName = UUID.randomUUID().toString();
        tfolder.setPropertyValue(PropertyIds.NAME, newFolderName);

        Folder folder2 = (Folder) session2.getObjectByPath(path);
        assertNotNull(folder2);
        assertEquals(folder2.getProperty(PropertyIds.NAME).getValueAsString(),
                FixtureData.FOLDER1_NAME.toString());
        assertEquals(tfolder.getProperty(PropertyIds.NAME).getValueAsString(),
                newFolderName);

        tfolder.save();
        session2.clear();

        ObjectId id = session2.createObjectId(tfolder.getId());

        Folder folder3 = (Folder) session2.getObject(id);
        assertNotNull(folder3);
        assertEquals(folder3.getProperty(PropertyIds.NAME).getValueAsString(),
                newFolderName);
    }

    @Test
    public void transientDocumentSessionCheck() {
        String path = "/" + Fixture.TEST_ROOT_FOLDER_NAME + "/"
                + FixtureData.DOCUMENT1_NAME;
        Document document1 = (Document) session.getObjectByPath(path);
        assertNotNull("document not found: " + path, document1);

        TransientDocument tdoc = document1.getTransientDocument();
        assertNotNull(tdoc);

        String newDocName = UUID.randomUUID().toString();
        tdoc.setPropertyValue(PropertyIds.NAME, newDocName);

        Document doc2 = (Document) session2.getObjectByPath(path);
        assertNotNull(doc2);
        assertEquals(doc2.getProperty(PropertyIds.NAME).getValueAsString(),
                FixtureData.DOCUMENT1_NAME.toString());
        assertEquals(tdoc.getProperty(PropertyIds.NAME).getValueAsString(),
                newDocName);

        tdoc.save();
        session2.clear();

        ObjectId id = session2.createObjectId(tdoc.getId());

        Document doc3 = (Document) session2.getObject(id);
        assertNotNull(doc3);
        assertEquals(doc3.getProperty(PropertyIds.NAME).getValueAsString(),
                newDocName);
    }

    private static byte[] readContent(ContentStream contentStream)
            throws Exception {
        assertNotNull(contentStream);
        assertNotNull(contentStream.getStream());

        InputStream stream = contentStream.getStream();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[4096];
        int b;
        while ((b = stream.read(buffer)) > -1) {
            baos.write(buffer, 0, b);
        }

        return baos.toByteArray();
    }

    private static void assertContent(byte[] expected, byte[] actual) {
        assertNotNull(expected);
        assertNotNull(actual);

        assertEquals("Content size:", expected.length, actual.length);

        for (int i = 0; i < expected.length; i++) {
            assertEquals("Content not equal.", expected[i], actual[i]);
        }
    }
}
TOP

Related Classes of org.apache.chemistry.opencmis.fit.runtime.AbstractTransientObjectIT

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.