- /*
- * 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.
- *
- */
- /*
- * Portions of this software are based upon public domain software
- * originally written at the National Center for Supercomputing Applications,
- * University of Illinois, Urbana-Champaign.
- */
-
- package org.apache.tools.ant.taskdefs.optional.perforce;
-
- import org.apache.tools.ant.BuildException;
- import org.apache.tools.ant.Project;
-
- /**
- * Obtains or sets the value of a counter.
- *
- * <p> When used in its base form
- * (where only the counter name is provided), the counter value will be
- * printed to the output stream. When the value is provided, the counter
- * will be set to the value provided. When a property name is provided,
- * the property will be filled with the value of the counter. You may
- * not specify to both get and set the value of the counter in the same
- * Task.
- * </p>
- * <P>
- * The user performing this task must have Perforce "review" permissions
- * as defined by Perforce protections in order for this task to succeed.
- </P>
-
- * Example Usage:<br>
- * <p4counter name="${p4.counter}" property=${p4.change}"/>
- *
- * @ant.task category="scm"
- */
-
- public class P4Counter extends P4Base {
- /**
- * name of the counter
- */
- public String counter = null;
- /**
- * name of an optional property
- */
- public String property = null;
- /**
- * flag telling whether the value of the counter should be set
- */
- public boolean shouldSetValue = false;
- /**
- * flag telling whether a property should be set
- */
- public boolean shouldSetProperty = false;
- /**
- * new value for the counter
- */
- public int value = 0;
-
- /**
- * The name of the counter; required
- * @param counter name of the counter
- */
- public void setName(String counter) {
- this.counter = counter;
- }
-
- /**
- * The new value for the counter; optional.
- * @param value new value for the counter
- */
- public void setValue(int value) {
- this.value = value;
- shouldSetValue = true;
- }
-
- /**
- * A property to be set with the value of the counter
- * @param property the name of a property to set with the value
- * of the counter
- */
- public void setProperty(String property) {
- this.property = property;
- shouldSetProperty = true;
- }
-
- /**
- * again, properties are mutable in this tsk
- * @throws BuildException if the required parameters are not supplied.
- */
- public void execute() throws BuildException {
-
- if ((counter == null) || counter.length() == 0) {
- throw new BuildException("No counter specified to retrieve");
- }
-
- if (shouldSetValue && shouldSetProperty) {
- throw new BuildException("Cannot both set the value of the property and retrieve the "
- + "value of the property.");
- }
-
- String command = "counter " + P4CmdOpts + " " + counter;
- if (!shouldSetProperty) {
- // NOTE kirk@radik.com 04-April-2001 -- If you put in the -s, you
- // have to start running through regular expressions here. Much easier
- // to just not include the scripting information than to try to add it
- // and strip it later.
- command = "-s " + command;
- }
- if (shouldSetValue) {
- command += " " + value;
- }
-
- if (shouldSetProperty) {
- final Project myProj = getProject();
-
- P4Handler handler = new P4HandlerAdapter() {
- public void process(String line) {
- log("P4Counter retrieved line \"" + line + "\"", Project.MSG_VERBOSE);
- try {
- value = Integer.parseInt(line);
- myProj.setProperty(property, "" + value);
- } catch (NumberFormatException nfe) {
- throw new BuildException("Perforce error. "
- + "Could not retrieve counter value.");
- }
- }
- };
-
- execP4Command(command, handler);
- } else {
- execP4Command(command, new SimpleP4OutputHandler(this));
- }
- }
- }