com.manning.cmis.theblend.servlets.AddVersionServlet.java Source code

Java tutorial

Introduction

Here is the source code for com.manning.cmis.theblend.servlets.AddVersionServlet.java

Source

/**
 * Copyright 2012 Manning Publications Co.
 *
 * 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.
 */
package com.manning.cmis.theblend.servlets;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.chemistry.opencmis.client.api.Document;
import org.apache.chemistry.opencmis.client.api.ObjectId;
import org.apache.chemistry.opencmis.client.api.Session;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.manning.cmis.theblend.util.CMISHelper;
import com.manning.cmis.theblend.util.HTMLHelper;

public class AddVersionServlet extends AbstractAddServlet {
    private static final long serialVersionUID = 1L;

    private static final String PARAM_DOC_ID = "id";
    private static final String PARAM_MAJOR = "major";

    public static final String ATTR_OBJECT = "object";

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response, Session session)
            throws ServletException, IOException, TheBlendException {

        String id = getStringParameter(request, PARAM_DOC_ID);

        // fetch the document object
        Document doc = CMISHelper.getDocumet(session, id, CMISHelper.LIGHT_OPERATION_CONTEXT, "document");

        request.setAttribute(ATTR_OBJECT, doc);

        // show add version page
        dispatch("addversion.jsp", "Add new version. The Blend.", request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response, Session session)
            throws ServletException, IOException, TheBlendException {

        // check for multipart content
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            // show add version page
            dispatch("addversion.jsp", "Add new version. The Blend.", request, response);
        }

        Map<String, Object> properties = new HashMap<String, Object>();
        File uploadedFile = null;
        String docId = null;
        boolean major = true;
        ObjectId newId = null;

        // process the request
        try {
            DiskFileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setSizeMax(50 * 1024 * 1024);

            @SuppressWarnings("unchecked")
            List<FileItem> items = upload.parseRequest(request);

            Iterator<FileItem> iter = items.iterator();
            while (iter.hasNext()) {
                FileItem item = iter.next();

                if (item.isFormField()) {
                    String name = item.getFieldName();

                    if (PARAM_DOC_ID.equalsIgnoreCase(name)) {
                        docId = item.getString();
                    } else if (PARAM_MAJOR.equalsIgnoreCase(name)) {
                        major = Boolean.parseBoolean(item.getString());
                    }
                } else {
                    properties.put(PropertyIds.NAME, item.getName());

                    uploadedFile = File.createTempFile("blend", "tmp");
                    item.write(uploadedFile);
                }
            }
        } catch (Exception e) {
            throw new TheBlendException("Upload failed: " + e, e);
        }

        if (uploadedFile == null) {
            throw new TheBlendException("No content!", null);
        }

        try {
            // find the document
            Document doc = CMISHelper.getDocumet(session, docId, CMISHelper.LIGHT_OPERATION_CONTEXT, "document");

            // check out document and get Private Working Copy
            Document pwc = null;
            try {
                // check out
                ObjectId pwcId = doc.checkOut();

                // the PWC must be a document object
                pwc = (Document) session.getObject(pwcId, CMISHelper.LIGHT_OPERATION_CONTEXT);
            } catch (CmisBaseException cbe) {
                throw new TheBlendException("Checkout failed!", cbe);
            }

            // prepare the content stream
            ContentStream contentStream = null;
            try {
                contentStream = prepareContentStream(session, uploadedFile, doc.getType().getId(), properties);
            } catch (Exception e) {
                throw new TheBlendException("Upload failed: " + e, e);
            }

            // create new version
            try {
                newId = pwc.checkIn(major, properties, contentStream, null);
            } catch (CmisBaseException cbe) {
                throw new TheBlendException("Could not create new version: " + cbe.getMessage(), cbe);
            } finally {
                try {
                    contentStream.getStream().close();
                } catch (IOException ioe) {
                    // ignore
                }
            }
        } finally {
            // delete temp file
            uploadedFile.delete();
        }

        // show the newly created document
        redirect(HTMLHelper.encodeUrlWithId(request, "show", newId.getId()), request, response);
    }
}