/* * Copyright 2001-2002,2004 The Apache Software Foundation * * 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 org.apache.tools.ant.taskdefs; import java.io.File; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; /** * Abstract Base class for unpack tasks. * * * @since Ant 1.5 */ public abstract class Unpack extends Task { protected File source; protected File dest; /** * @deprecated setSrc(String) is deprecated and is replaced with * setSrc(File) to make Ant's Introspection * mechanism do the work and also to encapsulate operations on * the type in its own class. * @ant.attribute ignore="true" */ public void setSrc(String src) { log("DEPRECATED - The setSrc(String) method has been deprecated." + " Use setSrc(File) instead."); setSrc(getProject().resolveFile(src)); } /** * @deprecated setDest(String) is deprecated and is replaced with * setDest(File) to make Ant's Introspection * mechanism do the work and also to encapsulate operations on * the type in its own class. * @ant.attribute ignore="true" */ public void setDest(String dest) { log("DEPRECATED - The setDest(String) method has been deprecated." + " Use setDest(File) instead."); setDest(getProject().resolveFile(dest)); } /** * The file to expand; required. * @param src file to expand */ public void setSrc(File src) { source = src; } /** * The destination file or directory; optional. * @param dest destination file or directory */ public void setDest(File dest) { this.dest = dest; } private void validate() throws BuildException { if (source == null) { throw new BuildException("No Src specified", getLocation()); } if (!source.exists()) { throw new BuildException("Src doesn't exist", getLocation()); } if (source.isDirectory()) { throw new BuildException("Cannot expand a directory", getLocation()); } if (dest == null) { dest = new File(source.getParent()); } if (dest.isDirectory()) { String defaultExtension = getDefaultExtension(); createDestFile(defaultExtension); } } private void createDestFile(String defaultExtension) { String sourceName = source.getName(); int len = sourceName.length(); if (defaultExtension != null && len > defaultExtension.length() && defaultExtension.equalsIgnoreCase(sourceName.substring(len - defaultExtension.length()))) { dest = new File(dest, sourceName.substring(0, len - defaultExtension.length())); } else { dest = new File(dest, sourceName); } } public void execute() throws BuildException { File savedDest = dest; // may be altered in validate try { validate(); extract(); } finally { dest = savedDest; } } protected abstract String getDefaultExtension(); protected abstract void extract(); }