ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dona...@apache.org
Subject cvs commit: jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/pvcs Pvcs.java
Date Sun, 06 Jan 2002 08:16:09 GMT
donaldp     02/01/06 00:16:09

  Modified:    proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/pvcs
                        Pvcs.java
  Log:
  Start to refactor this to work with new Execute patterns
  
  Revision  Changes    Path
  1.14      +199 -300  jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java
  
  Index: Pvcs.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/proposal/myrmidon/src/main/org/apache/tools/ant/taskdefs/optional/pvcs/Pvcs.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Pvcs.java	6 Jan 2002 02:20:18 -0000	1.13
  +++ Pvcs.java	6 Jan 2002 08:16:09 -0000	1.14
  @@ -15,14 +15,14 @@
   import java.io.FileReader;
   import java.io.FileWriter;
   import java.io.IOException;
  -import java.io.OutputStream;
   import java.text.MessageFormat;
   import java.text.ParseException;
   import java.util.ArrayList;
   import java.util.Iterator;
  -import java.util.Random;
  +import org.apache.myrmidon.api.AbstractTask;
   import org.apache.myrmidon.api.TaskException;
   import org.apache.tools.ant.taskdefs.exec.Execute;
  +import org.apache.tools.ant.taskdefs.exec.Execute2;
   import org.apache.tools.ant.taskdefs.exec.LogOutputStream;
   import org.apache.tools.ant.types.Commandline;
   
  @@ -42,7 +42,8 @@
    * @author <a href="mailto:donj@apogeenet.com">Don Jeffery</a>
    * @author <a href="snewton@standard.com">Steven E. Newton</a>
    */
  -public class Pvcs extends org.apache.tools.ant.Task
  +public class Pvcs
  +    extends AbstractTask
   {
       /**
        * Constant for the thing to execute
  @@ -59,441 +60,344 @@
        * Constant for the thing to execute
        */
       private final static String GET_EXE = "get";
  -    private String filenameFormat;
  -    private String force;
  -    private boolean ignorerc;
  -    private String label;
  -    private String lineStart;
  -    private String promotiongroup;
  -    private String pvcsProject;
  -    private ArrayList pvcsProjects;
  -    private String pvcsbin;
  -    private String repository;
  -    private boolean updateOnly;
  -    private String workspace;
  +    private String m_filenameFormat;
  +    private boolean m_force;
  +    private boolean m_ignoreReturnCode;
  +    private String m_label;
  +    private String m_lineStart;
  +    private String m_promotiongroup;
  +    private String m_pvcsProject;
  +    private ArrayList m_pvcsProjects;
  +    private String m_pvcsbin;
  +    private String m_repository;
  +    private boolean m_updateOnly;
  +    private String m_workspace;
   
       /**
        * Creates a Pvcs object
        */
       public Pvcs()
       {
  -        super();
  -        pvcsProject = null;
  -        pvcsProjects = new ArrayList();
  -        workspace = null;
  -        repository = null;
  -        pvcsbin = null;
  -        force = null;
  -        promotiongroup = null;
  -        label = null;
  -        ignorerc = false;
  -        updateOnly = false;
  -        lineStart = "\"P:";
  -        filenameFormat = "{0}_arc({1})";
  +        m_pvcsProjects = new ArrayList();
  +        m_lineStart = "\"P:";
  +        m_filenameFormat = "{0}_arc({1})";
       }
   
  -    public void setFilenameFormat( String f )
  +    public void setFilenameFormat( final String filenameFormat )
       {
  -        filenameFormat = f;
  +        m_filenameFormat = filenameFormat;
       }
   
       /**
        * Specifies the value of the force argument
  -     *
  -     * @param f The new Force value
        */
  -    public void setForce( String f )
  +    public void setForce( final boolean force )
       {
  -        if( f != null && f.equalsIgnoreCase( "yes" ) )
  -            force = "yes";
  -        else
  -            force = "no";
  +        m_force = force;
       }
   
       /**
        * If set to true the return value from executing the pvcs commands are
        * ignored.
  -     *
  -     * @param b The new IgnoreReturnCode value
        */
  -    public void setIgnoreReturnCode( boolean b )
  +    public void setIgnoreReturnCode( final boolean ignoreReturnCode )
       {
  -        ignorerc = b;
  +        m_ignoreReturnCode = ignoreReturnCode;
       }
   
       /**
        * Specifies the name of the label argument
  -     *
  -     * @param l The new Label value
        */
  -    public void setLabel( String l )
  +    public void setLabel( final String label )
       {
  -        label = l;
  +        m_label = label;
       }
   
  -    public void setLineStart( String l )
  +    public void setLineStart( final String lineStart )
       {
  -        lineStart = l;
  +        m_lineStart = lineStart;
       }
   
       /**
        * Specifies the name of the promotiongroup argument
  -     *
  -     * @param w The new Promotiongroup value
        */
  -    public void setPromotiongroup( String w )
  +    public void setPromotiongroup( final String promotiongroup )
       {
  -        promotiongroup = w;
  +        m_promotiongroup = promotiongroup;
       }
   
       /**
        * Specifies the location of the PVCS bin directory
  -     *
  -     * @param bin The new Pvcsbin value
        */
  -    public void setPvcsbin( String bin )
  +    public void setPvcsbin( final String pvcsbin )
       {
  -        pvcsbin = bin;
  +        m_pvcsbin = pvcsbin;
       }
   
       /**
        * Specifies the name of the project in the PVCS repository
  -     *
  -     * @param prj String
        */
  -    public void setPvcsproject( String prj )
  +    public void setPvcsproject( final String pvcsProject )
       {
  -        pvcsProject = prj;
  +        m_pvcsProject = pvcsProject;
       }
   
       /**
        * Specifies the network name of the PVCS repository
  -     *
  -     * @param repo String
        */
  -    public void setRepository( String repo )
  +    public void setRepository( final String repository )
       {
  -        repository = repo;
  +        m_repository = repository;
       }
   
       /**
        * If set to true files are gotten only if newer than existing local files.
  -     *
  -     * @param l The new UpdateOnly value
        */
  -    public void setUpdateOnly( boolean l )
  +    public void setUpdateOnly( final boolean updateOnly )
       {
  -        updateOnly = l;
  +        m_updateOnly = updateOnly;
       }
   
       /**
        * Specifies the name of the workspace to store retrieved files
  -     *
  -     * @param ws String
  -     */
  -    public void setWorkspace( String ws )
  -    {
  -        workspace = ws;
  -    }
  -
  -    public String getFilenameFormat()
  -    {
  -        return filenameFormat;
  -    }
  -
  -    /**
  -     * Get value of force
  -     *
  -     * @return String
        */
  -    public String getForce()
  +    public void setWorkspace( final String workspace )
       {
  -        return force;
  +        m_workspace = workspace;
       }
   
       /**
  -     * Get value of ignorereturncode
  -     *
  -     * @return String
  +     * handles &lt;pvcsproject&gt; subelements
        */
  -    public boolean getIgnoreReturnCode()
  +    public void addPvcsproject( final PvcsProject pvcsProject )
       {
  -        return ignorerc;
  +        m_pvcsProjects.add( pvcsProject );
       }
   
  -    /**
  -     * Get value of label
  -     *
  -     * @return String
  -     */
  -    public String getLabel()
  +    public void execute()
  +        throws TaskException
       {
  -        return label;
  -    }
  +        int result = 0;
   
  -    public String getLineStart()
  -    {
  -        return lineStart;
  -    }
  +        validate();
   
  -    /**
  -     * Get value of promotiongroup
  -     *
  -     * @return String
  -     */
  -    public String getPromotiongroup()
  -    {
  -        return promotiongroup;
  -    }
  +        final File filelist = getFileList();
   
  -    /**
  -     * Get name of the PVCS bin directory
  -     *
  -     * @return String
  -     */
  -    public String getPvcsbin()
  -    {
  -        return pvcsbin;
  +        final Commandline cmd = buildGetCommand( filelist );
  +        getLogger().info( "Getting files" );
  +        getLogger().debug( "Executing " + cmd.toString() );
  +        try
  +        {
  +            final Execute2 exe = new Execute2();
  +            setupLogger( exe );
  +            exe.setWorkingDirectory( getBaseDirectory() );
  +            exe.setCommandline( cmd.getCommandline() );
  +            result = exe.execute();
  +            checkResultCode( result, cmd );
  +        }
  +        catch( IOException e )
  +        {
  +            String msg = "Failed executing: " + cmd.toString() + ". Exception: " + e.getMessage();
  +            throw new TaskException( msg );
  +        }
  +        finally
  +        {
  +            if( filelist != null )
  +            {
  +                filelist.delete();
  +            }
  +        }
       }
   
  -    /**
  -     * Get name of the project in the PVCS repository
  -     *
  -     * @return String
  -     */
  -    public String getPvcsproject()
  +    private Commandline buildGetCommand( final File filelist )
       {
  -        return pvcsProject;
  -    }
  +        final Commandline cmd = new Commandline();
  +        cmd.setExecutable( getExecutable( GET_EXE ) );
   
  -    /**
  -     * Get name of the project in the PVCS repository
  -     *
  -     * @return ArrayList
  -     */
  -    public ArrayList getPvcsprojects()
  -    {
  -        return pvcsProjects;
  -    }
  +        if( m_force )
  +        {
  +            cmd.createArgument().setValue( "-Y" );
  +        }
  +        else
  +        {
  +            cmd.createArgument().setValue( "-N" );
  +        }
   
  -    /**
  -     * Get network name of the PVCS repository
  -     *
  -     * @return String
  -     */
  -    public String getRepository()
  -    {
  -        return repository;
  -    }
  +        if( null != m_promotiongroup )
  +        {
  +            cmd.createArgument().setValue( "-G" + m_promotiongroup );
  +        }
  +        else if( null != m_label )
  +        {
  +            cmd.createArgument().setValue( "-r" + m_label );
  +        }
   
  -    public boolean getUpdateOnly()
  -    {
  -        return updateOnly;
  -    }
  +        if( m_updateOnly )
  +        {
  +            cmd.createArgument().setValue( "-U" );
  +        }
   
  -    /**
  -     * Get name of the workspace to store the retrieved files
  -     *
  -     * @return String
  -     */
  -    public String getWorkspace()
  -    {
  -        return workspace;
  +        cmd.createArgument().setValue( "@" + filelist.getAbsolutePath() );
  +        return cmd;
       }
   
  -    /**
  -     * handles &lt;pvcsproject&gt; subelements
  -     *
  -     * @param p The feature to be added to the Pvcsproject attribute
  -     */
  -    public void addPvcsproject( PvcsProject p )
  +    private void checkResultCode( final int result, final Commandline cmd )
  +        throws TaskException
       {
  -        pvcsProjects.add( p );
  +        if( result != 0 && !m_ignoreReturnCode )
  +        {
  +            final String message = "Failed executing: " + cmd.toString() +
  +                ". Return code was " + result;
  +            throw new TaskException( message );
  +        }
       }
   
  -    /**
  -     * @exception org.apache.tools.ant.TaskException Something is stopping the
  -     *      build...
  -     */
  -    public void execute()
  +    private File getFileList()
           throws TaskException
       {
  -        int result = 0;
  -
  -        if( repository == null || repository.trim().equals( "" ) )
  -            throw new TaskException( "Required argument repository not specified" );
  -
           // Check workspace exists
           // Launch PCLI listversionedfiles -z -aw
           // Capture output
           // build the command line from what we got the format is
  -        Commandline commandLine = new Commandline();
  -        commandLine.setExecutable( getExecutable( PCLI_EXE ) );
  -
  -        commandLine.createArgument().setValue( "lvf" );
  -        commandLine.createArgument().setValue( "-z" );
  -        commandLine.createArgument().setValue( "-aw" );
  -        if( getWorkspace() != null )
  -            commandLine.createArgument().setValue( "-sp" + getWorkspace() );
  -        commandLine.createArgument().setValue( "-pr" + getRepository() );
  -
  -        // default pvcs project is "/"
  -        if( getPvcsproject() == null && getPvcsprojects().isEmpty() )
  -            pvcsProject = "/";
  -
  -        if( getPvcsproject() != null )
  -            commandLine.createArgument().setValue( getPvcsproject() );
  -        if( !getPvcsprojects().isEmpty() )
  -        {
  -            Iterator e = getPvcsprojects().iterator();
  -            while( e.hasNext() )
  -            {
  -                String projectName = ( (PvcsProject)e.next() ).getName();
  -                if( projectName == null || ( projectName.trim() ).equals( "" ) )
  -                    throw new TaskException( "name is a required attribute of pvcsproject"
);
  -                commandLine.createArgument().setValue( projectName );
  -            }
  -        }
  +        final Commandline cmd = buildPCLICommand();
  +        getLogger().debug( "Executing " + cmd.toString() );
   
           File tmp = null;
  -        File tmp2 = null;
  +
           try
           {
  -            Random rand = new Random( System.currentTimeMillis() );
  -            tmp = new File( "pvcs_ant_" + rand.nextLong() + ".log" );
  -            tmp2 = new File( "pvcs_ant_" + rand.nextLong() + ".log" );
  -            getLogger().debug( "Executing " + commandLine.toString() );
  -            result = runCmd( commandLine, new FileOutputStream( tmp ),
  -                             new LogOutputStream( getLogger(), true ) );
  -            if( result != 0 && !ignorerc )
  -            {
  -                String msg = "Failed executing: " + commandLine.toString();
  -                throw new TaskException( msg );
  -            }
  +            tmp = File.createTempFile( "pvcs_ant_", ".log" );
  +            final File fileList = File.createTempFile( "pvcs_ant_", ".log" );
  +
  +            final Execute exe = new Execute();
  +            exe.setOutput( new FileOutputStream( tmp ) );
  +            exe.setError( new LogOutputStream( getLogger(), true ) );
  +            exe.setWorkingDirectory( getBaseDirectory() );
  +            exe.setCommandline( cmd.getCommandline() );
  +            final int result = exe.execute();
  +            checkResultCode( result, cmd );
   
               if( !tmp.exists() )
  -                throw new TaskException( "Communication between ant and pvcs failed. No
output generated from executing PVCS commandline interface \"pcli\" and \"get\"" );
  +            {
  +                final String message = "Communication between ant and pvcs failed. No output
" +
  +                    "generated from executing PVCS commandline interface \"pcli\" and \"get\"";
  +                throw new TaskException( message );
  +            }
   
               // Create folders in workspace
               getLogger().info( "Creating folders" );
               createFolders( tmp );
   
               // Massage PCLI lvf output transforming '\' to '/' so get command works appropriately
  -            massagePCLI( tmp, tmp2 );
  -
  -            // Launch get on output captured from PCLI lvf
  -            commandLine.clearArgs();
  -            commandLine.setExecutable( getExecutable( GET_EXE ) );
  -
  -            if( getForce() != null && getForce().equals( "yes" ) )
  -                commandLine.createArgument().setValue( "-Y" );
  -            else
  -                commandLine.createArgument().setValue( "-N" );
  -
  -            if( getPromotiongroup() != null )
  -                commandLine.createArgument().setValue( "-G" + getPromotiongroup() );
  -            else
  -            {
  -                if( getLabel() != null )
  -                    commandLine.createArgument().setValue( "-r" + getLabel() );
  -            }
  -
  -            if( updateOnly )
  -            {
  -                commandLine.createArgument().setValue( "-U" );
  -            }
  -
  -            commandLine.createArgument().setValue( "@" + tmp2.getAbsolutePath() );
  -            getLogger().info( "Getting files" );
  -            getLogger().debug( "Executing " + commandLine.toString() );
  -            final LogOutputStream output = new LogOutputStream( getLogger(), false );
  -            final LogOutputStream error = new LogOutputStream( getLogger(), true );
  -            result = runCmd( commandLine, output, error );
  -
  -            if( result != 0 && !ignorerc )
  -            {
  -                String msg = "Failed executing: " + commandLine.toString() + ". Return
code was " + result;
  -                throw new TaskException( msg );
  -            }
  -
  +            massagePCLI( tmp, fileList );
  +            return fileList;
           }
  -        catch( FileNotFoundException e )
  +        catch( final ParseException pe )
           {
  -            String msg = "Failed executing: " + commandLine.toString() + ". Exception:
" + e.getMessage();
  -            throw new TaskException( msg );
  -        }
  -        catch( IOException e )
  -        {
  -            String msg = "Failed executing: " + commandLine.toString() + ". Exception:
" + e.getMessage();
  -            throw new TaskException( msg );
  +            final String message = "Failed executing: " +
  +                cmd.toString() + ". Exception: " + pe.getMessage();
  +            throw new TaskException( message );
           }
  -        catch( ParseException e )
  +        catch( final IOException ioe )
           {
  -            String msg = "Failed executing: " + commandLine.toString() + ". Exception:
" + e.getMessage();
  -            throw new TaskException( msg );
  +            final String message = "Failed executing: " +
  +                cmd.toString() + ". Exception: " + ioe.getMessage();
  +            throw new TaskException( message );
           }
           finally
           {
  -            if( tmp != null )
  +            if( null != tmp )
               {
                   tmp.delete();
               }
  -            if( tmp2 != null )
  +        }
  +    }
  +
  +    private Commandline buildPCLICommand()
  +        throws TaskException
  +    {
  +        final Commandline cmd = new Commandline();
  +        cmd.setExecutable( getExecutable( PCLI_EXE ) );
  +
  +        cmd.createArgument().setValue( "lvf" );
  +        cmd.createArgument().setValue( "-z" );
  +        cmd.createArgument().setValue( "-aw" );
  +        if( m_workspace != null )
  +        {
  +            cmd.createArgument().setValue( "-sp" + m_workspace );
  +        }
  +        cmd.createArgument().setValue( "-pr" + m_repository );
  +
  +        if( m_pvcsProject != null )
  +        {
  +            cmd.createArgument().setValue( m_pvcsProject );
  +        }
  +
  +        if( !m_pvcsProjects.isEmpty() )
  +        {
  +            Iterator e = m_pvcsProjects.iterator();
  +            while( e.hasNext() )
               {
  -                tmp2.delete();
  +                final PvcsProject project = (PvcsProject)e.next();
  +                final String name = project.getName();
  +                if( name == null || ( name.trim() ).equals( "" ) )
  +                {
  +                    final String message = "name is a required attribute of pvcsproject";
  +                    throw new TaskException( message );
  +                }
  +                cmd.createArgument().setValue( name );
               }
           }
  +        return cmd;
       }
   
  -    protected int runCmd( Commandline cmd, OutputStream output, OutputStream error )
  +    private void validate()
           throws TaskException
       {
  -        try
  +        if( m_repository == null || m_repository.trim().equals( "" ) )
           {
  -            final Execute exe = new Execute();
  -            exe.setOutput( output );
  -            exe.setError( error );
  -            exe.setWorkingDirectory( getBaseDirectory() );
  -            exe.setCommandline( cmd.getCommandline() );
  -            return exe.execute();
  +            throw new TaskException( "Required argument repository not specified" );
           }
  -        catch( java.io.IOException e )
  +
  +        // default pvcs project is "/"
  +        if( m_pvcsProject == null && m_pvcsProjects.isEmpty() )
           {
  -            String msg = "Failed executing: " + cmd.toString() + ". Exception: " + e.getMessage();
  -            throw new TaskException( msg );
  +            m_pvcsProject = "/";
           }
       }
   
  -    private String getExecutable( String exe )
  +    private String getExecutable( final String exe )
       {
  -        StringBuffer correctedExe = new StringBuffer();
  -        if( getPvcsbin() != null )
  -            if( pvcsbin.endsWith( File.separator ) )
  -                correctedExe.append( pvcsbin );
  +        final StringBuffer correctedExe = new StringBuffer();
  +        if( null != m_pvcsbin )
  +        {
  +            if( m_pvcsbin.endsWith( File.separator ) )
  +            {
  +                correctedExe.append( m_pvcsbin );
  +            }
               else
  -                correctedExe.append( pvcsbin ).append( File.separator );
  +            {
  +                correctedExe.append( m_pvcsbin ).append( File.separator );
  +            }
  +        }
           return correctedExe.append( exe ).toString();
       }
   
       /**
        * Parses the file and creates the folders specified in the output section
  -     *
  -     * @param file Description of Parameter
  -     * @exception IOException Description of Exception
  -     * @exception ParseException Description of Exception
        */
  -    private void createFolders( File file )
  +    private void createFolders( final File file )
           throws IOException, ParseException
       {
  -        BufferedReader in = new BufferedReader( new FileReader( file ) );
  -        MessageFormat mf = new MessageFormat( getFilenameFormat() );
  +        final BufferedReader in = new BufferedReader( new FileReader( file ) );
  +        final MessageFormat mf = new MessageFormat( m_filenameFormat );
           String line = in.readLine();
           while( line != null )
           {
               getLogger().debug( "Considering \"" + line + "\"" );
               if( line.startsWith( "\"\\" ) ||
                   line.startsWith( "\"/" ) ||
  -                line.startsWith( getLineStart() ) )
  +                line.startsWith( m_lineStart ) )
               {
                   Object[] objs = mf.parse( line );
                   String f = (String)objs[ 1 ];
  @@ -536,21 +440,16 @@
       /**
        * Simple hack to handle the PVCS command-line tools botch when handling UNC
        * notation.
  -     *
  -     * @param in Description of Parameter
  -     * @param out Description of Parameter
  -     * @exception FileNotFoundException Description of Exception
  -     * @exception IOException Description of Exception
        */
  -    private void massagePCLI( File in, File out )
  +    private void massagePCLI( final File in, final File out )
           throws FileNotFoundException, IOException
       {
  -        BufferedReader inReader = new BufferedReader( new FileReader( in ) );
  -        BufferedWriter outWriter = new BufferedWriter( new FileWriter( out ) );
  +        final BufferedReader inReader = new BufferedReader( new FileReader( in ) );
  +        final BufferedWriter outWriter = new BufferedWriter( new FileWriter( out ) );
           String s = null;
           while( ( s = inReader.readLine() ) != null )
           {
  -            String sNormal = s.replace( '\\', '/' );
  +            final String sNormal = s.replace( '\\', '/' );
               outWriter.write( sNormal );
               outWriter.newLine();
           }
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message