/* * Jopr Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program 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 General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package com.jboss.jbossnetwork.product.jbpm.handlers; import java.io.File; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Expand; import org.jbpm.graph.exe.ExecutionContext; /** * JBPM handler that is responsible for unzipping a file. * * @author Jason Dobies */ public class UnzipActionHandler extends BaseHandler { /** * Location of the file being unzipped. */ private String fileToBeUnzippedLocation; /** * Location into which the files will be unzipped. This must be a directory. */ private String destinationDirectoryLocation; public void run(ExecutionContext executionContext) { try { HandlerUtils.checkFilenameExists(fileToBeUnzippedLocation); HandlerUtils.checkFilenameIsAFile(fileToBeUnzippedLocation); HandlerUtils.checkFilenameIsReadable(fileToBeUnzippedLocation); HandlerUtils.checkFilenameExists(destinationDirectoryLocation); HandlerUtils.checkFilenameIsADirectory(destinationDirectoryLocation); HandlerUtils.checkFilenameIsWriteable(destinationDirectoryLocation); unzip(); complete(executionContext, "Successfully unzipped [" + HandlerUtils.formatPath(fileToBeUnzippedLocation) + "] to [" + HandlerUtils.formatPath(destinationDirectoryLocation) + "]."); } catch (Throwable t) { error(executionContext, t, MESSAGE_NO_CHANGES, TRANSITION_ERROR); } } public String getDescription() { return "Unzip [" + HandlerUtils.formatPath(fileToBeUnzippedLocation) + "] into [" + HandlerUtils.formatPath(destinationDirectoryLocation) + "]."; } protected void checkProperties() throws ActionHandlerException { HandlerUtils.checkIsSet("destinationDirectoryLocation", destinationDirectoryLocation); HandlerUtils.checkIsSet("fileToBeUnzippedLocation", fileToBeUnzippedLocation); } public void substituteVariables(ExecutionContext executionContext) throws ActionHandlerException { setFileToBeUnzippedLocation(substituteVariable(fileToBeUnzippedLocation, executionContext)); setDestinationDirectoryLocation(substituteVariable(destinationDirectoryLocation, executionContext)); } private void unzip() throws ActionHandlerException { try { // Use the ant unzip wrappers for simplicity of code Expand expander = new Expand(); // Needed in order to get the ant logging (really notification of listeners) setup correctly, // i.e. so that it won't throw NPE's expander.setProject(new Project()); expander.setSrc(new File(fileToBeUnzippedLocation)); expander.setDest(new File(destinationDirectoryLocation)); expander.execute(); } catch (Exception e) { throw new ActionHandlerException("Failed trying to unzip [" + HandlerUtils.formatPath(fileToBeUnzippedLocation) + "] to [" + HandlerUtils.formatPath(destinationDirectoryLocation) + "].", e); } } public String getFileToBeUnzippedLocation() { return fileToBeUnzippedLocation; } public void setFileToBeUnzippedLocation(String fileToBeUnzippedLocation) { this.fileToBeUnzippedLocation = fileToBeUnzippedLocation; } public String getDestinationDirectoryLocation() { return destinationDirectoryLocation; } public void setDestinationDirectoryLocation(String destinationDirectoryLocation) { this.destinationDirectoryLocation = destinationDirectoryLocation; } }