buildframework/helium/sf/java/scm/src/com/nokia/helium/scm/ant/actions/ChangelogAction.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:
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     1
/*
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     2
 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     3
 * All rights reserved.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     8
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
     9
 * Initial Contributors:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    11
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    12
 * Contributors:
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    13
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    14
 * Description:  
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    15
 *
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    16
 */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    17
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    18
package com.nokia.helium.scm.ant.actions;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    19
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    20
import java.io.BufferedWriter;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    21
import java.io.File;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    22
import java.io.FileWriter;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    23
import java.io.IOException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    24
import java.text.ParseException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    25
import java.text.SimpleDateFormat;
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    26
import java.util.Date;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    27
import java.util.Iterator;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    28
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    29
import org.apache.maven.scm.ChangeSet;
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    30
import org.apache.maven.scm.ScmException;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    31
import org.apache.maven.scm.ScmRevision;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    32
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    33
import org.apache.maven.scm.command.changelog.ChangeLogSet;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    34
import org.apache.maven.scm.manager.ScmManager;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    35
import org.apache.maven.scm.repository.ScmRepository;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    36
import org.apache.tools.ant.BuildException;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    37
import org.dom4j.Document;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    38
import org.dom4j.DocumentException;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    39
import org.dom4j.Element;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    40
import org.dom4j.io.SAXReader;
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    41
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    42
/**
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    43
 * Get change log within a date range i.e startDate and endDate; OR get change log of a number of
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    44
 * days i.e numDays OR get change log within a range of starVersion and endVersion Parameters either
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    45
 * startDate="20090317 18:49:31" endDate="20090318 24:49:31" datePattern="yyyyMMdd HH:mm:ss" Or
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    46
 * numDays='1' Or startVersion="1" endVersion="2" Add logOutput="xml" to output log in xml format
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    47
 * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    48
 * <pre>
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    49
 * &lt;hlm:scm verbose="false" scmUrl="scm:hg:${repo.dir}/changelog"&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    50
 *     &lt;hlm:changelog basedir="${repo.dir}/changelog" startVersion="1" endVersion="2"/&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    51
 *     &lt;hlm:changelog baseDir="${repo.dir}/changelog" numDays='1' /&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    52
 * &lt;/hlm:scm&gt;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    53
 * </pre>
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    54
 * 
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    55
 * @ant.type name="changelog" category="SCM"
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    56
 */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    57
public class ChangelogAction extends BaseDirectoryScmAction {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    58
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    59
    private String startDate;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    60
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    61
    private String endDate;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    62
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    63
    private String datePattern;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    64
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    65
    private String logOutput;
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
    66
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    67
    private int numDays;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    68
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    69
    private String startVersion;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    70
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    71
    private String endVersion;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    72
    private File xmlbom;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    73
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    74
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    75
     * Start version
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    76
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    77
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    78
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    79
    public void setStartVersion(String startVersion) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    80
        this.startVersion = startVersion;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    81
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    82
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    83
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    84
     * End version
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    85
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    86
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    87
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    88
    public void setEndVersion(String endVersion) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    89
        this.endVersion = endVersion;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    90
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    91
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    92
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    93
     * Start date
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    94
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    95
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    96
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    97
    public void setStartDate(String startDate) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    98
        this.startDate = startDate;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
    99
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   100
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   101
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   102
     * End date
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   103
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   104
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   105
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   106
    public void setEndDate(String endDate) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   107
        this.endDate = endDate;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   108
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   109
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   110
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   111
     * Number of days
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   112
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   113
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   114
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   115
    public void setNumDays(int numDays) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   116
        this.numDays = numDays;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   117
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   118
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   119
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   120
     * Date pattern default is EEE MMM dd HH:mm:ss yyyy Z
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   121
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   122
     * @ant.not-required
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   123
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   124
    public void setDatePattern(String datePattern) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   125
        this.datePattern = datePattern;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   126
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   127
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   128
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   129
     * Output pattern default is log output, to get xml output set logoutput=xml
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   130
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   131
     * @ant.not-required
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   132
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   133
    public void setLogOutput(String logOutput) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   134
        this.logOutput = logOutput;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   135
    }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   136
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   137
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   138
     * File for xml output of changeset list
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   139
     * 
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   140
     * @ant.not-required
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   141
     */
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   142
    public void setXmlbom(File xmlbom) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   143
        this.xmlbom = xmlbom;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   144
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   145
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   146
    /**
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   147
     * {@inheritDoc}
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   148
     */
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   149
    @SuppressWarnings("unchecked")
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   150
    @Override
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   151
    public void execute(ScmRepository repository) throws ScmException {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   152
        ScmManager scmManager = getTask().getScmManager();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   153
        ScmRevision startRevision = new ScmRevision(startVersion);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   154
        ScmRevision endRevision = new ScmRevision(endVersion);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   155
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   156
        ChangeLogScmResult result;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   157
        Date start = null;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   158
        Date end = null;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   159
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   160
        if (numDays == 0 && (startDate != null || endDate != null)) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   161
            try {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   162
                SimpleDateFormat format = new SimpleDateFormat(datePattern);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   163
                start = format.parse(startDate);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   164
                end = format.parse(endDate);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   165
            }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   166
            catch (ParseException e) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   167
                throw new ScmException("Date Format not supported:" + e.getMessage());
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   168
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   169
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   170
        else {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   171
            start = null;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   172
            end = null;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   173
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   174
        try {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   175
            if (startVersion == null) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   176
                result = scmManager.changeLog(repository, getScmFileSet(), start, end, numDays, null, datePattern);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   177
            } else {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   178
                result = scmManager.changeLog(repository, getScmFileSet(), startRevision, endRevision, datePattern);
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   179
            }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   180
        }
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   181
        catch (ScmException e) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   182
            throw new BuildException("Execution of SCM changelog action failed.");
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   183
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   184
        if (!result.isSuccess()) {
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   185
            throw new BuildException("SCM changelog command unsuccessful.");
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   186
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   187
        // Output changelog information
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   188
        ChangeLogSet changelogSet = result.getChangeLog();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   189
        if (logOutput != null && logOutput.equals("xml")) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   190
            getTask().log(changelogSet.toXML());
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   191
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   192
        else if (xmlbom != null) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   193
            String output = "";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   194
            for (Object object : changelogSet.getChangeSets()) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   195
                String revision = "";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   196
                ChangeSet changeSet = (ChangeSet) object;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   197
                for (String line : changeSet.toString().split("\n")) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   198
                    if (line.contains("revision:")) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   199
                        revision = line.replace("revision:", "");
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   200
                    }
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   201
                }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   202
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   203
                output = output + "<task><id>" + revision + "</id><synopsis>"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   204
                    + changeSet.getComment() + "</synopsis><completed>"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   205
                    + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(changeSet.getDate())
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   206
                    + "</completed></task>";
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   207
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   208
            String[] path = getTask().getScmUrl().split("/");
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   209
            String xml = "<bom><build>untitled</build><content>\n";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   210
            String thisproject = "<project>" + "<name>" + path[path.length - 1] + "</name>"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   211
                + "<baseline>" + getTask().getScmUrl() + "</baseline>"
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   212
                + "<database>mercurial</database>" + output + "</project>\n";
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   213
            xml = xml + thisproject;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   214
            try {
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   215
                if (xmlbom.exists()) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   216
                    SAXReader xmlReader = new SAXReader();
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   217
                    Document antDoc = xmlReader.read(xmlbom);
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   218
                    for (Iterator iterator = antDoc.selectNodes("//project").iterator(); iterator.hasNext();) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   219
                        boolean equal = false;
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   220
                        Element element = (Element) iterator.next();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   221
                        for (Iterator iterator2 = antDoc.selectNodes("//baseline").iterator(); iterator2.hasNext();) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   222
                            Element e2 = (Element) iterator2.next();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   223
                            if (e2.getText().equals(getTask().getScmUrl())) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   224
                                equal = true;
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   225
                            }
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   226
                        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   227
                        if (!equal) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   228
                            xml = xml + element.asXML() + "\n";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   229
                        }
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   230
                    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   231
                }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   232
                xml = xml + "</content></bom>";
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   233
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   234
                FileWriter fstream = new FileWriter(xmlbom);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   235
                BufferedWriter out = new BufferedWriter(fstream);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   236
                out.write(xml);
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   237
                out.close();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   238
            } catch (DocumentException e) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   239
                e.printStackTrace();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   240
            } catch (IOException e) {
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   241
                e.printStackTrace();
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   242
            }
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   243
        }
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   244
        else {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   245
            Iterator iterator = changelogSet.getChangeSets().iterator();
628
7c4a911dc066 helium_11.0.0-e00f171ca185
wbernard
parents: 588
diff changeset
   246
            while (iterator.hasNext()) {
588
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   247
                getTask().log(iterator.next().toString());
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   248
            }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   249
        }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   250
    }
c7c26511138f helium-10.0.0-bc45d50958fe
wbernard
parents:
diff changeset
   251
}