Package org.jbpm.pvm.internal.ant

Source Code of org.jbpm.pvm.internal.ant.JbpmDeployTask

/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jbpm.pvm.internal.ant;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipInputStream;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.taskdefs.MatchingTask;
import org.apache.tools.ant.types.FileSet;
import org.jbpm.api.NewDeployment;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;

/**
* ant task for deploying process files and business archives.
*/
public class JbpmDeployTask extends MatchingTask {

  String jbpmCfg = null;
  File file = null;
  List fileSets = new ArrayList();
  boolean failOnError = true;

  public void execute() throws BuildException {
    Thread currentThread = Thread.currentThread();
    ClassLoader originalClassLoader = currentThread.getContextClassLoader();
    currentThread.setContextClassLoader(JbpmDeployTask.class.getClassLoader());
    try {
      // get the JbpmConfiguration
      ProcessEngine processEngine = AntHelper.getProcessEngine(jbpmCfg);
     
      // if attribute process is set, deploy that process file
      if (file!=null) {
        deployFile(processEngine, file);
      }
     
      // loop over all files that are specified in the filesets
      Iterator iter = fileSets.iterator();
      while (iter.hasNext()) {
        FileSet fileSet = (FileSet) iter.next();
        DirectoryScanner dirScanner = fileSet.getDirectoryScanner(getProject());
        File baseDir = dirScanner.getBasedir();
        String[] includedFiles = dirScanner.getIncludedFiles();
        List excludedFiles = Arrays.asList(dirScanner.getExcludedFiles());

        for (int i = 0; i < includedFiles.length; i++) {
          String fileName = includedFiles[i];
          if (!excludedFiles.contains(fileName)) {
            File file = new File(baseDir, fileName);
            deployFile(processEngine, file);
          }
        }
      }
     
    } finally {
      currentThread.setContextClassLoader(originalClassLoader);
    }
  }

  protected void deployFile(ProcessEngine processEngine, File processFile) {
    RepositoryService repositoryService = processEngine.getRepositoryService();
    NewDeployment deployment = repositoryService.createDeployment();
    deployment.setName(processFile.getName());
    deployment.setTimestamp(System.currentTimeMillis());
   
    if (processFile.getName().endsWith(".xml")) {
      log("deploying process file "+processFile.getName());
      deployment.addResourceFromFile(processFile);
     
    } else if (processFile.getName().endsWith("ar")) {
      log("deploying business archive "+processFile.getName());
      try {
        FileInputStream fileInputStream = new FileInputStream(processFile);
        ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);
        deployment.addResourcesFromZipInputStream(zipInputStream);
      } catch (Exception e) {
        throw new BuildException("couldn't read business archive "+processFile, e);
      }

    } else {
      throw new BuildException("unsupported extension: "+processFile+"  Only .xml files and .*ar archives are supported");
    }
   
    deployment.deploy();
  }

  public void addFileset(FileSet fileSet) {
    this.fileSets.add(fileSet);
  }
  public void setJbpmCfg(String jbpmCfg) {
    this.jbpmCfg = jbpmCfg;
  }
  public void setFile(File file) {
    this.file = file;
  }
  public void setFailOnError(boolean failOnError) {
    this.failOnError = failOnError;
  }
}
TOP

Related Classes of org.jbpm.pvm.internal.ant.JbpmDeployTask

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.