/* * Copyright 2001-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.optional.ccm; import java.io.File; import java.util.Vector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.Project; import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.FileSet; /** * Class common to all check commands (checkout, checkin,checkin default task); * @ant.task ignore="true" */ public class CCMCheck extends Continuus { private File file = null; private String comment = null; private String task = null; protected Vector filesets = new Vector(); public CCMCheck() { super(); } /** * Get the value of file. * @return value of file. */ public File getFile() { return file; } /** * Sets the path to the file that the command will operate on. * @param v Value to assign to file. */ public void setFile(File v) { log("working file " + v, Project.MSG_VERBOSE); this.file = v; } /** * Get the value of comment. * @return value of comment. */ public String getComment() { return comment; } /** * Specifies a comment. * @param v Value to assign to comment. */ public void setComment(String v) { this.comment = v; } /** * Get the value of task. * @return value of task. */ public String getTask() { return task; } /** * Specifies the task number used to check * in the file (may use 'default'). * @param v Value to assign to task. */ public void setTask(String v) { this.task = v; } /** * Adds a set of files to copy. */ public void addFileset(FileSet set) { filesets.addElement(set); } /** * Executes the task. *

* Builds a command line to execute ccm and then calls Exec's run method * to execute the command line. *

*/ public void execute() throws BuildException { if (file == null && filesets.size() == 0) { throw new BuildException( "Specify at least one source - a file or a fileset."); } if (file != null && file.exists() && file.isDirectory()) { throw new BuildException("CCMCheck cannot be generated for directories"); } if (file != null && filesets.size() > 0) { throw new BuildException("Choose between file and fileset !"); } if (getFile() != null) { doit(); return; } int sizeofFileSet = filesets.size(); for (int i = 0; i < sizeofFileSet; i++) { FileSet fs = (FileSet) filesets.elementAt(i); DirectoryScanner ds = fs.getDirectoryScanner(getProject()); String[] srcFiles = ds.getIncludedFiles(); for (int j = 0; j < srcFiles.length; j++) { File src = new File(fs.getDir(getProject()), srcFiles[j]); setFile(src); doit(); } } } /** * check the file given by getFile(). */ private void doit() { Commandline commandLine = new Commandline(); // build the command line from what we got the format is // ccm co /t .. files // as specified in the CCM.EXE help commandLine.setExecutable(getCcmCommand()); commandLine.createArgument().setValue(getCcmAction()); checkOptions(commandLine); int result = run(commandLine); if (Execute.isFailure(result)) { String msg = "Failed executing: " + commandLine.toString(); throw new BuildException(msg, getLocation()); } } /** * Check the command line options. */ private void checkOptions(Commandline cmd) { if (getComment() != null) { cmd.createArgument().setValue(FLAG_COMMENT); cmd.createArgument().setValue(getComment()); } if (getTask() != null) { cmd.createArgument().setValue(FLAG_TASK); cmd.createArgument().setValue(getTask()); } if (getFile() != null) { cmd.createArgument().setValue(file.getAbsolutePath()); } } /** * -comment flag -- comment to attach to the file */ public static final String FLAG_COMMENT = "/comment"; /** * -task flag -- associate checkout task with task */ public static final String FLAG_TASK = "/task"; }