alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Ant example source code file (P4Submit.java)

This example Ant source code file (P4Submit.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Ant tags/keywords

buildexception, buildexception, failed, no, p4base, p4handleradapter, p4submit, p4submitadapter, p4submitadapter, simplep4outputhandler, string, string, util, vector, vector

The P4Submit.java source code

/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You 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;
import java.util.Vector;

/** Submits a numbered changelist to Perforce.
 *
 * <B>Note: P4Submit cannot (yet) submit the default changelist.
 * This shouldn't be a problem with the ANT task as the usual flow is
 * P4Change to create a new numbered change followed by P4Edit then P4Submit.
 *
 * Example Usage:-<br>
 * <p4submit change="${p4.change}" />
 *
 * @ant.task category="scm"
 */
public class P4Submit extends P4Base {

    // CheckStyle:VisibilityModifier OFF - bc
    //ToDo: If dealing with default cl need to parse out <enter description here>
    /**
     * change list number
     */
    public String change;
    // CheckStyle:VisibilityModifier ON
    /**
     * change property
     */
    private String changeProperty;
    /**
     * needsresolveproperty
     */
    private String needsResolveProperty;
    /**
     * set the change list number to submit
     * @param change The changelist number to submit; required.
     */
    public void setChange(String change) {
        this.change = change;
    }
    /**
     * property defining the change number if the change number gets renumbered
     * @param changeProperty name of a new property to which the change number
     * will be assigned if it changes
     * @since ant 1.6.1
     */
    public void setChangeProperty(String changeProperty) {
        this.changeProperty = changeProperty;
    }
    /**
     * property defining the need to resolve the change list
     * @param needsResolveProperty a property which will be set if the change needs resolve
     * @since ant 1.6.1
     */
    public void setNeedsResolveProperty(String needsResolveProperty) {
        this.needsResolveProperty = needsResolveProperty;
    }

    /**
     * do the work
     * @throws BuildException if no change list specified
     */
    public void execute() throws BuildException {
        if (change != null) {
            execP4Command("submit -c " + change, (P4HandlerAdapter) new P4SubmitAdapter(this));
        } else {
            //here we'd parse the output from change -o into submit -i
            //in order to support default change.
            throw new BuildException("No change specified (no support for default change yet....");
        }
    }

    /**
     * internal class used to process the output of p4 submit
     */
    public class P4SubmitAdapter extends SimpleP4OutputHandler {
        /**
         * Constructor.
         * @param parent a P4Base instance.
         */
        public P4SubmitAdapter(P4Base parent) {
            super(parent);
        }
        /**
         * process a line of stdout/stderr coming from Perforce
         * @param line line of stdout or stderr coming from Perforce
         */
        public void process(String line) {
            super.process(line);
            getProject().setProperty("p4.needsresolve", "0");
            // this type of output might happen
            // Change 18 renamed change 20 and submitted.
            if (util.match("/renamed/", line)) {
                try {
                    Vector myarray = new Vector();
                    util.split(myarray, line);
                    boolean found = false;
                    for (int counter = 0; counter < myarray.size(); counter++) {
                        if (found) {
                            String chnum = (String) myarray.elementAt(counter + 1);
                            int changenumber = Integer.parseInt(chnum);
                            log("Perforce change renamed " + changenumber, Project.MSG_INFO);
                            getProject().setProperty("p4.change", "" + changenumber);
                            if (changeProperty != null) {
                                getProject().setNewProperty(changeProperty, chnum);
                            }
                            found = false;
                        }
                        if (((myarray.elementAt(counter))).equals("renamed")) {
                            found = true;
                        }
                    }
                // NumberFormatException or ArrayOutOfBondsException could happen here
                } catch (Exception e) {
                    String msg = "Failed to parse " + line  + "\n"
                            + " due to " + e.getMessage();
                    throw new BuildException(msg, e, getLocation());
                }
            }
            if (util.match("/p4 submit -c/", line)) {
                getProject().setProperty("p4.needsresolve", "1");
                if (needsResolveProperty != null) {
                    getProject().setNewProperty(needsResolveProperty, "true");
                }
            }

        }
    }

}

Other Ant examples (source code examples)

Here is a short list of links related to this Ant P4Submit.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.