Package org.jbpm.designer.server

Source Code of org.jbpm.designer.server.StencilSetExtensionGeneratorServlet

package org.jbpm.designer.server;

/**
* Copyright (c) 2008
* SAP Research
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*
* Portions of the code in this file have been developed by
* Stefan Krumnow and Falko Menge at SAP Research Brisbane and
* contributed to the Oryx project in October 2008 under the
* terms of the MIT License.
*
* @author Stefan Krumnow
* @author Falko Menge
**/

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

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

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;

public class StencilSetExtensionGeneratorServlet extends HttpServlet {
 
  private static final long serialVersionUID = 1L;

  protected HttpServletRequest request;
  protected HttpServletResponse response;
  protected String baseUrl;
  protected Repository repository;
 
  /**
   * Request parameters are documented in
   * editor/test/examples/stencilset-extension-generator.xhtml
   * The parameter 'csvFile' is always required.
   * An example CSV file can be found in
   * editor/test/examples/design-thinking-example-data.csv
   * which has been exported using OpenOffice.org from
   * editor/test/examples/design-thinking-example-data.ods
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    this.request = request;
    this.response = response;
    this.baseUrl = Repository.getBaseUrl(request);
    this.repository = new Repository(baseUrl);
   
    // parameters and their default values
    String modelNamePrefix                         = "Generated Model using ";
    String stencilSetExtensionNamePrefix           = StencilSetExtensionGenerator.DEFAULT_STENCIL_SET_EXTENSION_NAME_PREFIX;
    String baseStencilSetPath                      = StencilSetExtensionGenerator.DEFAULT_BASE_STENCIL_SET_PATH;
    String baseStencilSet                          = StencilSetExtensionGenerator.DEFAULT_BASE_STENCIL_SET;
    String baseStencil                             = StencilSetExtensionGenerator.DEFAULT_BASE_STENCIL;
    List<String> stencilSetExtensionUrls           = new ArrayList<String>();
    String[] columnPropertyMapping                 = null;
    String[] csvHeader                             = null;
    List<Map<String,String>> stencilPropertyMatrix = new ArrayList<Map<String,String>>();
    String modelDescription                        = "The initial version of this model has been created by the Stencilset Extension Generator.";
    String additionalERDFContentForGeneratedModel  = "";
    String[] modelTags                             = null;
   
    // Check that we have a file upload request
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
   
    if (isMultipart) {
   
      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload();
 
      // Parse the request
      FileItemIterator iterator;
      try {
        iterator = upload.getItemIterator(request);
        while (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            String name = item.getFieldName();
            InputStream stream = item.openStream();
            if (item.isFormField()) {
              // ordinary form field
              String value = Streams.asString(stream);
                //System.out.println("Form field " + name + " with value "
                //    + value + " detected.");
                if (name.equals("modelNamePrefix")) {
                  modelNamePrefix = value;
                } else if (name.equals("stencilSetExtensionNamePrefix")) {
                  stencilSetExtensionNamePrefix = value;
                } else if (name.equals("baseStencilSetPath")) {
                  baseStencilSetPath = value;
                } else if (name.equals("baseStencilSet")) {
                  baseStencilSet = value;
                } else if (name.equals("stencilSetExtension")) {
                  stencilSetExtensionUrls.add(value);
                } else if (name.equals("baseStencil")) {
                  baseStencil = value;
                } else if (name.equals("columnPropertyMapping")) {
                  columnPropertyMapping = value.split(",");
                } else if (name.equals("modelDescription")) {
                  modelDescription = value;
                } else if (name.equals("modelTags")) {
                  modelTags = value.split(",");
                } else if (name.equals("additionalERDFContentForGeneratedModel")) {
                  additionalERDFContentForGeneratedModel = value;
                }
            }
        }
 
       
        // generate stencil set
        Date creationDate = new Date(System.currentTimeMillis());
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss.SSS");
        String stencilSetExtensionName = stencilSetExtensionNamePrefix + " " + dateFormat.format(creationDate);

        stencilSetExtensionUrls.add(
            StencilSetExtensionGenerator.generateStencilSetExtension(
                stencilSetExtensionName,
                stencilPropertyMatrix,
                columnPropertyMapping,
                baseStencilSet,
                baseStencil
            )
        );
       
        // generate new model
        String modelName = modelNamePrefix + stencilSetExtensionName;
        String model = repository.generateERDF(
            UUID.randomUUID().toString(),
            additionalERDFContentForGeneratedModel,
            baseStencilSetPath,
            baseStencilSet,
            stencilSetExtensionUrls,
            modelName,
            modelDescription
        );
        String modelUrl = baseUrl + repository.saveNewModel(
            model,
            modelName,
            modelDescription,
            baseStencilSet,
            baseStencilSetPath
        );

        // hack for reverse proxies:
        modelUrl = modelUrl.substring(modelUrl.lastIndexOf("http://"));

        // tag model
        if (modelTags != null) {
          for (String tagName : modelTags) {
            repository.addTag(modelUrl, tagName.trim());
          }
        }
       
        // redirect client to editor with that newly generated model
        response.setHeader("Location", modelUrl);
        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
       
      } catch (FileUploadException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    } else {
      // TODO Add some error message
    }
  }


  protected void println(String output) {
    try {
      response.getWriter().println(output);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }   
  }
 
}
TOP

Related Classes of org.jbpm.designer.server.StencilSetExtensionGeneratorServlet

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.