CPD Results

The following document contains the results of PMD's CPD 4.3.

Duplications

File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java 104
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutConsumer.java 103
org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java 103
    public VssCheckInConsumer( VssScmProviderRepository repo, ScmLogger logger )
    {
        super( logger );
        this.repo = repo;
    }

    /** {@inheritDoc} */
    public void consumeLine( String line )
    {
        if ( getLogger().isDebugEnabled() )
        {
            getLogger().debug( line );
        }

        switch ( getLineStatus( line ) )
        {
            case GET_FILE_PATH:
                processGetFilePath( line );
                break;
            case GET_FILE:
                processGetFile( line );
                break;
            case REPLACE_FILE:
                processReplaceFile( line );
                break;
            case IS_WRITABLE_COPY:
                // will be overwritten and uses REPLACE_FILE
                break;
            case SET_WORKING_FOLDER:
                // to trash
                break;
            default:
                break;
        }
    }

    /**
     * Process the current input line in the Get File state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processGetFile( String line )
    {
        String[] fileLine = line.split( " " );
        updatedFiles.add( new ScmFile( currentPath + "/" + fileLine[1], ScmFileStatus.UPDATED ) );
        if ( getLogger().isInfoEnabled() )
        {
            getLogger().info( fileLine[0] + ": " + currentPath + "/" + fileLine[1] );
        }
    }

    /**
     * Process the current input line in the Replace File state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processReplaceFile( String line )
    {
        updatedFiles.add( new ScmFile( currentPath + "/" + line.substring( START_REPLACING.length() ),
                                       ScmFileStatus.UPDATED ) );
        if ( getLogger().isInfoEnabled() )
        {
            getLogger().info( START_REPLACING + currentPath + "/" + line.substring( START_REPLACING.length() ) );
        }
    }

    /**
     * Process the current input line in the Get File Path state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processGetFilePath( String line )
    {
        currentPath = line.substring( ( VssConstants.PROJECT_PREFIX + repo.getProject() ).length(), line.length() - 1 );
    }

    /**
     * Identify the status of a vss get line
     * 
     * @param line The line to process
     * @return status
     */
    private int getLineStatus( String line )
    {
        int argument = GET_UNKNOWN;
        if ( line.startsWith( START_FILE_PATH ) )
        {
            argument = GET_FILE_PATH;
        }
        else if ( line.startsWith( START_GETTING ) )
        {
            argument = GET_FILE;
        }
        else if ( line.startsWith( START_REPLACING ) )
        {
            argument = REPLACE_FILE;
        }
        else if ( line.startsWith( START_WRITABLE_COPY ) )
        {
            argument = IS_WRITABLE_COPY;
        }
        else if ( line.indexOf( CONTAINS_SET_DEFAULT_WORKING_FOLDER ) != -1 )
        {
            argument = SET_WORKING_FOLDER;
        }

        return argument;
    }

    public List<ScmFile> getUpdatedFiles()
    {
        return updatedFiles;
    }

}
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java 152
org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java 150
                command.createArg().setValue( VssConstants.COMMAND_CHECKIN );

                String absolute;
                try
                {
                    absolute = file.getCanonicalPath();
                    String relative;
                    int index = absolute.indexOf( base );
                    if ( index >= 0 )
                    {
                        relative = absolute.substring( index + base.length() );
                    }
                    else
                    {
                        relative = file.getPath();
                    }

                    relative = relative.replace( '\\', '/' );

                    if ( !relative.startsWith( "/" ) )
                    {
                        relative = '/' + relative;
                    }

                    String relativeFolder = relative.substring( 0, relative.lastIndexOf( '/' ) );

                    command.setWorkingDirectory( new File( fileSet.getBasedir().getAbsolutePath() + File.separatorChar
                        + relativeFolder ).getCanonicalPath() );

                    command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() + relative );
                }
                catch ( IOException e )
                {
                    throw new ScmException( "Invalid canonical path", e );
                }

                //User identification to get access to vss repository
                if ( repo.getUserPassword() != null )
                {
                    command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
                }

                // Ignore: Do not ask for input under any circumstances.
                command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );
File Line
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java 89
org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java 93
        return new CheckOutScmResult( cl.toString(), consumer.getUpdatedFiles() );
    }

    public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet, ScmVersion version )
        throws ScmException
    {

        Commandline command = new Commandline();

        command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );

        try
        {
            command.addSystemEnvironment();
        }
        catch ( Exception e )
        {
            throw new ScmException( "Can't add system environment.", e );
        }

        command.addEnvironment( "SSDIR", repo.getVssdir() );

        String ssDir = VssCommandLineUtils.getSsDir();

        command.setExecutable( ssDir + VssConstants.SS_EXE );

        command.createArg().setValue( VssConstants.COMMAND_GET );

        command.createArg().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() );

        //User identification to get access to vss repository
        if ( repo.getUserPassword() != null )
        {
            command.createArg().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() );
        }

        //Display the history of an entire project list
        command.createArg().setValue( VssConstants.FLAG_RECURSION );

        //Ignore: Do not ask for input under any circumstances.
        command.createArg().setValue( VssConstants.FLAG_AUTORESPONSE_DEF );

        //Ignore: Do not touch local writable files.
        command.createArg().setValue( VssConstants.FLAG_REPLACE_WRITABLE );
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java 131
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutConsumer.java 130
org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java 130
org/apache/maven/scm/provider/vss/commands/update/VssUpdateConsumer.java 131
                break;
            case SET_WORKING_FOLDER:
                // to trash
                break;
            default:
                break;
        }
    }

    /**
     * Process the current input line in the Get File state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processGetFile( String line )
    {
        String[] fileLine = line.split( " " );
        updatedFiles.add( new ScmFile( currentPath + "/" + fileLine[1], ScmFileStatus.UPDATED ) );
        if ( getLogger().isInfoEnabled() )
        {
            getLogger().info( fileLine[0] + ": " + currentPath + "/" + fileLine[1] );
        }
    }

    /**
     * Process the current input line in the Replace File state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processReplaceFile( String line )
    {
        updatedFiles.add( new ScmFile( currentPath + "/" + line.substring( START_REPLACING.length() ),
                                       ScmFileStatus.UPDATED ) );
        if ( getLogger().isInfoEnabled() )
        {
            getLogger().info( START_REPLACING + currentPath + "/" + line.substring( START_REPLACING.length() ) );
        }
    }

    /**
     * Process the current input line in the Get File Path state.
     * 
     * @param line a line of text from the VSS log output
     */
    private void processGetFilePath( String line )
    {
        currentPath = line.substring( ( VssConstants.PROJECT_PREFIX + repo.getProject() ).length(), line.length() - 1 );
    }

    /**
     * Identify the status of a vss get line
     * 
     * @param line The line to process
     * @return status
     */
    private int getLineStatus( String line )
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java 112
org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java 111
    public List<Commandline> buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet, ScmVersion version )
        throws ScmException
    {

        List<File> files = fileSet.getFileList();
        List<Commandline> commands = new ArrayList<Commandline>();

        if ( files.size() > 0 )
        {

            String base;
            try
            {
                base = fileSet.getBasedir().getCanonicalPath();
            }
            catch ( IOException e )
            {
                throw new ScmException( "Invalid canonical path", e );
            }

            for ( File file : files )
            {

                Commandline command = new Commandline();

                try
                {
                    command.addSystemEnvironment();
                }
                catch ( Exception e )
                {
                    throw new ScmException( "Can't add system environment.", e );
                }

                command.addEnvironment( "SSDIR", repo.getVssdir() );

                String ssDir = VssCommandLineUtils.getSsDir();

                command.setExecutable( ssDir + VssConstants.SS_EXE );

                command.createArg().setValue( VssConstants.COMMAND_CHECKIN );
File Line
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java 56
org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java 68
org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java 59
        VssCheckOutConsumer consumer = new VssCheckOutConsumer( repo, getLogger() );

        //      TODO handle deleted files from VSS
        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();

        int exitCode;

        if ( getLogger().isDebugEnabled() )
        {
            getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + ">>" + cl.toString() );
        }

        exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );

        if ( exitCode != 0 )
        {
            String error = stderr.getOutput();

            if ( getLogger().isDebugEnabled() )
            {
                getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
            }
            if ( error.indexOf( "A writable copy of" ) < 0 )
            {
                return new CheckOutScmResult( cl.toString(), "The vss command failed.", error, false );
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java 78
org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java 71
        StringBuilder sb = new StringBuilder();
        for ( Commandline cl : commandLines )
        {

            if ( getLogger().isDebugEnabled() )
            {
                getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + ">>" + cl.toString() );
            }

            exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );

            if ( exitCode != 0 )
            {
                String error = stderr.getOutput();

                if ( getLogger().isDebugEnabled() )
                {
                    getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
                }
                if ( error.indexOf( "A writable copy of" ) < 0 )
                {
                    return new CheckInScmResult( cl.toString(), "The vss command failed.", error, false );
File Line
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java 56
org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java 55
org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java 68
org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java 59
        VssCheckOutConsumer consumer = new VssCheckOutConsumer( repo, getLogger() );

        //      TODO handle deleted files from VSS
        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();

        int exitCode;

        if ( getLogger().isDebugEnabled() )
        {
            getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + ">>" + cl.toString() );
        }

        exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );

        if ( exitCode != 0 )
        {
            String error = stderr.getOutput();

            if ( getLogger().isDebugEnabled() )
            {
                getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
            }
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInCommand.java 82
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java 63
org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java 76
org/apache/maven/scm/provider/vss/commands/tag/VssTagCommand.java 75
org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java 67
            if ( getLogger().isDebugEnabled() )
            {
                getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + ">>" + cl.toString() );
            }

            exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );

            if ( exitCode != 0 )
            {
                String error = stderr.getOutput();

                if ( getLogger().isDebugEnabled() )
                {
                    getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" );
                }
                if ( error.indexOf( "A writable copy of" ) < 0 )
                {
                    return new CheckInScmResult( cl.toString(), "The vss command failed.", error, false );
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java 178
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutConsumer.java 177
org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java 177
org/apache/maven/scm/provider/vss/commands/update/VssUpdateConsumer.java 193
    }

    /**
     * Identify the status of a vss get line
     * 
     * @param line The line to process
     * @return status
     */
    private int getLineStatus( String line )
    {
        int argument = GET_UNKNOWN;
        if ( line.startsWith( START_FILE_PATH ) )
        {
            argument = GET_FILE_PATH;
        }
        else if ( line.startsWith( START_GETTING ) )
        {
            argument = GET_FILE;
        }
        else if ( line.startsWith( START_REPLACING ) )
        {
            argument = REPLACE_FILE;
        }
        else if ( line.startsWith( START_WRITABLE_COPY ) )
        {
            argument = IS_WRITABLE_COPY;
        }
        else if ( line.indexOf( CONTAINS_SET_DEFAULT_WORKING_FOLDER ) != -1 )
        {
            argument = SET_WORKING_FOLDER;
        }

        return argument;
    }

    public List<ScmFile> getUpdatedFiles()
    {
        return updatedFiles;
    }

}
File Line
org/apache/maven/scm/provider/vss/commands/checkin/VssCheckInConsumer.java 39
org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutConsumer.java 38
org/apache/maven/scm/provider/vss/commands/tag/VssTagConsumer.java 38
org/apache/maven/scm/provider/vss/commands/update/VssUpdateConsumer.java 38
    extends AbstractConsumer
    implements StreamConsumer
{

    /**
     * expecting file information
     */
    private static final int GET_UNKNOWN = 0;

    /**
     * expecting file information
     */
    private static final int GET_FILE = 1;

    /**
     * expecting file information
     */
    private static final int REPLACE_FILE = 2;

    /**
     * expecting file path information
     */
    private static final int GET_FILE_PATH = 3;

    /**
     * expecting writable copy
     */
    private static final int IS_WRITABLE_COPY = 4;

    /**
     * expecting working folder
     */
    private static final int SET_WORKING_FOLDER = 5;

    /**
     * Marks start of file data
     */
    private static final String START_FILE_PATH = "$/";

    /**
     * Marks getting a new File
     */
    private static final String START_GETTING = "Getting";

    /**
     * Marks replacing a old File
     */
    private static final String START_REPLACING = "Replacing local copy of ";

    /**
     * Marks a writable copy of a File / maybe a conflict
     */
    private static final String START_WRITABLE_COPY = "A writable ";

    /**
     * Marks "Set the default folder for project" question
     */
    private static final String CONTAINS_SET_DEFAULT_WORKING_FOLDER = "as the default folder for project";

    private String currentPath = "";

    private List<ScmFile> updatedFiles = new ArrayList<ScmFile>();

    private VssScmProviderRepository repo;

    public VssCheckInConsumer( VssScmProviderRepository repo, ScmLogger logger )
File Line
org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java 73
org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java 79
        return new AddScmResult( cl.toString(), consumer.getAddedFiles() );
    }

    public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet )
        throws ScmException
    {
        Commandline command = new Commandline();

        command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() );

        try
        {
            command.addSystemEnvironment();
        }
        catch ( Exception e )
        {
            throw new ScmException( "Can't add system environment.", e );
        }

        command.addEnvironment( "SSDIR", repo.getVssdir() );

        String ssDir = VssCommandLineUtils.getSsDir();

        command.setExecutable( ssDir + VssConstants.SS_EXE );

        command.createArg().setValue( VssConstants.COMMAND_ADD );