buildframework/helium/sf/java/scm/src/com/nokia/maven/scm/provider/hg/VersionChangeSet.java
author wbernard
Fri, 13 Aug 2010 14:59:05 +0300
changeset 628 7c4a911dc066
parent 588 c7c26511138f
permissions -rw-r--r--
helium_11.0.0-e00f171ca185
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     1
/*
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     3
 * All rights reserved.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     8
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    11
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    12
 * Contributors:
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    13
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    14
 * Description:  
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    15
 *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    16
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    17
 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    18
package com.nokia.maven.scm.provider.hg;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    19
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    20
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    21
import java.util.ArrayList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    22
import java.util.List;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    23
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    24
import org.apache.maven.scm.ChangeFile;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    25
import org.apache.maven.scm.ChangeSet;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    26
import org.apache.maven.scm.ScmException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    27
import org.apache.maven.scm.ScmVersion;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    28
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    29
/**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    30
 * A version changeset.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    31
 */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    32
public class VersionChangeSet extends ChangeSet
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    33
{
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    34
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    35
    private static final String DATE_PATTERN = "yyyy-MM-dd";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    36
    private static final String TIME_PATTERN = "HH:mm:ss";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    37
    private List<ScmVersion> scmVersionList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    38
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    39
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    40
     * Constructor used when attributes aren't available until later
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    41
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    42
    public VersionChangeSet()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    43
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    44
        super();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    45
        scmVersionList = new ArrayList<ScmVersion>();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    46
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    47
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    48
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    49
    * Setter for ScmVersion
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    50
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    51
    public void setScmVersion(ScmVersion scmVersion) throws ScmException
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    52
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    53
        scmVersionList.add(scmVersion);
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    54
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    55
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    56
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    57
     * Getter for ChangeFile list.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    58
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    59
     * @return List of ScmVersion list.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    60
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    61
    public List<ScmVersion> getScmVersion()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    62
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    63
        return scmVersionList;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    64
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    65
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    66
    /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    67
    * Added tbranch\tag\revision and changed format to match "hg log --verbose" output. 
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    68
    * File version has been removed, showing only file name
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    69
    * @return String to output the VersionChangeSet result
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    70
    */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    71
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    72
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    73
    public String toString()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    74
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    75
        String result = "";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    76
        for (ScmVersion versions : getScmVersion()) {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    77
            if (!versions.getName().equals("")) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
    78
                result += versions.getType().toLowerCase() + ":" + versions.getName() + "\n";
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    79
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    80
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    81
        if (getAuthor() != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    82
            result += "user:" + getAuthor() + "\n";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    83
        }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    84
        if (getDate() != null) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    85
            result += "date:" + getDate() + "\n";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    86
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    87
        List<ChangeFile> files = getFiles();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    88
        if ( files.size() != 0 ) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    89
            result += "files:";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    90
            for ( ChangeFile changeFile : files ) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    91
                result += changeFile.getName() + " ";
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    92
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    93
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    94
        if (!getComment().equals("")) {
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    95
            result += "\ndescription:" + getComment() + "\n";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    96
        }
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    97
        return result;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    98
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
    99
    
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   100
     /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   101
     * Provide the changelog entry as an XML snippet.
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   102
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   103
     * @return a changelog-entry in xml format
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   104
     * @task make sure comment doesn't contain CDATA tags - MAVEN114
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   105
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   106
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   107
    @SuppressWarnings("unchecked")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   108
    @Override
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   109
    public String toXML()
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   110
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   111
        StringBuffer buffer = new StringBuffer();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   112
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   113
        buffer.append( "\t<changelog-entry>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   114
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   115
        if ( getDate() != null )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   116
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   117
            buffer.append( "\t\t<date pattern=\"" + getDateFormatted() + "\">" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   118
                .append( getDateFormatted() )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   119
                .append( "</date>\n" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   120
                .append( "\t\t<time pattern=\"" + TIME_PATTERN + "\">" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   121
                .append( getTimeFormatted() )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   122
                .append( "</time>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   123
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   124
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   125
        for (ScmVersion versions : getScmVersion()) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   126
            if (!versions.getName().equals("")) 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   127
            {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   128
                buffer.append("\t\t<" + versions.getType().toLowerCase() + ">\n")
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   129
                     .append("\t\t\t<name>")
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   130
                     .append(versions.getName())
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   131
                     .append("</name>\n");
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents: 587
diff changeset
   132
                buffer.append("\t\t</" + versions.getType().toLowerCase() + ">\n");
587
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   133
            }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   134
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   135
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   136
        buffer.append( "\t\t<author><![CDATA[" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   137
            .append( getAuthor() )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   138
            .append( "]]></author>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   139
        
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   140
        List<ChangeFile> changeFiles = getFiles();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   141
        for ( ChangeFile changeFile :  changeFiles)
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   142
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   143
            buffer.append( "\t\t<file>\n" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   144
                .append( "\t\t\t<name>" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   145
                .append( escapeValue( changeFile.getName() ) )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   146
                .append( "</name>\n" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   147
                .append( "\t\t\t<revision>" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   148
                .append( changeFile.getRevision() )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   149
                .append( "</revision>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   150
            buffer.append( "\t\t</file>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   151
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   152
        buffer.append( "\t\t<msg><![CDATA[" )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   153
            .append( removeCDataEnd( getComment() ) )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   154
            .append( "]]></msg>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   155
        buffer.append( "\t</changelog-entry>\n" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   156
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   157
        return buffer.toString();
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   158
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   159
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   160
     /**
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   161
     * remove a <code>]]></code> from comments (replace it with <code>] ] ></code>).
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   162
     *
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   163
     * @param message The message to modify
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   164
     * @return a clean string
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   165
     */
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   166
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   167
    private String removeCDataEnd( String message )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   168
    {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   169
        // check for invalid sequence ]]>
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   170
        int endCdata;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   171
        while ( message != null && ( message.indexOf( "]]>" ) ) > -1 )
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   172
        {
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   173
            endCdata = message.indexOf( "]]>" );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   174
            message = message.substring( 0, endCdata ) + "] ] >" + message.substring( endCdata + 3, message.length() );
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   175
        }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   176
        return message;
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   177
    }
85df38eb4012 helium_9.0-a7879c935424
wbernard
parents:
diff changeset
   178
}