r86 - in maven-redmine-plugin/trunk: . src/main/java/org/nuiton/redmine src/main/java/org/nuiton/redmine/model src/main/java/org/nuiton/redmine/model/io/xpp3 src/main/java/org/nuiton/redmine/plugin src/main/java/org/nuiton/redmine/plugin/report src/main/resources src/main/resources/META-INF src/main/resources/META-INF/plexus src/main/resources/META-INF/services src/test/java/org/nuiton/redmine src/test/java/org/nuiton/redmine/model src/test/java/org/nuiton/redmine/model/io src/test/java/or
Author: tchemit Date: 2009-09-12 00:10:54 +0200 (Sat, 12 Sep 2009) New Revision: 86 Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/DataNotFoundException.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssueCollectorConfiguration.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssuesCollector.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfiguration.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfigurationHelper.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataException.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataHelper.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataProvider.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataType.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/I18nAble.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IdAble.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueCategory.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssuePriority.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueStatus.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueCategoryXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssuePriorityXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueStatusXpp3Reader.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3Helper.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DisplayDataMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DownloadDataMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractIssuesReport.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractRedmineReport.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssueReportGenerator.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReport.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByAssignee.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByCategory.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByPriority.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByReporter.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByStatus.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByTracker.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByVersion.java maven-redmine-plugin/trunk/src/main/resources/META-INF/plexus/ maven-redmine-plugin/trunk/src/main/resources/META-INF/plexus/components.xml maven-redmine-plugin/trunk/src/main/resources/redmine-report.properties maven-redmine-plugin/trunk/src/main/resources/redmine-report_de.properties maven-redmine-plugin/trunk/src/main/resources/redmine-report_en.properties maven-redmine-plugin/trunk/src/main/resources/redmine-report_fr.properties maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineDataProviderTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/SimpleRedmineConfiguration.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/TestHelper.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DisplayDataMojoTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DownloadDataMojoTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/AbstractIssuesReportTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportTest.java maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/version.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/project.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/versions.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/versions.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/versions.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/versions.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/attachment.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/issue.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/project.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/tracker.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/user.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/version.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-all.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-priorities.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-statuses.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-issue-categories.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-all.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-priorities.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-statuses.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-issue-categories.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-trackers.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-users.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-versions.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project2.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-projects.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-attachments.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-issues.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest/issues-report.xml maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/issues-report.xml Removed: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineModelBuilder.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractGetProjectDataMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DataNotFoundException.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectDataMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/RedmineReportMojo.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineModelBuilderTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/AbstractRedmineMojoTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectDataMojoTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojoTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/RedmineReportMojoTest.java Modified: maven-redmine-plugin/trunk/pom.xml maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineSession.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractRedmineMojo.java maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GenerateChangesMojo.java maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineSessionTest.java maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GenerateChangesMojoTest.java maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/GenerateChangesMojoTest/generate-changes.xml Log: redmine issue report generation ok Modified: maven-redmine-plugin/trunk/pom.xml =================================================================== --- maven-redmine-plugin/trunk/pom.xml 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/pom.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -6,13 +6,13 @@ <!-- ************************************************************* --> <!-- *** POM Relationships *************************************** --> <!-- ************************************************************* --> - + <groupId>org.nuiton</groupId> <artifactId>maven-redmine-plugin</artifactId> <version>1.0.0-SNAPSHOT</version> <dependencies> - + <dependency> <groupId>org.nuiton</groupId> <artifactId>maven-helper-plugin</artifactId> @@ -57,7 +57,7 @@ <artifactId>httpclient</artifactId> <version>4.0</version> </dependency> - + <!-- tests dependencies --> <dependency> @@ -92,7 +92,7 @@ <description>A plugin to interacts with Redmine's server</description> <inceptionYear>2009</inceptionYear> - + <url>http://maven-site.nuiton.org/sandbox/maven-redmine-plugin</url> <licenses> @@ -122,7 +122,7 @@ <name>CodeLutin</name> <url>http://www.codelutin.com/</url> </organization> - + <!-- ************************************************************* --> <!-- *** Build Settings ****************************************** --> <!-- ************************************************************* --> @@ -195,12 +195,12 @@ <!-- generated changes.xml file --> <maven.changeFile>${maven.gen.dir}/changes/changes.xml</maven.changeFile> - + </properties> <build> <defaultGoal>install</defaultGoal> - + <plugins> <plugin> @@ -219,7 +219,7 @@ </execution> </executions> </plugin> - + <plugin> <artifactId>maven-plugin-plugin</artifactId> <executions> @@ -261,6 +261,12 @@ <skip>${maven.test.skip}</skip> <testFailureIgnore>${maven.test.testFailureIgnore}</testFailureIgnore> <forkMode>${maven.test.forkMode}</forkMode> + <environmentVariables> + <redmineUrl>http://www.mynuiton.org</redmineUrl> + <redmineUsername>chemit</redmineUsername> + <redminePassword>azer</redminePassword> + <verbose>false</verbose> + </environmentVariables> </configuration> </plugin> @@ -487,7 +493,7 @@ </plugin--> </plugins> </reporting> - + <!-- ************************************************************* --> <!-- *** Build Environment ************************************** --> <!-- ************************************************************* --> @@ -537,5 +543,41 @@ <developerConnection>scm:svn:http://svn.nuiton.org/svn/sandbox/maven-redmine-plugin/trunk</developerConnection> <url>http://www.nuiton.org/repositories/browse/sandbox/maven-redmine-plugin/trunk</url> </scm> - + + <profiles> + <profile> + <id>run-its</id> + <build> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <version>1.3</version> + <configuration> + <pomIncludes> + <pomInclude>*/pom.xml</pomInclude> + </pomIncludes> + <postBuildHookScript>verify</postBuildHookScript> + <localRepositoryPath>${basedir}/target/local-repo</localRepositoryPath> + <goals> + <goal>clean</goal> + <goal>site</goal> + </goals> + <settingsFile>src/it/settings.xml</settingsFile> + <cloneProjectsTo>${project.build.directory}/its</cloneProjectsTo> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>install</goal> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> + </project> Copied: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/DataNotFoundException.java (from rev 31, maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DataNotFoundException.java) =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/DataNotFoundException.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/DataNotFoundException.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,27 @@ +package org.nuiton.redmine; + +/** + * An exception to throw when a data does not exists on redmine. + * + * @author chemit + * @since 1.0.0 + */ +public class DataNotFoundException extends Exception { + + private static final long serialVersionUID = 1L; + + public DataNotFoundException(Throwable cause) { + super(cause); + } + + public DataNotFoundException(String message, Throwable cause) { + super(message, cause); + } + + public DataNotFoundException(String message) { + super(message); + } + + public DataNotFoundException() { + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/DataNotFoundException.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssueCollectorConfiguration.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssueCollectorConfiguration.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssueCollectorConfiguration.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +package org.nuiton.redmine; + +/** + * A simple contract to define the configuration of an issues collector. + * + * TODO javadoc + * + * @author chemit + * @since 1.0.0 + */ +public interface IssueCollectorConfiguration { + + boolean isOnlyCurrentVersion(); + + int getMaxEntries(); + + String getVersionNames(); + + String getPriorityIds(); + + String getStatusIds(); + + String getProjectId(); + + String getVersionId(); + + void setVersionId(String versionId); + + String getCategoryIds(); + + String getTrackerIds(); +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssueCollectorConfiguration.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssuesCollector.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssuesCollector.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssuesCollector.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,334 @@ +package org.nuiton.redmine; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.apache.maven.plugin.logging.Log; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import org.nuiton.redmine.model.IssuePriority; +import org.nuiton.redmine.model.IssueStatus; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.Version; + +/** + * A class to collect some issues due to given filters. + * + * @author chemit + * @since 1.0.0 + */ +public class IssuesCollector { + + /** + * data helper + */ + protected final RedmineDataHelper helper; + /** + * logger + */ + protected final Log log; + /** + * verbose flag + */ + protected final boolean verbose; + /** + * to restrict on number of entries to collect + */ + protected Integer maxEntries; + /** + * the list of version ids collected + */ + protected List<Integer> versionIds; + /** + * the list of priority ids collected + */ + protected List<Integer> priorityIds; + /** + * the list of status ids collected + */ + protected List<Integer> statusIds; + /** + * the list of category ids collected + */ + protected List<Integer> categoryIds; + /** + * the list of tracker ids collected + */ + protected List<Integer> trackerIds; + /** + * the list of issues collected + */ + protected Issue[] issues; + + public IssuesCollector(RedmineDataHelper helper, Log log, boolean verbose) { + this.helper = helper; + this.log = log; + this.verbose = verbose; + } + + /** + * Collects the issues given the configuration passed. + * + * @param config the collector configuration + * + * @throws RedmineDataException if any pb while retreave datas from redmine + */ + public void collect(IssueCollectorConfiguration config) throws RedmineDataException { + + clearFilters(); + + prepareFilters(config); + + // obtain versions to treate + + Version[] versions; + + if (versionIds == null) { + // pas de filtre sur version + versions = helper.getVersions(); + } else { + versions = helper.getVersionsById(versionIds.toArray(new Integer[versionIds.size()])); + } + + int nbIssues = 0; + + List<Issue> issueList = new ArrayList<Issue>(); + + for (Version v : versions) { + + if (verbose) { + log.info("discover all issues for version " + v.getName()); + } + + helper.setVersionId(v.getName()); + + Issue[] currentIssues = helper.getIssues(true); + for (Issue i : currentIssues) { + + if (canIncludeIssue(i)) { + issueList.add(i); + nbIssues++; + if (maxEntries != null && nbIssues >= maxEntries) { + break; + } + } + } + if (maxEntries != null && nbIssues >= maxEntries) { + break; + } + } + + issues = issueList.toArray(new Issue[issueList.size()]); + } + + public Integer getMaxEntries() { + return maxEntries; + } + + public List<Integer> getPriorityIds() { + return priorityIds; + } + + public List<Integer> getStatusIds() { + return statusIds; + } + + public List<Integer> getCategoryIds() { + return categoryIds; + } + + public List<Integer> getVersionIds() { + return versionIds; + } + + public List<Integer> getTrackerIds() { + return trackerIds; + } + + public Issue[] getIssues() { + return issues; + } + + /** + * clean all internal states. + * + * Note : this method is invoked at the begin of each + * {@link #collect(org.nuiton.redmine.IssueCollectorConfiguration)} method. + */ + public void clearFilters() { + maxEntries = null; + priorityIds = null; + statusIds = null; + categoryIds = null; + trackerIds = null; + versionIds = null; + issues = null; + } + + /** + * Prepare the collector filters due to the given collector configuration. + * + * @param config the collector configuration + * @throws RedmineDataException if any pb whiile retreaving redmine's datas + */ + protected void prepareFilters(IssueCollectorConfiguration config) throws RedmineDataException { + + // maxEntries filter + + maxEntries = config.getMaxEntries(); + if (maxEntries == 0) { + // no limit + maxEntries = null; + } else { + log.info("limit issues : " + maxEntries); + } + + String tmp; + + // filter version + + tmp = config.getVersionNames(); + if (log.isDebugEnabled()) { + log.debug("version to filter : " + tmp); + } + if (tmp != null && !tmp.trim().isEmpty()) { + if (config.isOnlyCurrentVersion()) { + // not possible + log.warn("will not filter on versions while using the flag 'onlyCurrentVersion'"); + } else { + versionIds = new ArrayList<Integer>(); + List<String> svs = Arrays.asList(tmp.split(",")); + for (Version v : helper.getVersions()) { + if (svs.contains(v.getName())) { + // keep the version + versionIds.add(v.getId()); + log.info("use version " + v.getName()); + } + } + } + } + + if (config.isOnlyCurrentVersion()) { + Version currentVersion = helper.getVersionByName(config.getVersionId()); + versionIds = Arrays.asList(currentVersion.getId()); + } + + // filter status + + tmp = config.getStatusIds(); + this.statusIds = null; + if (tmp != null && !tmp.trim().isEmpty()) { + // filter on status + this.statusIds = new ArrayList<Integer>(); + List<Integer> svs = toIntegerList(tmp.split(",")); + for (IssueStatus s : helper.getIssueSatuses()) { + int id = s.getId(); + if (svs.contains(id)) { + // keep this status + this.statusIds.add(id); + log.info("use status " + s.getName()); + } + } + } + + // filter priority + + tmp = config.getPriorityIds(); + if (tmp != null && !tmp.trim().isEmpty()) { + // filter on status + this.priorityIds = new ArrayList<Integer>(); + List<Integer> svs = toIntegerList(tmp.split(",")); + for (IssuePriority s : helper.getIssuePriorities(true)) { + int id = s.getId(); + if (svs.contains(id)) { + // keep this status + this.priorityIds.add(id); + log.info("use priority " + s.getName()); + } + } + } + + // filter priority + + tmp = config.getCategoryIds(); + if (tmp != null && !tmp.trim().isEmpty()) { + // filter on status + this.categoryIds = new ArrayList<Integer>(); + List<Integer> svs = toIntegerList(tmp.split(",")); + for (IssueCategory s : helper.getIssueCategories()) { + int id = s.getId(); + if (svs.contains(id)) { + // keep this status + this.categoryIds.add(id); + log.info("use category " + s.getName()); + } + } + } + + // filter tracker + tmp = config.getTrackerIds(); + if (tmp != null && !tmp.trim().isEmpty()) { + // filter on status + this.trackerIds = new ArrayList<Integer>(); + List<Integer> svs = toIntegerList(tmp.split(",")); + for (Tracker s : helper.getTrackers()) { + int id = s.getId(); + if (svs.contains(id)) { + // keep this status + this.trackerIds.add(id); + log.info("use tracker " + s.getName()); + } + } + } + } + + /** + * Test if a given issue can be collected. + * + * @param i the issue ti test + * @return <code>true</code> if the issue can be collected, <code>false</code> + * otherwise. + */ + protected boolean canIncludeIssue(Issue i) { + if (statusIds != null) { + // filter on status + if (!statusIds.contains(i.getStatusId())) { + // reject status + return false; + } + } + if (priorityIds != null) { + // filter on priority + if (!priorityIds.contains(i.getPriorityId())) { + // reject priority + return false; + } + } + if (categoryIds != null) { + // filter on category + if (!categoryIds.contains(i.getCategoryId())) { + // reject category + return false; + } + } + if (trackerIds != null) { + // filter on tracker + if (!trackerIds.contains(i.getTrackerId())) { + // reject tracker + return false; + } + } + + // ok + return true; + } + + protected List<Integer> toIntegerList(String[] strIds) { + int length = strIds.length; + List<Integer> r = new ArrayList<Integer>(length); + for (int i = 0; i < length; i++) { + r.add(Integer.valueOf(strIds[i])); + } + return r; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/IssuesCollector.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfiguration.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfiguration.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfiguration.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,45 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.net.URL; + +/** + * A simple contract to define the configuration used. + * + * @author chemit + * @since 1.0.0 + */ +public interface RedmineConfiguration { + + URL getRedmineUrl(); + + String getEncoding(); + + String getRedmineUsername(); + + String getRedminePassword(); + + File getLocalDir(); + + boolean isOffline(); + + boolean isOverwrite(); + + boolean isVerbose(); + + void setRedmineUrl(URL redmineUrl); + + void setRedminePassword(String redminePassword); + + void setRedmineUsername(String redmineUsername); + + void setEncoding(String encoding); + + void setLocalDir(File localDir); + + void setOffline(boolean offline); + + void setOverwrite(boolean overwrite); + + void setVerbose(boolean verbose); +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfiguration.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfigurationHelper.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfigurationHelper.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfigurationHelper.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,179 @@ +package org.nuiton.redmine; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import org.apache.commons.httpclient.HttpMethod; +import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.StatusLine; +import org.apache.maven.model.IssueManagement; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.settings.Server; +import org.apache.maven.settings.Settings; +import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; +import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; + +/** + * Helper to build configurations and other objects (session, data provider). + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineConfigurationHelper { + + public static final String SNAPSHOT_SUFFIX = "-SNAPSHOT"; + public static final String REDMINE_SYSTEM = "redmine"; + + public static String removeSnapshotSuffix(String versionId) { + if (versionId.endsWith(SNAPSHOT_SUFFIX)) { + // remove snapshot suffix + versionId = versionId.substring(0, versionId.length() - SNAPSHOT_SUFFIX.length()); + } + return versionId; + } + + public static RedmineDataProvider initDataProvider(RedmineConfiguration config, Log log, String serverId, Settings settings, IssueManagement issueManagement, SecDispatcher sec) throws Exception { + + try { + + prepareConfiguration(config, serverId, settings, issueManagement, sec); + + } catch (Exception e) { + log.error("could not prepare redmine configuration for reason : " + e.getMessage(), e); + throw e; + } + + RedmineSession session = null; + + if (config.isOffline()) { + log.info("offline is on, no session to redmine can not be reach."); + } else { + try { + + session = openSession(config, log); + + } catch (Exception e) { + log.error("could not open session to redmin server for reason : " + e.getMessage(), e); + throw e; + } + } + + try { + RedmineDataProvider dataProvider = newDataProvider(config, session, log); + + return dataProvider; + } catch (Exception e) { + log.error("could not prepare redmine local store for reason : " + e.getMessage(), e); + throw e; + } + } + + public static void prepareConfiguration(RedmineConfiguration config, String serverId, Settings settings, IssueManagement issueManagement, SecDispatcher sec) throws MojoExecutionException, MalformedURLException { + URL redmineUrl = config.getRedmineUrl(); + String redmineUsername = config.getRedmineUsername(); + String redminePassword = config.getRedminePassword(); + + String system = issueManagement.getSystem(); + if (!REDMINE_SYSTEM.equals(system)) { + throw new MojoExecutionException("must use a redmine issueManagment system, but found : " + system); + } + + if (redmineUrl == null || redmineUrl.toString().isEmpty()) { + + // no redmine url specified, guess it from issueManagement + + String url = issueManagement.getUrl(); + redmineUrl = new URL(url); + config.setRedmineUrl(redmineUrl); + } + + if (redmineUsername == null || redmineUsername.trim().isEmpty() || redminePassword == null || redminePassword.trim().isEmpty()) { + + // guess login and password from server in settings + + Server server = settings.getServer(serverId); + if (server == null) { + throw new MojoExecutionException("could not find serverId " + serverId); + } + redmineUsername = server.getUsername(); + redminePassword = server.getPassword(); + try { + redminePassword = sec.decrypt(redminePassword); + config.setRedmineUsername(redmineUsername); + config.setRedminePassword(redminePassword); + } catch (SecDispatcherException ex) { + throw new MojoExecutionException("could not decrypt password", ex); + } + } + } + + public static RedmineSession openSession(RedmineConfiguration config, Log log) throws MojoExecutionException { + RedmineSession session = null; + + URL redmineUrl = config.getRedmineUrl(); + String username = config.getRedmineUsername(); + String password = config.getRedminePassword(); + boolean verbose = config.isVerbose(); + + try { + + session = new RedmineSession(log, redmineUrl, verbose); + + // ask rest/ping service a ping + + try { + String content = session.askData(new String[]{"rest", "ping"}); + + boolean ok = "ping".equals(content); + if (!ok) { + throw new IOException("can not connect to " + redmineUrl); + } + } catch (IOException ex) { + throw ex; + } catch (DataNotFoundException ex) { + // should never happeds + log.error(ex.getMessage()); + } + + // ask rest/login a connection + + String uri = session.getUri("rest", "login"); + + HttpMethod gm = session.doRequest(uri, "username", username, "password", password); + + StatusLine sl = gm.getStatusLine(); + int statusCode = sl.getStatusCode(); + if (log.isDebugEnabled()) { + log.debug("status code " + statusCode + " for " + gm.getPath()); + } + + if (statusCode != HttpStatus.SC_OK) { + gm.releaseConnection(); + throw new IOException("Got error code <" + statusCode + ":" + sl.getReasonPhrase() + "> on " + gm.getPath()); + } + + // ok session is logged in + + session.login = true; + + // auth to redmine is ok + if (verbose) { + log.info("authentication to " + redmineUrl + " done for " + username); + } + + } catch (Exception e) { + throw new MojoExecutionException("Unable to login to <" + redmineUrl + "> with user <" + username + ">", e); + } + return session; + } + + public static RedmineDataProvider newDataProvider(RedmineConfiguration config, RedmineSession session, Log log) { + + RedmineDataProvider store = new RedmineDataProvider(config.getEncoding(), log, config.getLocalDir(), session); + store.setOffline(config.isOffline()); + store.setOverwrite(config.isOverwrite()); + + return store; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineConfigurationHelper.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataException.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataException.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataException.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,28 @@ +package org.nuiton.redmine; + +/** + * An exception to throw when a data can not be retreave in + * {@link RedmineModelHelper}. + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineDataException extends Exception { + + private static final long serialVersionUID = 1L; + + public RedmineDataException(Throwable cause) { + super(cause); + } + + public RedmineDataException(String message, Throwable cause) { + super(message, cause); + } + + public RedmineDataException(String message) { + super(message); + } + + public RedmineDataException() { + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataException.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataHelper.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataHelper.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataHelper.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,294 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.io.IOException; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.nuiton.redmine.model.Attachment; +import org.nuiton.redmine.model.IdAble; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import org.nuiton.redmine.model.IssuePriority; +import org.nuiton.redmine.model.IssueStatus; +import org.nuiton.redmine.model.Project; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; + +/** + * A helper to filter datas from a {@link RedminDataProvider}. + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineDataHelper { + + protected String projectId; + protected String versionId; + protected final RedmineDataProvider dataProvider; + + public RedmineDataHelper(RedmineDataProvider store) { + this.dataProvider = store; + } + + public String getProjectId() { + return projectId; + } + + public String getVersionId() { + return versionId; + } + + public boolean isOverwrite() { + return dataProvider.isOverwrite(); + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + public Attachment[] getAttachments() throws RedmineDataException { + return getAttachments(isOverwrite()); + } + + public Issue[] getIssues() throws RedmineDataException { + return getIssues(isOverwrite()); + } + + public IssueCategory[] getIssueCategories() throws RedmineDataException { + return getIssueCategories(isOverwrite()); + } + + public IssueStatus[] getIssueSatuses() throws RedmineDataException { + return getIssueSatuses(isOverwrite()); + } + + public IssuePriority[] getIssuePriorities() throws RedmineDataException { + return getIssuePriorities(isOverwrite()); + } + + public Project[] getProjects() throws RedmineDataException { + return getProjects(isOverwrite()); + } + + public Project getProject() throws RedmineDataException { + return getProject(isOverwrite()); + } + + public Tracker[] getTrackers() throws RedmineDataException { + return getTrackers(isOverwrite()); + } + + public User[] getUsers() throws RedmineDataException { + return getUsers(isOverwrite()); + } + + public Version[] getVersions() throws RedmineDataException { + return getVersions(isOverwrite()); + } + + public Version[] getVersionsById(Integer... ids) throws RedmineDataException { + return getDatasById(Version.class, projectId, versionId, isOverwrite(), ids); + } + + public Version getVersion() throws RedmineDataException { + return getVersion(isOverwrite()); + } + + public Version getVersionByName(String versionName) throws RedmineDataException { + return getVersionByName(isOverwrite(), versionName); + } + + public Version getVersionById(int versionId) throws RedmineDataException { + return getVersionById(isOverwrite(), versionId); + } + + public User getUserByLogin(String login) throws RedmineDataException { + return getUserByLogin(isOverwrite(), login); + } + + public User getUserById(int userId) throws RedmineDataException { + return getUserById(isOverwrite(), userId); + } + + public Attachment[] getAttachments(boolean reload) throws RedmineDataException { + return getDatas(Attachment.class, projectId, versionId, reload); + } + + public Issue[] getIssues(boolean reload) throws RedmineDataException { + return getDatas(Issue.class, projectId, versionId, reload); + } + + public IssueCategory[] getIssueCategories(boolean reload) throws RedmineDataException { + return getDatas(IssueCategory.class, projectId, null, reload); + } + + public IssueStatus[] getIssueSatuses(boolean reload) throws RedmineDataException { + return getDatas(IssueStatus.class, null, null, reload); + } + + public IssuePriority[] getIssuePriorities(boolean reload) throws RedmineDataException { + return getDatas(IssuePriority.class, null, null, reload); + } + + public Project[] getProjects(boolean reload) throws RedmineDataException { + return getDatas(Project.class, projectId, null, reload); + } + + public Project getProject(boolean reload) throws RedmineDataException { + return getData(Project.class, projectId, null, reload); + } + + public Tracker[] getTrackers(boolean reload) throws RedmineDataException { + return getDatas(Tracker.class, projectId, null, reload); + } + + public User[] getUsers(boolean reload) throws RedmineDataException { + return getDatas(User.class, projectId, null, reload); + } + + public Version[] getVersions(boolean reload) throws RedmineDataException { + return getDatas(Version.class, projectId, null, reload); + } + + public Version[] getVersionsById(boolean reload, Integer... ids) throws RedmineDataException { + return getDatasById(Version.class, projectId, versionId, reload, ids); + } + + public Version getVersion(boolean reload) throws RedmineDataException { + return getData(Version.class, projectId, versionId, reload); + } + + public Version getVersionByName(boolean reload, String versionName) throws RedmineDataException { + Version[] list = getDatas(Version.class, projectId, versionId, reload); + Version result = Version.getVersionByName(list, versionName); + return result; + } + + public Version getVersionById(boolean reload, int versionId) throws RedmineDataException { + Version[] list = getDatas(Version.class, projectId, this.versionId, reload); + Version result = Version.getVersionById(list, versionId); + return result; + } + + public User getUserByLogin(boolean reload, String login) throws RedmineDataException { + User[] list = getDatas(User.class, projectId, versionId, reload); + User result = User.getUserByLogin(login, list); + return result; + } + + public User getUserById(boolean reload, int userId) throws RedmineDataException { + User[] list = getDatas(User.class, projectId, versionId, reload); + User result = User.getUserById(userId, list); + return result; + } + + public File uptodateLocalDataFile(RedmineDataType cste) throws RedmineDataException { + + try { + File f = dataProvider.uptodateLocalDataFile(cste, projectId, versionId); + return f; + } catch (DataNotFoundException ex) { + throw new RedmineDataException("could not update local store for type " + cste + " for reason " + ex.getMessage(), ex); + } catch (IOException ex) { + throw new RedmineDataException("could not update local store for type " + cste + " for reason " + ex.getMessage(), ex); + } + } + + public <T extends IdAble> T[] getDatasById(Class<T> type, String projectId, String versionId, boolean reload, Integer... ids) throws RedmineDataException { + if (dataProvider.isOffline()) { + // can not reload data + reload = false; + } + boolean old = dataProvider.isOverwrite(); + if (reload) { + dataProvider.setOverwrite(true); + } + try { + + T[] datas = dataProvider.getDataByIds(type, projectId, versionId, ids); + return datas; + } catch (IOException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (XmlPullParserException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (DataNotFoundException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } finally { + if (reload) { + dataProvider.setOverwrite(old); + } + } + + } + + public <T extends IdAble> T[] getDatas(Class<T> type, String projectId, String versionId, boolean reload) throws RedmineDataException { + if (dataProvider.isOffline()) { + // can not reload data + reload = false; + } + boolean old = dataProvider.isOverwrite(); + if (reload) { + dataProvider.setOverwrite(true); + } + try { + + T[] datas = dataProvider.getDatas(type, projectId, versionId); + return datas; + } catch (IOException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (XmlPullParserException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (DataNotFoundException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } finally { + if (reload) { + dataProvider.setOverwrite(old); + } + } + } + + public <T extends IdAble> T getData(Class<T> type, String projectId, String versionId, boolean reload) throws RedmineDataException { + if (dataProvider.isOffline()) { + // can not reload data + reload = false; + } + boolean old = dataProvider.isOverwrite(); + if (reload) { + dataProvider.setOverwrite(true); + } + try { + + T data = dataProvider.getData(type, projectId, versionId); + return data; + } catch (IOException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (XmlPullParserException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } catch (DataNotFoundException ex) { + throw new RedmineDataException("could not retreave datas of type " + type.getName() + " for reason " + ex.getMessage(), ex); + } finally { + if (reload) { + dataProvider.setOverwrite(old); + } + } + } + + public <T extends IdAble> T[] getDatas(Class<T> type, String projectId, String versionId) throws RedmineDataException { + T[] datas = getDatas(type, projectId, versionId, false); + return datas; + } + + public <T extends IdAble> T[] getDatasById(Class<T> type, String projectId, String versionId, Integer... ids) throws RedmineDataException { + T[] datas = getDatasById(type, projectId, versionId, false, ids); + return datas; + } + + public <T extends IdAble> T getData(Class<T> type, String projectId, String versionId) throws RedmineDataException { + T data = getData(type, projectId, versionId, false); + return data; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataHelper.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataProvider.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataProvider.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataProvider.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,241 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumMap; +import java.util.List; +import org.apache.maven.plugin.logging.Log; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.nuiton.redmine.model.IdAble; +import org.nuiton.redmine.model.io.xpp3.RedmineXpp3Helper; +import org.nuiton.util.PluginHelper; + +/** + * This class is capable to load redmine objects in memory (from redmine server + * or locally saved in a on a local cache). + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineDataProvider { + + /** + * a flag to disable network communication + */ + protected boolean offline; + /** + * a flag to overwrite local files (flag {@code offline} must be set one). + */ + protected boolean overwrite; + /** + * the encoding used to read and writes files. + */ + protected String encoding; + /** + * the base directory of local datas + */ + protected File basedir; + /** + * the redmine session to obtain datas from a redmine server + */ + protected RedmineSession session; + /** + * the xml helper to retreave data from xml files + */ + protected RedmineXpp3Helper xmlHelper; + /** + * store of datas + */ + protected EnumMap<RedmineDataType, Object> store; + /** + * logger + */ + protected Log log; + + public RedmineDataProvider(String encoding, Log log, File localDir, RedmineSession session) { + this.basedir = localDir; + this.log = log; + this.session = session; + this.encoding = encoding; + this.store = new EnumMap<RedmineDataType, Object>(RedmineDataType.class); + this.xmlHelper = new RedmineXpp3Helper(); + + if (!localDir.exists()) { + localDir.mkdirs(); + } + + if (log.isDebugEnabled()) { + log.debug("factory " + this + " basedir " + localDir); + log.debug("factory " + this + " offline " + offline); + log.debug("factory " + this + " session " + session); + } + } + + public <T extends IdAble> T getData(Class<T> type, String projectId, String versionId) throws IOException, XmlPullParserException, DataNotFoundException { + + RedmineDataType cste = getDataType(type, false); + if (!overwrite) { + Object get = store.get(cste); + if (get != null) { + // data found in store + return (T) get; + } + } + + // will search the data on local + File file = uptodateLocalDataFile(cste, projectId, versionId); + + // arrays loading + T result = xmlHelper.readObject(type, file); + // store result + store.put(cste, result); + + return result; + } + + public <T extends IdAble> T[] getDatas(Class<T> type, String projectId, String versionId) throws IOException, XmlPullParserException, DataNotFoundException { + + RedmineDataType cste = getDataType(type, true); + + if (!overwrite) { + Object get = store.get(cste); + if (get != null) { + // data found in store + return (T[]) get; + } + } + + // will search the data on local + File file = uptodateLocalDataFile(cste, projectId, versionId); + + // arrays loading + T[] result = xmlHelper.readObjects(type, file); + // store result + store.put(cste, result); + + return result; + } + + public <T extends IdAble> T[] getDataByIds(Class<T> type, String projectId, String versionId, Integer... ids) throws IOException, XmlPullParserException, DataNotFoundException { + + // arrays loading + T[] result = getDatas(type, projectId, versionId); + + List<Integer> lIds = Arrays.asList(ids); + List<T> filter = new ArrayList<T>(lIds.size()); + for (T v : result) { + if (lIds.contains(v.getId())) { + filter.add(v); + } + } + + return filter.toArray((T[]) Array.newInstance(type, filter.size())); + } + + public void close() throws IOException { + store.clear(); + store = null; + if (session != null && session.isLogin()) { + session.logout(); + session = null; + } + } + + public File getBasedir() { + return basedir; + } + + public boolean isOffline() { + return offline; + } + + public boolean isOverwrite() { + return overwrite; + } + + public RedmineSession getSession() { + return session; + } + + public void setOffline(boolean offline) { + this.offline = offline; + } + + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + protected RedmineDataType getDataType(Class<?> type, boolean isArray) throws NullPointerException, IllegalArgumentException { + if (type == null) { + throw new NullPointerException("type parameter ca not be null"); + } + RedmineDataType cste = RedmineDataType.valueOf(type, isArray); + if (cste == null) { + throw new IllegalArgumentException("can not deal with type " + type.getName()); + } + if (cste.isArray() != isArray) { + throw new IllegalArgumentException("the type " + cste + " can not be retreave as " + (isArray ? "array" : "single")); + } + return cste; + } + + public File uptodateLocalDataFile(RedmineDataType cste, String projectId, String versionId) throws DataNotFoundException, IOException { + + File file = cste.getLocalFile(basedir, projectId, versionId); + + boolean needDownload = isNeedDownload(file); + + if (needDownload) { + + downloadData(cste, projectId, versionId); + + } + return file; + } + + public File downloadData(RedmineDataType cste, String projectId, String versionId) throws IOException, DataNotFoundException { + + if (offline) { + // can't have data + throw new IllegalStateException("offline is on, can not download data from redmine server"); + } + + File file = cste.getLocalFile(basedir, projectId, versionId); + + // loding xml content file from redmine + String[] paths = cste.getSessionPath(projectId, versionId); + String[] parameters = cste.getSessionParameters(projectId, versionId); + String txt = session.askData(paths, parameters); + // store it as a local file + PluginHelper.writeString(file, txt, encoding); + + return file; + } + + public boolean isNeedDownload(File file) { + + boolean needDownload = false; + + if (file.exists()) { + + // reload data if not offline and ask to overwrite + needDownload = !offline && overwrite; + } else { + + // always need download + needDownload = true; + } + return needDownload; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataProvider.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataType.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataType.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataType.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,137 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import org.nuiton.redmine.model.Attachment; +import org.nuiton.redmine.model.IdAble; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import org.nuiton.redmine.model.IssuePriority; +import org.nuiton.redmine.model.IssueStatus; +import org.nuiton.redmine.model.Project; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; + +public enum RedmineDataType { + + projects(false, false, Project[].class, "get_projects"), + issueStatuses(false, false, IssueStatus[].class, "get_issue_statuses"), + issuePriorities(false, false, IssuePriority[].class, "get_issue_priorities"), + project(true, false, Project.class, "get_project"), + version(true, true, Version.class, "get_version"), + attachments(true, true, Attachment[].class, "get_version_files"), + issues(true, true, Issue[].class, "get_version_issues"), + issueCategories(true, false, IssueCategory[].class, "get_issue_categories"), + trackers(true, false, Tracker[].class, "get_project_trackers"), + users(true, false, User[].class, "get_project_users"), + versions(true, false, Version[].class, "get_project_versions"); + final boolean requiresProject; + final boolean requiresVersion; + final boolean array; + final Class<? extends IdAble> type; + final String action; + + private RedmineDataType(boolean requiresProject, boolean requiresVersion, Class<?> type, String action) { + this.requiresProject = requiresProject; + this.requiresVersion = requiresVersion; + this.action = action; + this.array = type.isArray(); + if (isArray()) { + this.type = (Class<? extends IdAble>) type.getComponentType(); + } else { + this.type = (Class<? extends IdAble>) type; + } + } + + public String getAction() { + return action; + } + + public boolean isRequiresProject() { + return requiresProject; + } + + public boolean isRequiresVersion() { + return requiresVersion; + } + + public Class<? extends IdAble> getType() { + return type; + } + + public static RedmineDataType valueOf(Class<?> type, boolean array) { + for (RedmineDataType e : values()) { + if (type == e.getType() && e.isArray() == array) { + return e; + } + } + return null; + } + + public static void checkRedmineDataType(Class<?> type) { + if (type == null) { + throw new NullPointerException("klass parameter can not be null"); + } + + // check type is authorized + + for (RedmineDataType e : values()) { + if (type == e.getType()) { + return; + } + } + throw new IllegalArgumentException("the type " + type.getName() + " is not allowed!"); + + + } + + public boolean isArray() { + return array; + } + + public File getLocalFile(File basedir, String projectId, String versionId) { + if (isRequiresProject()) { + basedir = new File(basedir, "__P" + projectId); + } + if (isRequiresVersion()) { + basedir = new File(basedir, "__V" + versionId); + } + + if (!basedir.exists()) { + basedir.mkdirs(); + } + + String filename = name() + ".xml"; + + File f = new File(basedir, filename); + return f; + } + + public String[] getSessionPath(String projectId, String versionId) { + List<String> paths = new ArrayList<String>(); + + paths.add("rest"); + paths.add(action + ".xml"); + + if (isRequiresProject()) { + paths.add(projectId); + } + + return paths.toArray(new String[paths.size()]); + + + } + + public String[] getSessionParameters(String projectId, String versionId) { + List<String> parameters = new ArrayList<String>(); + + if (isRequiresVersion()) { + parameters.add("version_name"); + parameters.add(versionId); + } + + return parameters.toArray(new String[parameters.size()]); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineDataType.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineModelBuilder.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineModelBuilder.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineModelBuilder.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,130 +0,0 @@ -package org.nuiton.redmine; - -import org.nuiton.redmine.model.*; -import org.codehaus.plexus.util.ReaderFactory; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import org.apache.maven.plugin.logging.Log; -import org.nuiton.io.xpp3.Xpp3Helper; - -/** - * Pour construire le modèle à partir de fichiers xml contenant les données. - * - * @author chemit - * @since 1.0.0 - */ -public class RedmineModelBuilder { - - Log log; - - public RedmineModelBuilder(Log log) { - this.log = log; - } - - public Attachment readAttachment(File file) throws IOException, XmlPullParserException { - - Attachment result = readObject(Attachment.class, file); - return result; - } - - public Issue readIssue(File file) throws IOException, XmlPullParserException { - - Issue result = readObject(Issue.class, file); - return result; - } - - public Project readProject(File file) throws IOException, XmlPullParserException { - - Project result = readObject(Project.class, file); - return result; - } - - public Tracker readTracker(File file) throws IOException, XmlPullParserException { - - Tracker result = readObject(Tracker.class, file); - return result; - } - - public User readUser(File file) throws IOException, XmlPullParserException { - - User result = readObject(User.class, file); - return result; - } - - public Version readVersion(File file) throws IOException, XmlPullParserException { - - Version result = readObject(Version.class, file); - return result; - } - - public Attachment[] readAttachments(File file) throws IOException, XmlPullParserException { - - Attachment[] result = readObjects(Attachment.class, file); - - return result; - } - - public Issue[] readIssues(File file) throws IOException, XmlPullParserException { - - Issue[] result = readObjects(Issue.class, file); - return result; - } - - public Project[] readProjects(File file) throws IOException, XmlPullParserException { - - Project[] result = readObjects(Project.class, file); - return result; - } - - public Tracker[] readTrackers(File file) throws IOException, XmlPullParserException { - - Tracker[] result = readObjects(Tracker.class, file); - return result; - } - - public User[] readUsers(File file) throws IOException, XmlPullParserException { - - User[] result = readObjects(User.class, file); - return result; - } - - public Version[] readVersions(File file) throws IOException, XmlPullParserException { - - Version[] result = readObjects(Version.class, file); - return result; - } - - protected <O> O readObject(Class<O> klass, File file) throws IOException, XmlPullParserException { - - O result = null; - - if (file.exists() && file.isFile()) { - log.info("will parse project from: '" + file.getAbsolutePath() + "'"); - Reader reader = ReaderFactory.newXmlReader(file); - result = Xpp3Helper.readObject(klass, reader); - - } else { - log.warn("the file was not found or is a not a file: '" + file.getAbsolutePath() + "'"); - } - - return result; - } - - protected <O> O[] readObjects(Class<O> klass, File file) throws IOException, XmlPullParserException { - - O[] results = null; - - if (file.exists() && file.isFile()) { - log.info("will parse project from: '" + file.getAbsolutePath() + "'"); - Reader reader = ReaderFactory.newXmlReader(file); - results = Xpp3Helper.readObjects(klass, reader); - - } else { - log.warn("the file was not found or is a not a file: '" + file.getAbsolutePath() + "'"); - } - return results; - } -} Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineSession.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineSession.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/RedmineSession.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,8 +1,6 @@ package org.nuiton.redmine; -import org.nuiton.redmine.plugin.*; import java.io.IOException; -import java.net.URISyntaxException; import java.net.URL; import java.util.Arrays; @@ -18,7 +16,7 @@ import org.apache.maven.plugin.logging.Log; /** - * To store a redmine session and exeuctes some requests on redmine. + * To store a redmine session and executes some requests on a redmine server. * <p/> * To obtain a session, use the static factory method {@link #getSession(org.apache.maven.plugin.logging.Log, java.net.URL, String, String, boolean)}. * @@ -40,50 +38,6 @@ protected boolean login; protected boolean showRequest; - public static RedmineSession getSession(Log log, URL url, String username, String password, boolean showRequest) throws IOException, URISyntaxException { - - RedmineSession session = new RedmineSession(log, url, showRequest); - - // ask rest/ping service a ping - - try { - String content = session.askContent(new String[]{"rest", "ping"}); - - boolean ok = "ping".equals(content); - if (!ok) { - throw new IOException("can not connect to " + url); - } - } catch (IOException ex) { - throw ex; - } catch (DataNotFoundException ex) { - // should never happeds - log.error(ex.getMessage()); - } - - // ask rest/login a connection - - String uri = session.getUri("rest", "login"); - - HttpMethod gm = session.doRequest(uri, "username", username, "password", password); - - StatusLine sl = gm.getStatusLine(); - int statusCode = sl.getStatusCode(); - if (log.isDebugEnabled()) { - log.debug("status code " + statusCode + " for " + gm.getPath()); - } - - if (statusCode != HttpStatus.SC_OK) { - gm.releaseConnection(); - throw new IOException("Got error code <" + statusCode + ":" + sl.getReasonPhrase() + "> on " + gm.getPath()); - } - - // ok session is logged in - - session.login = true; - - return session; - } - protected RedmineSession(Log log, URL uri, boolean showRequest) { this.showRequest = showRequest; this.log = log; @@ -143,7 +97,7 @@ return content; } - public String askContent(String... paths) throws IOException, DataNotFoundException { + public String askData(String... paths) throws IOException, DataNotFoundException { String content = askData(paths, new String[0]); Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Attachment.java 2009-09-11 22:10:54 UTC (rev 86) @@ -4,12 +4,11 @@ /** * A file attachment from redmine server. - * + * * @author chemit * @since 1.0.0 */ -public class Attachment { - +public class Attachment implements IdAble { protected int id; protected int authorId; protected int containerId; @@ -67,6 +66,7 @@ return filesize; } + @Override public int getId() { return id; } Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/I18nAble.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/I18nAble.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/I18nAble.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,12 @@ +package org.nuiton.redmine.model; + +/** + * Alls object offers an name. + * + * @author chemit + * @since 1.0.0 + */ +public interface I18nAble { + + String getName(); +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/I18nAble.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IdAble.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IdAble.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IdAble.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,12 @@ +package org.nuiton.redmine.model; + +/** + * Alls object offers an id. + * + * @author chemit + * @since 1.0.0 + */ +public interface IdAble { + + int getId(); +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IdAble.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Issue.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,15 +1,45 @@ package org.nuiton.redmine.model; +import java.util.ArrayList; import java.util.Date; +import java.util.List; /** * An issue on redmine's server. - * + * * @author chemit * @since 1.0.0 */ -public class Issue { +public class Issue implements IdAble { + public static Issue[] filterByTrackerId(int trackerId, Issue... issues) { + List<Issue> result = new ArrayList<Issue>(); + for (Issue i : issues) { + if (i.getTrackerId() == trackerId) { + result.add(i); + } + } + return result.toArray(new Issue[result.size()]); + } + + public static Issue[] filterByVersionId(int versionId, Issue... issues) { + List<Issue> result = new ArrayList<Issue>(); + for (Issue i : issues) { + if (i.getFixedVersionId() == versionId) { + result.add(i); + } + } + return result.toArray(new Issue[result.size()]); + } + + public static Issue getIssueById(int id, Issue... issues) { + for (Issue i : issues) { + if (i.getId() == id) { + return i; + } + } + return null; + } protected int assignedToId; protected int authorId; protected int categoryId; @@ -65,6 +95,7 @@ return fixedVersionId; } + @Override public int getId() { return id; } Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueCategory.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueCategory.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueCategory.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,56 @@ +package org.nuiton.redmine.model; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class IssueCategory implements IdAble, I18nAble { + + public static IssueCategory getIssueCategoryById(Integer id, IssueCategory... categories) { + for (IssueCategory u : categories) { + if (u.getId() == id) { + return u; + } + } + return null; + } + protected int projectId; + protected int assignedToId; + protected int id; + protected String name; + + public int getAssignedToId() { + return assignedToId; + } + + @Override + public int getId() { + return id; + } + + @Override + public String getName() { + return name; + } + + public int getProjectId() { + return projectId; + } + + public void setAssignedToId(int assigneToId) { + this.assignedToId = assigneToId; + } + + public void setId(int id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setProjectId(int projectId) { + this.projectId = projectId; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueCategory.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssuePriority.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssuePriority.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssuePriority.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,57 @@ +package org.nuiton.redmine.model; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class IssuePriority implements IdAble,I18nAble{ + + protected int id; + protected boolean isDefault; + protected String name; + protected String opt; + protected int position; + + @Override + public int getId() { + return id; + } + + public boolean isIsDefault() { + return isDefault; + } + + @Override + public String getName() { + return name; + } + + public String getOpt() { + return opt; + } + + public int getPosition() { + return position; + } + + public void setId(int id) { + this.id = id; + } + + public void setIsDefault(boolean isDefault) { + this.isDefault = isDefault; + } + + public void setName(String name) { + this.name = name; + } + + public void setOpt(String opt) { + this.opt = opt; + } + + public void setPosition(int position) { + this.position = position; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssuePriority.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueStatus.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueStatus.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueStatus.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,65 @@ +package org.nuiton.redmine.model; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class IssueStatus implements IdAble, I18nAble { + + public static IssueStatus getIssueStatusById(Integer id, IssueStatus... statuses) { + for (IssueStatus u : statuses) { + if (u.getId() == id) { + return u; + } + } + return null; + } + protected int id; + protected int position; + protected boolean isClosed; + protected boolean isDefault; + protected String name; + + @Override + public int getId() { + return id; + } + + public boolean isIsClosed() { + return isClosed; + } + + public boolean isIsDefault() { + return isDefault; + } + + @Override + public String getName() { + return name; + } + + public int getPosition() { + return position; + } + + public void setId(int id) { + this.id = id; + } + + public void setIsClosed(boolean isClosed) { + this.isClosed = isClosed; + } + + public void setIsDefault(boolean isDefault) { + this.isDefault = isDefault; + } + + public void setName(String name) { + this.name = name; + } + + public void setPosition(int position) { + this.position = position; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/IssueStatus.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Project.java 2009-09-11 22:10:54 UTC (rev 86) @@ -8,7 +8,7 @@ * @author chemit * @since 1.0.0 */ -public class Project { +public class Project implements IdAble, I18nAble { protected Date createdOn; protected Date updatedOn; @@ -34,6 +34,7 @@ return homepage; } + @Override public int getId() { return id; } @@ -46,6 +47,7 @@ return isPublic; } + @Override public String getName() { return name; } @@ -109,5 +111,4 @@ public void setStatus(int status) { this.status = status; } - } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Tracker.java 2009-09-11 22:10:54 UTC (rev 86) @@ -5,8 +5,16 @@ * @author chemit * @since 1.0.0 */ -public class Tracker { +public class Tracker implements IdAble, I18nAble { + public static Tracker getTrackerById(int id,Tracker... trackers) { + for (Tracker u : trackers) { + if (u.getId() == id) { + return u; + } + } + return null; + } protected int id; protected int projectId; protected int trackerId; @@ -15,6 +23,7 @@ protected boolean isInRoadmap; protected String name; + @Override public int getId() { return id; } @@ -27,6 +36,7 @@ return isInRoadmap; } + @Override public String getName() { return name; } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/User.java 2009-09-11 22:10:54 UTC (rev 86) @@ -5,11 +5,28 @@ /** * * @author chemit - * + * * @since 1.0.0 */ -public class User { +public class User implements IdAble, I18nAble { + public static User getUserByLogin(String login, User... users) { + for (User u : users) { + if (u.getLogin().equals(login)) { + return u; + } + } + return null; + } + + public static User getUserById(int id, User... users) { + for (User u : users) { + if (u.getId() == id) { + return u; + } + } + return null; + } protected boolean admin; protected boolean mailNotification; protected int id; @@ -51,6 +68,7 @@ return hashedPassword; } + @Override public int getId() { return id; } @@ -154,4 +172,9 @@ public void setUpdatedOn(Date updatedOn) { this.updatedOn = updatedOn; } + + @Override + public String getName() { + return firstname + " " + lastname; + } } Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/Version.java 2009-09-11 22:10:54 UTC (rev 86) @@ -7,8 +7,25 @@ * @author chemit * @since 1.0.0 */ -public class Version { +public class Version implements IdAble,I18nAble { + public static Version getVersionByName(Version[] versions, String login) { + for (Version u : versions) { + if (u.getName().equals(login)) { + return u; + } + } + return null; + } + + public static Version getVersionById(Version[] versions, int id) { + for (Version u : versions) { + if (u.getId() == id) { + return u; + } + } + return null; + } protected Date createdOn; protected Date updatedOn; protected Date effectiveDate; @@ -30,10 +47,12 @@ return effectiveDate; } + @Override public int getId() { return id; } + @Override public String getName() { return name; } Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueCategoryXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueCategoryXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueCategoryXpp3Reader.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import static org.nuiton.io.xpp3.Xpp3Helper.addTagTextContentMappers; + +/** + * {@link Issue} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class IssueCategoryXpp3Reader extends AbstractXpp3Reader<IssueCategory> { + + public IssueCategoryXpp3Reader() { + super(IssueCategory.class, "issue-categories", "issue-category"); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addTagTextContentMappers(IssueCategory.class, RedmineDataConverter.Integer, true, allMappers, + "project-id", + "assigned-to-id", + "id"); + + addTagTextContentMappers(IssueCategory.class, RedmineDataConverter.Text, true, allMappers, + "name"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueCategoryXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssuePriorityXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssuePriorityXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssuePriorityXpp3Reader.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,36 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssuePriority; +import static org.nuiton.io.xpp3.Xpp3Helper.addTagTextContentMappers; + +/** + * {@link Issue} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class IssuePriorityXpp3Reader extends AbstractXpp3Reader<IssuePriority> { + + public IssuePriorityXpp3Reader() { + super(IssuePriority.class, "enumerations", "enumeration"); + } + + @Override + protected void initMappers() throws IntrospectionException { + + + addTagTextContentMappers(IssuePriority.class, RedmineDataConverter.Integer, true, allMappers, + "id", + "position"); + + addTagTextContentMappers(IssuePriority.class, RedmineDataConverter.Boolean, true, allMappers, + "is-default"); + + addTagTextContentMappers(IssuePriority.class, RedmineDataConverter.Text, true, allMappers, + "name", + "opt"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssuePriorityXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueStatusXpp3Reader.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueStatusXpp3Reader.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueStatusXpp3Reader.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,35 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.IntrospectionException; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueStatus; +import static org.nuiton.io.xpp3.Xpp3Helper.addTagTextContentMappers; + +/** + * {@link Issue} reader. + * + * @author chemit + * @since 1.0.0 + */ +public class IssueStatusXpp3Reader extends AbstractXpp3Reader<IssueStatus> { + + public IssueStatusXpp3Reader() { + super(IssueStatus.class, "issue-statuses", "issue-status"); + } + + @Override + protected void initMappers() throws IntrospectionException { + + addTagTextContentMappers(IssueStatus.class, RedmineDataConverter.Integer, true, allMappers, + "id", + "position"); + + addTagTextContentMappers(IssueStatus.class, RedmineDataConverter.Boolean, true, allMappers, + "is-closed", + "is-default"); + + addTagTextContentMappers(IssueStatus.class, RedmineDataConverter.Text, true, allMappers, + "name"); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/IssueStatusXpp3Reader.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3Helper.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3Helper.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3Helper.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,65 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.io.ByteArrayInputStream; +import org.codehaus.plexus.util.ReaderFactory; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import org.nuiton.io.xpp3.Xpp3Helper; +import org.nuiton.redmine.RedmineDataType; + +/** + * Pour construire le modèle à partir de fichiers xml contenant les données. + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineXpp3Helper { + + public <O> O readObject(Class<O> klass, String txt) throws IOException, XmlPullParserException { + O result = readObject(klass, new ByteArrayInputStream(txt.getBytes())); + return result; + } + + public <O> O[] readObjects(Class<O> klass, String txt) throws IOException, XmlPullParserException { + O[] results = readObjects(klass, new ByteArrayInputStream(txt.getBytes())); + return results; + } + + public <O> O readObject(Class<O> klass, File file) throws IOException, XmlPullParserException { + O result = readObject(klass, new FileInputStream(file)); + return result; + } + + public <O> O[] readObjects(Class<O> klass, File file) throws IOException, XmlPullParserException { + O[] results = readObjects(klass, new FileInputStream(file)); + return results; + } + + public <O> O readObject(Class<O> klass, InputStream stream) throws IOException, XmlPullParserException { + + RedmineDataType.checkRedmineDataType(klass); + + O result = null; + + Reader reader = ReaderFactory.newXmlReader(stream); + result = Xpp3Helper.readObject(klass, reader); + + return result; + } + + public <O> O[] readObjects(Class<O> klass, InputStream stream) throws IOException, XmlPullParserException { + + RedmineDataType.checkRedmineDataType(klass); + + O[] results = null; + + Reader reader = ReaderFactory.newXmlReader(stream); + results = Xpp3Helper.readObjects(klass, reader); + return results; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3Helper.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractGetProjectDataMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractGetProjectDataMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractGetProjectDataMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,79 +0,0 @@ -package org.nuiton.redmine.plugin; - -import java.util.Arrays; -import org.apache.maven.plugin.MojoFailureException; - -/** - * Abstract goal to retreave some datas on a project. - * - * @author tchemit - * @since 1.0.0 - */ -public abstract class AbstractGetProjectDataMojo extends AbstractRedmineMojo { - - public static interface DataType { - - String getAction(); - } - - public enum DataFormat { - - json, - xml - } - /** - * Project identifier. - * - * @parameter expression="${projectId}" - * @required - * @since 1.0.0 - */ - protected String projectId; - /** - * The data format to retreave (all values of enum {@link #DataFormat}) : - * <ul> - * <li>json</li> - * <li>xml</li> - * </ul> - * <p/> - * <p/> - * - * @parameter expression="${redmine.dataFormat}" default-value="xml" - * @required - * @since 1.0.0 - */ - protected String dataFormat; - /** - * The action to be send to redmine, will be compute in - * {@link #init()} method. - */ - protected String action; - - protected abstract DataType getDataType() throws MojoFailureException; - - @Override - protected boolean init() throws Exception { - - action = buildAction(); - - return super.init(); - } - - protected String buildAction() throws MojoFailureException { - - DataType _dataType = getDataType(); - - DataFormat _dataFormat = getDataFormat(); - - return _dataType.getAction() + "." + _dataFormat.name(); - } - - protected DataFormat getDataFormat() throws MojoFailureException { - try { - DataFormat _dataFormat = DataFormat.valueOf(dataFormat); - return _dataFormat; - } catch (Exception e) { - throw new MojoFailureException("could not obtain data format " + dataFormat + " in " + Arrays.toString(DataFormat.values())); - } - } -} Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractRedmineMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractRedmineMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/AbstractRedmineMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,41 +1,29 @@ -/** - * Copyright 2008 fastConnect. - * - * This file is part of maven-redmine-plugin Mojo. - * - * This is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this software. If not, see <http://www.gnu.org/licenses/>. - */ package org.nuiton.redmine.plugin; -import org.nuiton.redmine.RedmineSession; -import java.io.IOException; +import java.io.File; import java.net.URL; -import org.apache.maven.model.IssueManagement; -import org.apache.maven.plugin.MojoExecutionException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; -import org.apache.maven.settings.Server; import org.apache.maven.settings.Settings; import org.nuiton.AbstractPlugin; +import org.nuiton.redmine.RedmineConfiguration; +import org.nuiton.redmine.RedmineConfigurationHelper; +import org.nuiton.redmine.RedmineDataHelper; +import org.nuiton.redmine.RedmineDataType; +import org.nuiton.redmine.RedmineDataProvider; import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; -import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException; /** - * Provides basic methods to interact with Redmine. + * Abstract redmine mojo. + * + * @author tchemit + * @since 1.0.0 */ -public abstract class AbstractRedmineMojo extends AbstractPlugin { +public abstract class AbstractRedmineMojo extends AbstractPlugin implements RedmineConfiguration { /** * Dependance du projet. @@ -56,29 +44,19 @@ */ protected Settings settings; /** - * Configuration of issue management. - * <p/> - * If no redmineUrl defined, will use the issue management to guess the - * redmine url. - * - * @parameter default-value="${project.issueManagement}" - * @readonly - * @since 1.0.0 - */ - protected IssueManagement issueManagement; - /** * Server id to use for authentication (must be defined in your setting * and use the maven >= 2.1.0 password encryption mecanism). * <p/> * * @parameter expression="${redmine.serverId}" - * @required * @since 1.0.0 */ protected String serverId; /** * The real basedir redmine url. * + * If no url is given, will use the one filled in issue management. + * * @parameter expression="${redmine.url}" * @since 1.0.0 */ @@ -98,6 +76,36 @@ */ protected String redminePassword; /** + * The encoding used to read and write files. + * + * @parameter expression="${redmine.encoding}" default-value="${project.build.sourceEncoding}" + * @since 1.0.0 + */ + protected String encoding; + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectId; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionId; + /** + * Le répertoire où écrire les données rapatriées depuis redmine au format xml. + * + * @parameter expression="${redmine.cacheDirectory}" default-value="${project.build.directory}/redmine-cache" + * @since 1.0.0 + * @required + */ + protected File cacheDirectory; + /** * Un flag pour activer le mode verbeux. * * @parameter expression="${redmine.verbose}" default-value="${maven.verbose}" @@ -105,21 +113,42 @@ */ protected boolean verbose; /** + * Un flag pour activer le mode connecté. + * + * @parameter expression="${redmine.offline}" default-value="${settings.offline}" + * @since 1.0.0 + */ + protected boolean offline; + /** + * Un flag pour recharger les données locales si elles existent. + * + * @parameter expression="${redmine.overwrite}" default-value="false" + * @since 1.0.0 + */ + protected boolean overwrite; + /** * password decypher - * @component + * + * @component role="org.sonatype.plexus.components.sec.dispatcher.SecDispatcher" roleHint="maven-redmine-plugin" + * @readonly + * @required * @since 1.0.0 */ protected SecDispatcher sec; /** - * redmine session + * Redmine model store. + * * @since 1.0.0 */ - protected RedmineSession session; + protected RedmineDataHelper helper; public AbstractRedmineMojo() { - super("skip message"); + super("init was not successfull, will skip plugin"); } + /////////////////////////////////////////////////////////////////////////// + /// AbstractPlugin + /////////////////////////////////////////////////////////////////////////// @Override protected boolean ensurePackaging() { // accept all packages @@ -129,103 +158,160 @@ @Override protected boolean init() throws Exception { - if (redmineUrl == null || redmineUrl.toString().isEmpty()) { + // obtain a data provider - // no redmine url specified, guess it from issueManagement + RedmineDataProvider dataProvider = RedmineConfigurationHelper.initDataProvider( + this, + getLog(), + serverId, + settings, + project.getIssueManagement(), + sec); - String system = issueManagement.getSystem(); - if (!"redmine".equals(system)) { - throw new MojoExecutionException("must use a redmine issueManagment system, but found : " + system); - } - String url = issueManagement.getUrl(); - redmineUrl = new URL(url); - } + // build the data helper - if (getLog().isDebugEnabled()) { - getLog().debug("redmine url " + redmineUrl); - } + helper = new RedmineDataHelper(dataProvider); + helper.setProjectId(projectId); + helper.setVersionId(versionId); + return true; + } - if (redmineUsername == null || redmineUsername.trim().isEmpty() || redminePassword == null || redminePassword.trim().isEmpty()) { + /////////////////////////////////////////////////////////////////////////// + /// Plugin + /////////////////////////////////////////////////////////////////////////// + @Override + public MavenProject getProject() { + return project; + } - // guess login and password from server in settings + @Override + public void setProject(MavenProject project) { + this.project = project; + } - Server server = settings.getServer(serverId); - if (server == null) { - throw new MojoFailureException("could not find serverId " + serverId); - } - redmineUsername = server.getUsername(); - redminePassword = server.getPassword(); - try { - redminePassword = sec.decrypt(redminePassword); - } catch (SecDispatcherException ex) { - throw new MojoFailureException("could not decrypt password", ex); - } - } + @Override + public boolean isVerbose() { + return verbose; + } - try { + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } - session = RedmineSession.getSession(getLog(), redmineUrl, redmineUsername, redminePassword, verbose); + /////////////////////////////////////////////////////////////////////////// + /// RedmineConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public URL getRedmineUrl() { + return redmineUrl; + } - } catch (IOException e) { - throw new MojoExecutionException("Unable to login to <" + redmineUrl + "> with user <" + redmineUsername + ">", e); - } - - // auth to redmine is ok - - getLog().info("authentication to " + redmineUrl + " done for " + redmineUsername); - - return true; + @Override + public void setRedmineUrl(URL redmineUrl) { + this.redmineUrl = redmineUrl; } - public String getServerId() { - return serverId; + @Override + public File getLocalDir() { + return cacheDirectory; } - public void setServerId(String serverId) { - this.serverId = serverId; + @Override + public void setLocalDir(File localDir) { + this.cacheDirectory = localDir; } - public IssueManagement getIssueManagement() { - return issueManagement; + @Override + public boolean isOffline() { + return offline; } - public void setIssueManagement(IssueManagement issueManagement) { - this.issueManagement = issueManagement; + @Override + public void setOffline(boolean offline) { + this.offline = offline; } - public URL getRedmineUrl() { - return redmineUrl; + @Override + public boolean isOverwrite() { + return overwrite; } - public void setRedmineUrl(URL redmineUrl) { - this.redmineUrl = redmineUrl; + @Override + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; } - public Settings getSettings() { - return settings; + @Override + public String getRedminePassword() { + return redminePassword; } - public void setSettings(Settings settings) { - this.settings = settings; + @Override + public void setRedminePassword(String redminePassword) { + this.redminePassword = redminePassword; } @Override - public boolean isVerbose() { - return verbose; + public String getRedmineUsername() { + return redmineUsername; } @Override - public void setVerbose(boolean verbose) { - this.verbose = verbose; + public void setRedmineUsername(String redmineUsername) { + this.redmineUsername = redmineUsername; } @Override - public MavenProject getProject() { - return project; + public String getEncoding() { + return encoding; } @Override - public void setProject(MavenProject project) { - this.project = project; + public void setEncoding(String encoding) { + this.encoding = encoding; } + + /////////////////////////////////////////////////////////////////////////// + /// Others + /////////////////////////////////////////////////////////////////////////// + /** + * Convert {@link RedmineDataType} from string representation. + * + * A filter can be make on the parameter {@code universe} if filled. + * + * @param dataTypes the list of type to convert separated by commas. + * @param universe universe of authorized values (if not filled, no filter). + * @return the array of type converted from the string representation. + * @throws MojoFailureException + */ + protected RedmineDataType[] getRedmineDataTypes(String dataTypes, RedmineDataType... universe) throws MojoFailureException { + List<RedmineDataType> results = new ArrayList<RedmineDataType>(); + List<RedmineDataType> universeList = new ArrayList<RedmineDataType>(Arrays.asList(universe)); + + for (String dataType : dataTypes.split(",")) { + RedmineDataType result; + try { + result = RedmineDataType.valueOf(dataType.trim()); + } catch (Exception e) { + throw new MojoFailureException("could not obtain data type " + dataType + " in " + Arrays.toString(RedmineDataType.values())); + } + + // check projectId used + if (result.isRequiresVersion() && (projectId == null && projectId.isEmpty())) { + throw new MojoFailureException("could not use the data type " + result + " since it is not a project requires and projectId was not filled"); + } + // check versionId use + if (result.isRequiresVersion() && (versionId == null || versionId.isEmpty())) { + throw new MojoFailureException("could not use the data type " + result + " since it a version requires and versionId was not filled"); + } + if (!universeList.isEmpty() && !universeList.contains(result)) { + // can not accept these value + getLog().warn("the type " + result + " is not authorized, universe : " + universeList); + continue; + } + results.add(result); + } + return results.toArray(new RedmineDataType[results.size()]); + } } Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DataNotFoundException.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DataNotFoundException.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DataNotFoundException.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,27 +0,0 @@ -package org.nuiton.redmine.plugin; - -/** - * An exception to throw when a data does not exists on redmine. - * - * @author chemit - * @since 1.0.0 - */ -public class DataNotFoundException extends Exception { - - private static final long serialVersionUID = 1L; - - public DataNotFoundException(Throwable cause) { - super(cause); - } - - public DataNotFoundException(String message, Throwable cause) { - super(message, cause); - } - - public DataNotFoundException(String message) { - super(message); - } - - public DataNotFoundException() { - } -} Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DisplayDataMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DisplayDataMojo.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DisplayDataMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,78 @@ +package org.nuiton.redmine.plugin; + +import org.nuiton.redmine.RedmineDataType; +import org.nuiton.redmine.model.I18nAble; +import org.nuiton.redmine.model.IdAble; + +/** + * goal to display in console some data from redmine's server. + * + * Data will be stored locally on xml files. + * + * @author tchemit + * @since 1.0.0 + * + * @goal display-data + * @requiresProject true + */ +public class DisplayDataMojo extends AbstractRedmineMojo { + + /** + * The data types to display : {@code issueSatuses}, {@code issuePriorities}, + * {@code issueCategories}, {@code trackers} and {@code users}. + * <p/> + * {@code issueStatuses} and {@code issuePriorities} are common for all + * projects, so for those datas, no extrat configuration is required. + * <p/> + * {@code isseCategories}, {@code trackers} and {@code users} are project + * specific, so you have to fill als the {@code projectId} parameter to + * obtain data for those types. + * <p/> + * Note : you can specifiy several types separated by comma + * + * @parameter expression="${redmine.types}" + * @required + * @since 1.0.0 + */ + protected String types; + /** + * the real data types to retreave + */ + protected RedmineDataType[] redmineDataTypes; + + @Override + protected boolean init() throws Exception { + + redmineDataTypes = getRedmineDataTypes(types, + RedmineDataType.issueStatuses, + RedmineDataType.issuePriorities, + RedmineDataType.issueCategories, + RedmineDataType.trackers, + RedmineDataType.users); + + if (redmineDataTypes.length == 0) { + // no data to treate + getLog().warn("no data types detected, you must fill the required parameter dataTypes"); + return false; + } + return super.init(); + } + + @Override + protected void doAction() throws Exception { + + StringBuilder buffer = new StringBuilder("\n"); + for (RedmineDataType type : redmineDataTypes) { + IdAble[] datas = helper.getDatas(type.getType(), projectId, versionId, !offline); + buffer.append("\nValues of '" + type).append('\''); + if (type.isRequiresProject()) { + buffer.append(" for project " + projectId); + } + buffer.append('\n'); + for (IdAble data : datas) { + buffer.append(" - " + data.getId()).append(" = ").append(((I18nAble) data).getName()).append('\n'); + } + } + System.out.println(buffer.toString()); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DisplayDataMojo.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DownloadDataMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DownloadDataMojo.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DownloadDataMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,84 @@ +package org.nuiton.redmine.plugin; + +import java.io.File; +import org.apache.maven.plugin.MojoFailureException; +import org.nuiton.redmine.RedmineDataType; +import org.nuiton.util.PluginHelper; + +/** + * goal to download some datas from a redmine server. + * + * Data will be stored locally on xml files. + * + * @author tchemit + * @since 1.0.0 + * + * @goal download + * @requiresProject true + */ +public class DownloadDataMojo extends AbstractRedmineMojo { + + /** + * The data types to retreave : all values of enum {@link RedmineDataType} + * with filter (on projectId and versionId) + * <ul> + * <li>project</li> + * <li>trackers</li> + * <li>users</li> + * <li>versions</li> + * <li>version</li> + * <li>issues</li> + * <li>attachments</li> + * </ul> + * <p/> + * <p/> + * Note : you can specifiy several types separated by comma + * + * @parameter expression="${redmine.types}" + * @required + * @since 1.0.0 + */ + protected String types; + /** + * the real data types to retreave + */ + protected RedmineDataType[] redmineDataTypes; + + @Override + protected boolean init() throws Exception { + + if (offline) { + // can not download data where offline + throw new MojoFailureException("can not download data when offline flag is on"); + } + + redmineDataTypes = getRedmineDataTypes(types); + + if (redmineDataTypes.length == 0) { + // no data to treate + getLog().warn("no data types detected, you must fill the required parameter dataTypes"); + return false; + } + return super.init(); + } + + @Override + protected void doAction() throws Exception { + + for (RedmineDataType type : redmineDataTypes) { + + if (getLog().isDebugEnabled()) { + getLog().debug("treate : " + type); + } + + File f = helper.uptodateLocalDataFile(type); + + getLog().info("data [" + type + "] stored in " + f); + if (verbose) { + String t = PluginHelper.readAsString(f, encoding); + getLog().info(t); + + } + } + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/DownloadDataMojo.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GenerateChangesMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GenerateChangesMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GenerateChangesMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,7 +1,43 @@ package org.nuiton.redmine.plugin; +import org.nuiton.redmine.RedmineDataException; +import org.nuiton.redmine.DataNotFoundException; +import java.io.File; +import java.io.IOException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.changes.model.Action; +import org.apache.maven.plugins.changes.model.Author; +import org.apache.maven.plugins.changes.model.Body; +import org.apache.maven.plugins.changes.model.ChangesDocument; +import org.apache.maven.plugins.changes.model.Properties; +import org.apache.maven.plugins.changes.model.Release; +import org.apache.maven.plugins.changes.model.io.xpp3.ChangesXpp3Writer; +import org.codehaus.plexus.util.xml.XmlStreamWriter; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import org.nuiton.redmine.IssueCollectorConfiguration; +import org.nuiton.redmine.IssuesCollector; +import org.nuiton.redmine.RedmineConfigurationHelper; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import org.nuiton.redmine.model.IssueStatus; +import org.nuiton.redmine.model.Project; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; + /** - * Generates the changes.xml file from the Redmine's server + * Generates the changes.xml file from the Redmine's server to be used + * by the maven-changes-plugin to generates the release report and send + * the annoncement mail at a release time. * * @author tchemit * @goal generate-changes @@ -9,10 +45,547 @@ * * @since 1.0.0 */ -public class GenerateChangesMojo extends AbstractRedmineMojo { +public class GenerateChangesMojo extends AbstractRedmineMojo implements IssueCollectorConfiguration { + enum Actions { + + add, + fix, + update, + remove + } + /** + * The path of the <code>changes.xml</code> file that will be converted into an HTML report. + * + * @parameter expression="${changes.xmlPath}" default-value="target/changes/changes.xml" + * @required + * @since 1.0.0 + */ + protected File xmlPath; + /** + * The description of the release. + * + * <b>Note :</b> if not sets - will use the redmine version description (if exists). + * + * @parameter expression="${releaseDescription}" + * @since 1.0.0 + */ + protected String releaseDescription; + /** + * The changes file title. + * + * @parameter expression="${changesTitle}" + * @required + * @since 1.0.0 + */ + protected String changesTitle; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersion; + /** + * The action mapping to the redmine tracker ids. + * + * Possible actions are {@code add}, {@code fix}, {@code update}, {@code remove} + * + * The syntax of mapping is {@ocode action:id [,action:id]*} + * + * Example : + * + * <pre> + * fix:1 + * fix:1, add:1 + * </pre> + * + * @parameter expression="${redmine.actionMapping}" + * @required + * @since 1.0.0 + */ + protected String actionMapping; + /** + * The comma separated list of statuses ids to include in the changes.xml + * + * @parameter expression="${redmine.statusIds}" + * @required + * @since 1.0.0 + */ + protected String statusIds; + /** + * The comma separated list of category ids to include in the changes.xml + * + * <b>Note :</b> If a value is set to empty - that means to include all categories. + * <p/> + * @parameter expression="${redmine.categoryIds}" + * @since 1.0.0 + */ + protected String categoryIds; + /** + * le mapping entre l'id d'un tracker et le type d'action + */ + protected Map<Integer, String> trackerToAction; + protected Map<String, String> filters; + private Project redmineProject; + private Version releaseVersion; + private User redmineUser; + private boolean needCreateVersion; + private Version[] versions; + private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + @Override + protected boolean init() throws Exception { + + if (xmlPath == null || xmlPath.getAbsolutePath().trim().isEmpty()) { + throw new MojoExecutionException("required a xmlPath parameter"); + } + + if (projectId == null || projectId.trim().isEmpty()) { + throw new MojoExecutionException("required a projectId parameter"); + } + if (versionId == null || versionId.trim().isEmpty()) { + throw new MojoExecutionException("required a versionId parameter"); + } + + versionId = RedmineConfigurationHelper.removeSnapshotSuffix(versionId); + + File xmlParent = xmlPath.getParentFile(); + if (!xmlParent.exists()) { + xmlParent.mkdirs(); + } + boolean result = super.init(); + if (!result) { + return false; + } + + // check project exists + + try { + Project p = helper.getProject(true); + this.redmineProject = p; + } catch (RedmineDataException e) { + throw new MojoExecutionException("the project named '" + projectId + "' does not exists on redmine server...", e); + } + + // get version + try { + Version v = helper.getVersion(true); + this.releaseVersion = v; + } catch (RedmineDataException e) { + // la version n'existe pas + // must create a new version + // must create a versions ? + getLog().warn("the version " + versionId + " does not exist, will create it on redmine"); + if (offline) { + throw new MojoExecutionException("offline is on, can not reach nuiton server"); + } + //TODO use rest/add_versions + // and reload versions + this.needCreateVersion = true; + } + + // get user + try { + User user = helper.getUserByLogin(overwrite, redmineUsername); + + if (user == null) { + throw new MojoExecutionException("user named " + redmineUsername + "' is not part of the project, can not execute the plugin..."); + } + this.redmineUser = user; + } catch (RedmineDataException e) { + throw new MojoExecutionException("the user named '" + redmineUsername + "' could not be found on the project, can not execute the plugin...", e); + } + + // get trackers + + Tracker[] trackers; + try { + + trackers = helper.getTrackers(overwrite); + + } catch (RedmineDataException e) { + throw new MojoExecutionException("could not obtain trackers for reason " + e.getMessage(), e); + } + + // get statuses + + IssueStatus[] statuses; + try { + + statuses = helper.getIssueSatuses(overwrite); + + } catch (RedmineDataException e) { + throw new MojoExecutionException("could not obtain statuses for reason " + e.getMessage(), e); + } + + // get categories + + IssueCategory[] categories; + try { + + categories = helper.getIssueCategories(overwrite); + + } catch (RedmineDataException e) { + throw new MojoExecutionException("could not obtain categories for reason " + e.getMessage(), e); + } + + // get versions + + try { + + versions = helper.getVersions(overwrite); + + } catch (RedmineDataException e) { + throw new MojoExecutionException("could not obtain versions for reason " + e.getMessage(), e); + } + + filters = new HashMap<String, String>(); + + // build trackerToAction and tracker filter + + trackerToAction = new HashMap<Integer, String>(); + + String[] entries = actionMapping.split(","); + StringBuilder buffer = new StringBuilder(); + for (String entry : entries) { + String[] parts = entry.split(":"); + if (parts.length != 2) { + // error in syntax + throw new MojoExecutionException("the trackerMapping entry " + Arrays.toString(parts) + " is not well formed"); + } + String action = parts[0].trim().toLowerCase(); + + try { + Actions.valueOf(action); + } catch (Exception e) { + throw new MojoExecutionException("the action " + action + " is unknown... authorized : " + Arrays.toString(Actions.values())); + } + + Integer id = Integer.valueOf(parts[1].trim()); + + Tracker t = Tracker.getTrackerById(id, trackers); + + if (t == null) { + throw new MojoExecutionException("could not obtain the tracker with id " + id); + } + + trackerToAction.put(id, action); + buffer.append(",").append(id); + } + + filters.put("tracker", buffer.substring(1)); + + // create status filters + + for (String s : statusIds.split(",")) { + Integer id = Integer.valueOf(s.trim()); + + IssueStatus t = IssueStatus.getIssueStatusById(id, statuses); + + if (t == null) { + throw new MojoExecutionException("could not obtain the status with id " + id); + } + } + + filters.put("status", statusIds); + + if (categoryIds != null && !categoryIds.trim().isEmpty()) { + + // create category filters + + for (String s : categoryIds.split(",")) { + Integer id = Integer.valueOf(s.trim()); + + IssueCategory t = IssueCategory.getIssueCategoryById(id, categories); + + if (t == null) { + throw new MojoExecutionException("could not obtain the category with id " + id); + } + } + + filters.put("category", categoryIds); + } + + // create version filters + + List<Version> versionList = new ArrayList<Version>(); + if (onlyCurrentVersion) { + // nothing to do here, the issue collector will treate this simple case + versionList.add(releaseVersion); + + } else { + + buffer = new StringBuilder(); + + for (Version v : versions) { + + int id = v.getId(); + + boolean keep = true; + if (id != releaseVersion.getId()) { + + //TODO TC-20090914 make this better, since this is a very soft test + // to test only the effective date + + if (v.getEffectiveDate() == null) { + // skip this unclosed version + keep = false; + } + } + + if (keep) { + + buffer.append(",").append(v.getName()); + versionList.add(v); + } + } + + versions = versionList.toArray(new Version[versionList.size()]); + filters.put("version", buffer.substring(1)); + } + return result; + } + + @Override protected void doAction() throws Exception { - //TODO-FILL_ME + + // create version if required + + if (needCreateVersion) { + //TODO call the rest service rest/add_version + + // then reload versions + releaseVersion = helper.getVersionByName(true, versionId); + } + + if (releaseVersion.getEffectiveDate() == null) { + getLog().warn("the version " + versionId + " is not effective on redmine, will update effective-date property to today"); + //TODO call the reset service rest/update_version + + releaseVersion.setEffectiveDate(new Date()); + } + + getLog().info("project " + redmineProject.getName()); + getLog().info("version " + releaseVersion.getName()); + getLog().info("release date " + releaseVersion.getEffectiveDate()); + getLog().info("release user " + redmineUser.getFirstname() + " " + redmineUser.getLastname()); + + // init issues collector + + IssuesCollector collector = new IssuesCollector(helper, getLog(), verbose); + + // collects issues + + try { + + collector.collect(this); + + } catch (RedmineDataException ex) { + collector.clearFilters(); + throw new MojoExecutionException("could not obtains issues for reason " + ex.getMessage(), ex); + } + + //TODO make some logic checks : version must be + // build the maven changes.xml as memory model + ChangesDocument doc = buildChangesDocument(redmineProject, releaseVersion, redmineUser, collector); + + // store the generated file + ChangesXpp3Writer xppWriter = new ChangesXpp3Writer(); + + XmlStreamWriter writer = new XmlStreamWriter(xmlPath); + + xppWriter.write(writer, doc); + + getLog().info("changes.xml saved in " + xmlPath.getParentFile().getAbsolutePath()); } + + protected Version prepareVersion() throws XmlPullParserException, IOException, DataNotFoundException, MojoExecutionException, RedmineDataException { + + Version version = helper.getVersionByName(true, versionId); + if (version == null) { + // must create a new version + // must create a versions ? + getLog().warn("the version " + versionId + " does not exist, will create it on redmine"); + if (offline) { + throw new MojoExecutionException("offline is on, can not reach nuiton server"); + } + //TODO use rest/add_versions + // and reload versions + + version = helper.getVersionByName(true, versionId); + } + + if (version == null) { + throw new MojoExecutionException("could not retreave version " + versionId); + } + + if (version.getEffectiveDate() == null) { + //TODO do an update rest request to set effectiveDate to today + getLog().warn("the version " + versionId + " is not effective on redmine, will update effective-date property to today"); + + } + return version; + } + + protected ChangesDocument buildChangesDocument(Project project, Version version, User user, IssuesCollector collector) throws DataNotFoundException, RedmineDataException { + ChangesDocument doc = new ChangesDocument(); + Properties properties = new Properties(); + Author author = new Author(); + author.setAuthorEmail(user.getMail()); + author.setName(user.getFirstname() + " " + user.getLastname()); + properties.setAuthor(author); + properties.setTitle(changesTitle); + doc.setProperties(properties); + + Body body = new Body(); + doc.setBody(body); + body.setModelEncoding(encoding); + + Issue[] issues = collector.getIssues(); +// Version[] versions = collector.getVersions(); + + // iterate on versions + for (Version v : versions) { + + boolean treateReleaseVersion = v.getId() == version.getId(); + + Issue[] issuesForVersion = Issue.filterByVersionId(v.getId(), issues); + + helper.setVersionId(v.getName()); + + Release release = new Release(); + body.addRelease(release); + + release.setVersion(v.getName()); + + if (v.getEffectiveDate() != null) { + + release.setDateRelease(dateFormat.format(v.getEffectiveDate())); + } + + if (v.getDescription() != null) { + release.setDescription(v.getDescription()); + } + + if (treateReleaseVersion) { + if (releaseDescription != null) { + + // override the release description + // this is the main version to release + release.setDescription(releaseDescription); + } + if (release.getDateRelease() == null) { + + release.setDateRelease(dateFormat.format(new Date())); + } + } + + // iterate on actions ? or order it + + for (Entry<Integer, String> entry : trackerToAction.entrySet()) { + + String type = entry.getValue(); + + // get issues for the tracker + Issue[] issuesForTracker = Issue.filterByTrackerId(entry.getKey(), issuesForVersion); + + for (Issue issue : issuesForTracker) { + + // new action + Action action = new Action(); + action.setSystem("redmine"); + action.setAction(issue.getSubject()); + action.setIssue(issue.getId() + ""); + action.setType(type); + + if (issue.getDueDate() != null) { + action.setDate(dateFormat.format(issue.getDueDate())); + } else { + getLog().warn("issue " + issue.getSubject() + " has no dueDate..."); + } + + + int id = issue.getAssignedToId(); + if (id == 0) { + getLog().warn("issue " + issue.getSubject() + " is not assigned to any user, this is not normal..."); + id = issue.getAuthorId(); + } + User a = helper.getUserById(overwrite, issue.getAuthorId()); + if (a != null) { + action.setDueTo(a.getFirstname() + " " + a.getLastname()); + action.setDueToEmail(a.getMail()); + + //TODO should check this is a developper name on pom.xml + action.setDev(a.getLogin()); + } + + release.addAction(action); + } + } + } + + return doc; + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectId; + } + + @Override + public String getVersionId() { + return versionId; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersion; + } + + @Override + public int getMaxEntries() { + // no filter on priority for building the changes.xml file + return 0; + } + + @Override + public String getPriorityIds() { + // no filter on priority for building the changes.xml file + return null; + } + + @Override + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + @Override + public String getCategoryIds() { + return getFilters().get("category"); + } + + @Override + public String getVersionNames() { + return getFilters().get("version"); + } + + @Override + public String getStatusIds() { + return getFilters().get("status"); + } + + @Override + public String getTrackerIds() { + return getFilters().get("tracker"); + } + + protected Map<String, String> getFilters() { + return filters; + } } Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectDataMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectDataMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectDataMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,73 +0,0 @@ -package org.nuiton.redmine.plugin; - -import java.util.Arrays; -import org.apache.maven.plugin.MojoFailureException; - -/** - * Retreave some datas on a project. - * - * Given the {@link #dataType}, the {link #dataFormat} and the - * {@link #projectId}, will ask to redmine server, all datas required. - * - * @author tchemit - * @goal get-project-data - * @requiresProject true - * - * @since 1.0.0 - */ -public class GetProjectDataMojo extends AbstractGetProjectDataMojo { - - /** - * The data type to retreave (all values of enum {@link #DataType} : - * <ul> - * <li>project</li> - * <li>users</li> - * <li>trackers</li> - * <li>versions</li> - * </ul> - * <p/> - * - * @parameter expression="${redmine.projectDataType}" - * @required - * @since 1.0.0 - */ - protected String dataType; - - @Override - protected DataType getDataType() throws MojoFailureException { - VersionDataType _dataType; - try { - _dataType = VersionDataType.valueOf(dataType); - } catch (Exception e) { - throw new MojoFailureException("could not obtain data type " + dataType + " in " + Arrays.toString(VersionDataType.values())); - } - return _dataType; - } - - @Override - protected void doAction() throws Exception { - - String result = session.askContent("rest", action, projectId); - if (getLog().isDebugEnabled()) { - getLog().debug("result : " + result); - } - } - - public enum VersionDataType implements DataType { - - project("get_project"), - users("get_project_users"), - trackers("get_project_trackers"), - versions("get_project_versions"); - final String action; - - private VersionDataType(String action) { - this.action = action; - } - - @Override - public String getAction() { - return action; - } - } -} Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,81 +0,0 @@ -package org.nuiton.redmine.plugin; - -import java.util.Arrays; -import org.apache.maven.plugin.MojoFailureException; - -/** - * Retreave some datas on a given version of a project. - * - * Given the {@link #dataType}, the {link #dataFormat} and the - * {@link #projectId}, and {@link #versionId} will ask to redmine server, - * all datas required. - * - * @author tchemit - * @goal get-project-version-data - * @requiresProject true - * - * @since 1.0.0 - */ -public class GetProjectVersionDataMojo extends AbstractGetProjectDataMojo { - - /** - * Version identifier. - * - * @parameter expression="${versionId}" - * @required - * @since 1.0.0 - */ - protected String versionId; - /** - * The data type to retreave (all values of enum {@link #DataType} : - * <ul> - * <li>version</li> - * <li>issues</li> - * <li>files</li> - * </ul> - * <p/> - * - * @parameter expression="${redmine.versionDataType}" - * @required - * @since 1.0.0 - */ - protected String dataType; - - @Override - protected void doAction() throws Exception { - - String result = session.askData(new String[]{"rest", action, projectId}, "version_name", versionId); - - if (getLog().isDebugEnabled()) { - getLog().info(result); - } - } - - @Override - protected DataType getDataType() throws MojoFailureException { - VersionDataType _dataType; - try { - _dataType = VersionDataType.valueOf(dataType); - } catch (Exception e) { - throw new MojoFailureException("could not obtain data type " + dataType + " in " + Arrays.toString(VersionDataType.values())); - } - return _dataType; - } - - public enum VersionDataType implements DataType { - - version("get_version"), - issues("get_version_issues"), - files("get_version_files"); - final String action; - - private VersionDataType(String action) { - this.action = action; - } - - @Override - public String getAction() { - return action; - } - } -} Deleted: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/RedmineReportMojo.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/RedmineReportMojo.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/RedmineReportMojo.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,19 +0,0 @@ -package org.nuiton.redmine.plugin; - -/** - * Generates a report for issues from Redmine's server - * - * @author tchemit - * @goal redmine-report - * @requiresProject true - * @requiresDirectInvocation - * - * @since 1.0.0 - */ -public class RedmineReportMojo extends AbstractRedmineMojo { - - @Override - protected void doAction() throws Exception { - //TODO-FILL_ME - } -} Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractIssuesReport.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractIssuesReport.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractIssuesReport.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,183 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.redmine.IssuesCollector; +import org.nuiton.redmine.IssueCollectorConfiguration; +import org.nuiton.redmine.RedmineDataException; +import org.nuiton.redmine.RedmineDataHelper; +import java.util.Locale; +import java.util.Map; +import org.apache.maven.reporting.MavenReportException; +import org.nuiton.redmine.RedmineConfigurationHelper; +import org.nuiton.redmine.model.Issue; + +/** + * Abstract Generates a report for issues from Redmine's server + * + * @author tchemit + * @since 1.0.0 + */ +public abstract class AbstractIssuesReport extends AbstractRedmineReport implements IssueCollectorConfiguration { + + /** + * Model helper + * + * @since 1.0.0 + */ + protected RedmineDataHelper modelHelper; + /** + * The meta to group issues (or null if no grouping) + * + * @since 1.0.0 + */ + protected final String group; + + protected AbstractIssuesReport(String group) { + this.group = group; + } + + protected abstract String getColumnNames(); + + protected abstract Map<String, String> getFilters(); + + protected abstract String getIssueLinkTemplate(); + + protected abstract String getVersionLinkTemplate(); + + /////////////////////////////////////////////////////////////////////////// + /// MavenReport + /////////////////////////////////////////////////////////////////////////// + @Override + public final String getOutputName() { + return "redmine-report" + (group == null ? "" : ("-by-" + group)); + } + + @Override + public final String getName(Locale locale) { + return getBundle(locale).getString("report.name" + (group == null ? "" : "-" + group)); + } + + @Override + public final String getDescription(Locale locale) { + return getBundle(locale).getString("report.description" + (group == null ? "" : "-" + group)); + } + + @Override + public boolean canGenerateReport() { + + boolean result = super.canGenerateReport(); + if (result) { + + setVersionId(RedmineConfigurationHelper.removeSnapshotSuffix(getVersionId())); + + modelHelper = new RedmineDataHelper(dataProvider); + modelHelper.setProjectId(getProjectId()); + modelHelper.setVersionId(getVersionId()); + + } + + return true; + } + + @Override + public void executeReport(Locale locale) + throws MavenReportException { + + if (isOnlyCurrentVersion()) { + getLog().info(getBundle(locale).getString("report.message.only.for.current.version") + " " + getVersionId()); + } + + if (verbose) { + getLog().info("project " + getProjectId()); + getLog().info("version " + getVersionId()); + } + + // init issues collector + + IssuesCollector collector = new IssuesCollector(modelHelper, getLog(), verbose); + + try { + + collector.collect(this); + + } catch (RedmineDataException ex) { + collector.clearFilters(); + throw new MavenReportException("could not obtains issues for reason " + ex.getMessage(), ex); + } + + // get issues from collector + + Issue[] issues = collector.getIssues(); + + try { + + if (issues.length == 0) { + getLog().warn("no issue to treate, will generate an empty raport."); + + IssueReportGenerator reportGenerator = new IssueReportGenerator(); + + reportGenerator.doGenerateEmptyReport(getBundle(locale), getSink()); + + } else { + IssueReportGenerator report = new IssueReportGenerator(getLog(), getColumnNames(), getGroup()); + + report.setIssueLinkTemplate(getIssueLinkTemplate()); + report.setVersionLinkTemplate(getVersionLinkTemplate()); + report.setUrl(redmineUrl.toString()); + + report.setIssues(issues); + report.setUsers(modelHelper.getUsers(true)); + report.setIssueCategories(modelHelper.getIssueCategories(true)); + report.setIssueStatuses(modelHelper.getIssueSatuses(true)); + report.setIssuePriorities(modelHelper.getIssuePriorities(true)); + report.setTrackers(modelHelper.getTrackers(true)); + report.setVersions(modelHelper.getVersions(true)); + + report.doGenerateReport(getBundle(locale), getSink(), getLog()); + } + + } catch (MavenReportException mre) { + // Rethrow this error from RedmineReportGenerator( String, String ) + // so that the build fails + throw mre; + } catch (Exception e) { + e.printStackTrace(); + } finally { + collector.clearFilters(); + } + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getCategoryIds() { + return getFilters() == null ? null : getFilters().get("category"); + } + + @Override + public String getVersionNames() { + return getFilters() == null ? null : getFilters().get("version"); + } + + @Override + public String getPriorityIds() { + return getFilters() == null ? null : getFilters().get("priority"); + } + + @Override + public String getStatusIds() { + return getFilters() == null ? null : getFilters().get("status"); + } + + @Override + public String getTrackerIds() { + return getFilters() == null ? null : getFilters().get("tracker"); + } + + /////////////////////////////////////////////////////////////////////////// + /// Others + /////////////////////////////////////////////////////////////////////////// + protected final String getGroup() { + return group; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractIssuesReport.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractRedmineReport.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractRedmineReport.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractRedmineReport.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,432 @@ +package org.nuiton.redmine.plugin.report; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.net.URL; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.ResourceBundle; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext; +import org.apache.maven.doxia.site.decoration.Body; +import org.apache.maven.doxia.site.decoration.DecorationModel; +import org.apache.maven.doxia.site.decoration.Skin; +import org.apache.maven.doxia.siterenderer.Renderer; +import org.apache.maven.doxia.siterenderer.RendererException; +import org.apache.maven.doxia.siterenderer.SiteRenderingContext; +import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink; +import org.apache.maven.model.IssueManagement; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.reporting.AbstractMavenReport; +import org.apache.maven.reporting.MavenReportException; +import org.apache.maven.settings.Settings; +import org.codehaus.plexus.i18n.I18N; +import org.nuiton.Plugin; +import org.nuiton.redmine.RedmineConfiguration; +import org.nuiton.redmine.RedmineConfigurationHelper; +import org.nuiton.redmine.RedmineDataProvider; +import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; + +/** + * Abstract redmine report mojo. + * + * @author chemit + * @since 1.0.0 + */ +public abstract class AbstractRedmineReport extends AbstractMavenReport implements RedmineConfiguration, Plugin { + + /** + * The Maven Project. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + protected MavenProject project; + /** + * Dependance du settings. + * + * @parameter default-value="${settings}" + * @required + * @readonly + * @since 1.0.0 + */ + protected Settings settings; + /** + * Local Repository. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + protected ArtifactRepository localRepository; + /** + * Report output directory. Note that this parameter is only relevant if the goal is run from the command line or + * from the default build lifecycle. If the goal is run indirectly as part of a site generation, the output + * directory configured in the Maven Site Plugin is used instead. + * + * @parameter default-value="${project.reporting.outputDirectory}" + */ + protected File outputDirectory; + /** + * Server id to use for authentication (must be defined in your setting + * and use the maven >= 2.1.0 password encryption mecanism). + * <p/> + * + * @parameter expression="${redmine.serverId}" + * @since 1.0.0 + */ + protected String serverId; + /** + * The real basedir redmine url. + * + * @parameter expression="${redmine.url}" + * @since 1.0.0 + */ + protected URL redmineUrl; + /** + * The redmine's server login. + * + * @parameter expression="${redmine.username}" + * @since 1.0.0 + */ + protected String redmineUsername; + /** + * The redmine's server password. + * + * @parameter expression="${redmine.password}" + * @since 1.0.0 + */ + protected String redminePassword; + /** + * The encoding to use to read and write files. + * + * @parameter expression="${redmine.encoding}" default-value="${project.reporting.outputEncoding}" + * @since 1.0.0 + */ + protected String encoding; + /** + * Un flag pour activer le mode verbeux. + * + * @parameter expression="${redmine.verbose}" default-value="${maven.verbose}" + * @since 1.0.0 + */ + protected boolean verbose; + /** + * Un flag pour activer le mode connecté. + * + * @parameter expression="${redmine.offline}" default-value="${settings.offline}" + * @since 1.0.0 + */ + protected boolean offline; + /** + * Un flag pour recharger les données locales si elles existent. + * + * @parameter expression="${redmine.overwrite}" default-value="false" + * @since 1.0.0 + */ + protected boolean overwrite; + /** + * Le répertoire où écrire les données rapatriées depuis redmine au format xml. + * + * @parameter expression="${redmine.localDir}" default-value="${project.build.directory}/redmine-cache" + * @since 1.0.0 + * @required + */ + protected File localDir; + /** + * password decypher + * + * @component role="org.sonatype.plexus.components.sec.dispatcher.SecDispatcher" roleHint="maven-redmine-plugin" + * @readonly + * @required + * @since 1.0.0 + */ + protected SecDispatcher sec; + /** + * @component + */ + protected ArtifactResolver resolver; + /** + * @component + */ + protected ArtifactFactory factory; + /** + * Internationalization. + * + * @component + */ + protected I18N i18n; + /** + * Doxia Site Renderer. + * + * @component + */ + protected Renderer siteRenderer; +// /** +// * SiteTool component. +// * +// * @since 1.0.0 +// * @component +// */ +// protected SiteTool siteTool; + /** + * Redmine data provider + * @readonly + * @since 1.0.0 + */ + protected RedmineDataProvider dataProvider; + + /////////////////////////////////////////////////////////////////////////// + /// Mojo + /////////////////////////////////////////////////////////////////////////// + @Override + public void execute() throws MojoExecutionException { + if (!canGenerateReport()) { + String reportName = getName(Locale.FRENCH); + getLog().warn("Due to previously errors, No " + reportName + " will be generated."); + return; + } + + // TODO: push to a helper? Could still be improved by taking more of the site information from the site plugin + try { + DecorationModel model = new DecorationModel(); + model.setBody(new Body()); + Map<String, String> attributes = new HashMap<String, String>(); + attributes.put("outputEncoding", encoding); + Locale locale = Locale.getDefault(); + SiteRenderingContext siteContext = siteRenderer.createContextForSkin(getSkinArtifactFile(), attributes, + model, getName(locale), locale); + + RenderingContext context = new RenderingContext(outputDirectory, getOutputName() + ".html"); + + SiteRendererSink sink = new SiteRendererSink(context); + generate(sink, locale); + + outputDirectory.mkdirs(); + + Writer writer = new FileWriter(new File(outputDirectory, getOutputName() + ".html")); + + siteRenderer.generateDocument(writer, sink, siteContext); + + siteRenderer.copyResources(siteContext, new File(project.getBasedir(), "src/site/resources"), + outputDirectory); + } catch (RendererException e) { + throw new MojoExecutionException( + "An error has occurred in " + getName(Locale.ENGLISH) + " report generation.", e); + } catch (IOException e) { + throw new MojoExecutionException( + "An error has occurred in " + getName(Locale.ENGLISH) + " report generation.", e); + } catch (MavenReportException e) { + throw new MojoExecutionException( + "An error has occurred in " + getName(Locale.ENGLISH) + " report generation.", e); + } + } + + /////////////////////////////////////////////////////////////////////////// + /// MavenReport + /////////////////////////////////////////////////////////////////////////// + @Override + public boolean canGenerateReport() { + IssueManagement issueManagement = project.getIssueManagement(); + + if (issueManagement == null) { + getLog().error("No Issue Management set."); + + return false; + } else if ((issueManagement.getUrl() == null) || (issueManagement.getUrl().trim().equals(""))) { + getLog().error("No URL set in Issue Management."); + + return false; + } else if ((issueManagement.getSystem() != null) && !(issueManagement.getSystem().equalsIgnoreCase(RedmineConfigurationHelper.REDMINE_SYSTEM))) { + getLog().error("Redmine's Reports only supports 'redmine' Issue Management system."); + + return false; + } + + if (offline) { + getLog().error("Redmine's Reports can not be generated when Maven is offline."); + + return false; + } + + // obtain a data provider + + try { + dataProvider = RedmineConfigurationHelper.initDataProvider( + this, + getLog(), + serverId, + settings, + project.getIssueManagement(), + sec); + } catch (Exception ex) { + getLog().error("Could not initialize redmine data provider for reason " + ex.getMessage(), ex); + return false; + } + return true; + } + + @Override + public String getName(Locale locale) { + return getBundle(locale).getString("report.name"); + } + + @Override + public String getDescription(Locale locale) { + return getBundle(locale).getString("report.description"); + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractMavenReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getOutputDirectory() { + return outputDirectory.getAbsolutePath(); + } + + @Override + protected Renderer getSiteRenderer() { + return siteRenderer; + } + + /////////////////////////////////////////////////////////////////////////// + /// Plugin + /////////////////////////////////////////////////////////////////////////// + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + /////////////////////////////////////////////////////////////////////////// + /// RedmineConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public URL getRedmineUrl() { + return redmineUrl; + } + + @Override + public void setRedmineUrl(URL redmineUrl) { + this.redmineUrl = redmineUrl; + } + + @Override + public File getLocalDir() { + return localDir; + } + + @Override + public void setLocalDir(File localDir) { + this.localDir = localDir; + } + + @Override + public boolean isOffline() { + return offline; + } + + @Override + public void setOffline(boolean offline) { + this.offline = offline; + } + + @Override + public boolean isOverwrite() { + return overwrite; + } + + @Override + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; + } + + @Override + public String getRedminePassword() { + return redminePassword; + } + + @Override + public void setRedminePassword(String redminePassword) { + this.redminePassword = redminePassword; + } + + @Override + public String getRedmineUsername() { + return redmineUsername; + } + + @Override + public void setRedmineUsername(String redmineUsername) { + this.redmineUsername = redmineUsername; + } + + @Override + public String getEncoding() { + return encoding; + } + + @Override + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + /////////////////////////////////////////////////////////////////////////// + /// Others + /////////////////////////////////////////////////////////////////////////// + protected ResourceBundle getBundle(Locale locale) { + return ResourceBundle.getBundle("redmine-report", locale, this.getClass().getClassLoader()); + } + + protected File getSkinArtifactFile() + throws MojoExecutionException { + Skin skin = Skin.getDefaultSkin(); + + String version = skin.getVersion(); + Artifact artifact; + try { + if (version == null) { + version = Artifact.RELEASE_VERSION; + } + VersionRange versionSpec = VersionRange.createFromVersionSpec(version); + artifact = factory.createDependencyArtifact(skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", + null, null); + + resolver.resolve(artifact, project.getRemoteArtifactRepositories(), localRepository); + } catch (InvalidVersionSpecificationException e) { + throw new MojoExecutionException("The skin version '" + version + "' is not valid: " + e.getMessage()); + } catch (ArtifactResolutionException e) { + throw new MojoExecutionException("Unable to find skin", e); + } catch (ArtifactNotFoundException e) { + throw new MojoExecutionException("The skin does not exist: " + e.getMessage()); + } + + return artifact.getFile(); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/AbstractRedmineReport.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssueReportGenerator.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssueReportGenerator.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssueReportGenerator.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,683 @@ +package org.nuiton.redmine.plugin.report; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import org.apache.maven.doxia.sink.Sink; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.reporting.MavenReportException; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.ResourceBundle; +import java.util.TreeMap; +import org.codehaus.plexus.util.StringUtils; +import org.nuiton.redmine.model.I18nAble; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.IssueCategory; +import org.nuiton.redmine.model.IssuePriority; +import org.nuiton.redmine.model.IssueStatus; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; + +/** + * Generates a Redmine report. + * + * @author tchemit + * @since 1.0.0 + */ +public class IssueReportGenerator { + + /** + * The token any of urls denoting the base URL for the issue management. + */ + private static final String URL_TOKEN = "%URL%"; + /** + * The token in {@link #issueLinkTemplate} denoting the issue ID. + */ + private static final String ISSUE_TOKEN = "%ISSUE%"; + /** + * The token in {@link #versionLinkTemplate} denoting the version ID. + */ + private static final String VERSION_TOKEN = "%VERSION%"; + + /** + * Universe of columns of the report. + * + * Can retreave th i18n header key by {@link #getI18nKey()} and have the + * logic of each cell generation in the methd {@link #sinkInsideCell(Sink, RedmineReportGenerator, Version, Issue)} + * + * @see #columnOrder + */ + public enum ReportColumn { + + key(false, "report.label.key") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + generator.constructIssueLink(issue, sink); + } + + @Override + protected Integer getGroupId(Issue issue) { + throw new UnsupportedOperationException(name() + "does not supports grouping"); + } + }, + summary(false, "report.label.summary") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + generator.sinkRawText(sink, issue.getDescription()); + } + + @Override + protected Integer getGroupId(Issue issue) { + throw new UnsupportedOperationException(name() + "does not supports grouping"); + } + }, + status(true, "report.label.status") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + + int id = issue.getStatusId(); + String t = id + ""; + IssueStatus status = generator.getIssueStatus(id); + if (status == null) { + t = id == 0 ? "-" : t; + } else { + t = status.getName(); + } + generator.sinkI18nAble(sink, id, status); + + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getStatusId(); + } + }, + assignee(true, "report.label.by") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getAssignedToId(); + User u = generator.getUser(id); + String t = issue.getAssignedToId() + ""; + if (u == null) { + generator.sinkRawText(sink, id == 0 ? " - " : t); + } else { + // ajout d'un lien (mailto:) + sink.link("mailto:" + u.getMail()); + sink.text(u.getLogin()); + sink.link_(); + } + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getAssignedToId(); + } + }, + reporter(true, "report.label.reporter") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getAuthorId(); + User u = generator.getUser(id); + String t = issue.getAuthorId() + ""; + if (u == null) { + generator.sinkRawText(sink, id == 0 ? " - " : t); + } else { + // ajout d'un lien (mailto:) + sink.link("mailto:" + u.getMail()); + sink.text(u.getLogin()); + sink.link_(); + } + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getAuthorId(); + } + }, + tracker(true, "report.label.type") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getTrackerId(); + Tracker status = generator.getTracker(id); + generator.sinkI18nAble(sink, id, status); + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getTrackerId(); + } + }, + priority(true, "report.label.priority") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getPriorityId(); + IssuePriority p = generator.getIssuePriority(id); + generator.sinkI18nAble(sink, id, p); + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getPriorityId(); + } + }, + version(true, "report.label.version") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getFixedVersionId(); + Version v2 = generator.getVersion(id); + generator.sinkI18nAble(sink, id, v2); + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getFixedVersionId(); + } + }, + category(true, "report.label.category") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + int id = issue.getCategoryId(); + IssueCategory status = generator.getIssueCategory(id); + generator.sinkI18nAble(sink, id, status); + } + + @Override + protected Integer getGroupId(Issue issue) { + return issue.getCategoryId(); + } + }, + createdon(false, "report.label.created") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + Date d = issue.getCreatedOn(); + generator.sinkDate(sink, d); + } + + @Override + protected Integer getGroupId(Issue issue) { + throw new UnsupportedOperationException(name() + "does not supports grouping"); + } + }, + updatedon(false, "report.label.updated") { + + @Override + public void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue) { + Date d = issue.getUpdatedOn(); + generator.sinkDate(sink, d); + } + + @Override + protected Integer getGroupId(Issue issue) { + throw new UnsupportedOperationException(name() + "does not supports grouping"); + } + }; + private boolean canGroup; + private String i18nKey; + + private ReportColumn(boolean canGroup, String i18nKey) { + this.canGroup = canGroup; + this.i18nKey = i18nKey; + } + + public boolean isCanGroup() { + return canGroup; + } + + public String getI18nKey() { + return i18nKey; + } + + public abstract void sinkInsideCell(Sink sink, IssueReportGenerator generator, Issue issue); + + protected abstract Integer getGroupId(Issue issue); + + public void collectGroups(Issue[] issues, Map<Integer, List<Issue>> groups) { + for (Issue issue : issues) { + Integer id = getGroupId(issue); + List<Issue> c = groups.get(id); + if (c == null) { + c = new ArrayList<Issue>(); + groups.put(id, c); + } + c.add(issue); + } + } + } + private ReportColumn[] columns; + private ReportColumn groupColumn; + private String url; + private String issueLinkTemplate; + private String versionLinkTemplate; + private Issue[] issues; + private Map<Integer, IssueCategory> issueCategories; + private Map<Integer, IssuePriority> issuePriorities; + private Map<Integer, Version> versions; + private Map<Integer, IssueStatus> issueStatuses; + private Map<Integer, User> users; + private Map<Integer, Tracker> trackers; + private DateFormat dateFormat; + + public IssueReportGenerator() { + } + + /** + * + * @param log the logger + * @param columnNames The names of the columns to include in the report + * @param groupBy the group by column name (or null if not grouped) + * @throws MavenReportException + */ + public IssueReportGenerator(Log log, String columnNames, String groupBy) + throws MavenReportException { + + String[] columnNamesArray = columnNames.split(","); + int nbCols = columnNamesArray.length; + List<ReportColumn> tmp = new ArrayList<ReportColumn>(nbCols); + for (String col : columnNames.split(",")) { + try { + ReportColumn valueOf = ReportColumn.valueOf(col.trim().toLowerCase()); + tmp.add(valueOf); + } catch (Exception e) { + log.warn(col + " is an unkown column name, authorized : " + Arrays.toString(ReportColumn.values())); + if (log.isDebugEnabled()) { + log.debug(e); + } + } + } + if (tmp.isEmpty()) { + // This can happen if the user has configured column names and they are all invalid + throw new MavenReportException( + "maven-redmine-plugin: None of the configured columnNames '" + columnNames + "' are valid."); + } + if (groupBy != null && !groupBy.trim().isEmpty()) { + try { + groupColumn = ReportColumn.valueOf(groupBy.trim().toLowerCase()); + + if (!groupColumn.isCanGroup()) { + log.warn(groupColumn + " is not a grouping columne, grouping will be skip."); + groupColumn = null; + } else { + // remove the group column from the table + tmp.remove(groupColumn); + } + + log.info("group by " + groupColumn); + + } catch (Exception e) { + log.warn(groupBy + " is an unkown group column name, grouping will be skip."); + if (log.isDebugEnabled()) { + log.debug(e); + } + } + } + + columns = tmp.toArray(new ReportColumn[tmp.size()]); + } + + public void doGenerateEmptyReport(ResourceBundle bundle, Sink sink) { + sinkBeginReport(sink, bundle); + + sink.text(bundle.getString("report.error")); + + sinkEndReport(sink); + } + + public void doGenerateReport(ResourceBundle bundle, Sink sink, Log log) + throws MojoExecutionException { + + if (issues != null && issues.length == 0) { + throw new MojoExecutionException( + "maven-redmine-plugin: Can not generate report if no issues, use the doGenerateEmptyReport instead"); + } + + String d = bundle.getString("report.date.format"); + + dateFormat = new SimpleDateFormat(d); + + sinkBeginReport(sink, bundle); + + if (groupColumn == null) { + + sink.table(); + + constructHeaderRow(sink, bundle); + + constructDetailRows(sink, issues); + + sink.table_(); + + } else { + + // group data + + Map<Integer, List<Issue>> groups = new TreeMap<Integer, List<Issue>>(); + + groupColumn.collectGroups(issues, groups); + + for (Entry<Integer, List<Issue>> e : groups.entrySet()) { + + List<Issue> currentIssues = e.getValue(); + + sink.sectionTitle2(); + + sinkRawText(sink, bundle.getString(groupColumn.getI18nKey()) + " : "); + + groupColumn.sinkInsideCell(sink, this, currentIssues.get(0)); + + sink.sectionTitle2_(); + + sink.table(); + + constructHeaderRow(sink, bundle); + + constructDetailRows(sink, currentIssues.toArray(new Issue[currentIssues.size()])); + + sink.table_(); + } + + } + + sinkEndReport(sink); + } + + /** + * Checks whether links to the issues can be generated. + * + * @return <code>true</code> if issue links can be generated, <code>false</code> otherwise. + */ + public boolean canGenerateIssueLinks() { + if (!StringUtils.isEmpty(issueLinkTemplate)) { + return false; + } + return !StringUtils.isBlank(issueLinkTemplate) && (!StringUtils.isBlank(getUrl()) || issueLinkTemplate.indexOf(URL_TOKEN) < 0); + } + + /** + * Checks whether links to the issues can be generated. + * + * @return <code>true</code> if issue links can be generated, <code>false</code> otherwise. + */ + public boolean canGenerateVersionLinks() { + if (!StringUtils.isEmpty(versionLinkTemplate)) { + return false; + } + return !StringUtils.isBlank(versionLinkTemplate) && (!StringUtils.isBlank(getUrl()) || versionLinkTemplate.indexOf(URL_TOKEN) < 0); + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } + + public void setIssueLinkTemplate(String issueLinkTemplate) { + this.issueLinkTemplate = issueLinkTemplate; + } + + public void setVersionLinkTemplate(String versionLinkTemplate) { + this.versionLinkTemplate = versionLinkTemplate; + } + + public void setIssueCategories(IssueCategory[] issueCategories) { + Map<Integer, IssueCategory> t = new TreeMap<Integer, IssueCategory>(); + for (IssueCategory s : issueCategories) { + t.put(s.getId(), s); + } + this.issueCategories = t; + } + + public void setIssueStatuses(IssueStatus[] issueStatuses) { + Map<Integer, IssueStatus> t = new TreeMap<Integer, IssueStatus>(); + for (IssueStatus s : issueStatuses) { + t.put(s.getId(), s); + } + this.issueStatuses = t; + } + + public void setIssuePriorities(IssuePriority[] issuePriorities) { + Map<Integer, IssuePriority> t = new TreeMap<Integer, IssuePriority>(); + for (IssuePriority s : issuePriorities) { + t.put(s.getId(), s); + } + this.issuePriorities = t; + } + + public void setUsers(User[] users) { + Map<Integer, User> t = new TreeMap<Integer, User>(); + for (User s : users) { + t.put(s.getId(), s); + } + this.users = t; + } + + public void setVersions(Version[] users) { + Map<Integer, Version> t = new TreeMap<Integer, Version>(); + for (Version s : users) { + t.put(s.getId(), s); + } + this.versions = t; + } + + public void setTrackers(Tracker[] users) { + Map<Integer, Tracker> t = new TreeMap<Integer, Tracker>(); + for (Tracker s : users) { + t.put(s.getId(), s); + } + this.trackers = t; + } + + public void setIssues(Issue[] issues) { + this.issues = issues; + } + + protected void constructHeaderRow(Sink sink, ResourceBundle bundle) { + + sink.tableRow(); + + for (ReportColumn c : columns) { + sinkHeader(sink, bundle.getString(c.getI18nKey())); + } + + sink.tableRow_(); + } + + protected void constructDetailRows(Sink sink, Issue[] issues) { + + for (Issue issue : issues) { + + sink.tableRow(); + + for (ReportColumn col : columns) { + + sink.tableCell(); + + col.sinkInsideCell(sink, this, issue); + + sink.tableCell_(); + + } + + sink.tableRow_(); + } + } + + protected String parseIssueLink(String issue) { + String parseLink; + String issueLink = this.issueLinkTemplate; + parseLink = issueLink.replaceFirst(ISSUE_TOKEN, issue); + + if (parseLink.indexOf(URL_TOKEN) >= 0) { + String u = this.url.substring(0, this.url.lastIndexOf("/")); + parseLink = parseLink.replaceFirst(URL_TOKEN, u); + } + + return parseLink; + } + + protected String parseVersionLink(String issue) { + String parseLink; + String issueLink = this.versionLinkTemplate; + parseLink = issueLink.replaceFirst(VERSION_TOKEN, issue); + + if (parseLink.indexOf(URL_TOKEN) >= 0) { + String u = this.url.substring(0, this.url.lastIndexOf("/")); + parseLink = parseLink.replaceFirst(URL_TOKEN, u); + } + + return parseLink; + } + + protected void constructIssueLink(Issue issue, Sink sink) { + String id = issue.getId() + ""; + + if (StringUtils.isNotEmpty(id)) { + + sink.link(parseIssueLink(id)); + + sink.text(issue.getSubject()); + + sink.link_(); + } + } + + protected void constructVersionLink(Version v, Sink sink, String prefix) { + String id = v.getId() + ""; + + if (StringUtils.isNotEmpty(id)) { + + sink.link(parseVersionLink(id)); + + sink.text(prefix + " " + v.getName()); + + sink.link_(); + } + } + + protected boolean isGroup() { + return groupColumn != null; + } + + protected IssueStatus getIssueStatus(int id) { + return issueStatuses == null ? null : issueStatuses.get(id); + } + + protected IssueCategory getIssueCategory(int id) { + return issueCategories == null ? null : issueCategories.get(id); + } + + protected IssuePriority getIssuePriority(int id) { + return issuePriorities == null ? null : issuePriorities.get(id); + } + + protected Version getVersion(int id) { + return versions == null ? null : versions.get(id); + } + + protected User getUser(int id) { + return users == null ? null : users.get(id); + } + + protected Tracker getTracker(int id) { + return trackers == null ? null : trackers.get(id); + } + + protected void sinkBeginReport(Sink sink, ResourceBundle bundle) { + sink.head(); + + String title; + if (isGroup()) { + title = bundle.getString("report.header-" + groupColumn.name()); + } else { + title = bundle.getString("report.header"); + } + + sink.title(); + + sink.text(title); + + sink.title_(); + + sink.head_(); + + sink.body(); + + sinkSectionTitle1(sink, title); + + } + + protected void sinkEndReport(Sink sink) { + sink.body_(); + + sink.flush(); + + sink.close(); + } + + protected void sinkHeader(Sink sink, String header) { + sink.tableHeaderCell(); + + sink.text(header); + + sink.tableHeaderCell_(); + } + + protected void sinkRawText(Sink sink, String text) { + + if (text != null) { + sink.rawText(text); + } else { + sink.rawText(" "); + } + } + + protected void sinkDate(Sink sink, Date d) { + String text = null; + if (d == null) { + text = " - "; + } else { + text = dateFormat.format(d); + } + sinkRawText(sink, text); + } + + protected void sinkI18nAble(Sink sink, int id, I18nAble obj) { + String t = null; + if (obj == null) { + t = id == 0 ? " - " : id + ""; + } else { + t = obj.getName(); + if (obj instanceof Version) { + constructVersionLink((Version) obj, sink, ""); + return; + } + } + sinkRawText(sink, t); + } + + protected void sinkSectionTitle1(Sink sink, String text) { + sink.sectionTitle1(); + + sink.text(text); + + sink.sectionTitle1_(); + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssueReportGenerator.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Copied: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReport.java (from rev 31, maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/RedmineReportMojo.java) =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReport.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReport.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server + * + * @goal issues-report + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReport extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectId; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionId; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntries; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersion; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filters; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 1.0.0 + */ + protected String columnNames; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplate; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplate; + + public IssuesReport() { + super(null); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectId; + } + + @Override + public String getVersionId() { + return versionId; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersion; + } + + @Override + public int getMaxEntries() { + return maxEntries; + } + + @Override + public void setVersionId(String versionId) { + this.versionId = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNames; + } + + @Override + protected Map<String, String> getFilters() { + return filters; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplate; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplate; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReport.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByAssignee.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByAssignee.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByAssignee.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by assignee. + * + * @goal issues-report-by-assignee + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByAssignee extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByAssignee; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByAssignee; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByAssignee; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByAssignee; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByAssignee; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByAssignee; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByAssignee; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByAssignee; + + public IssuesReportByAssignee() { + super("assignee"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByAssignee; + } + + @Override + public String getVersionId() { + return versionIdByAssignee; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByAssignee; + } + + @Override + public int getMaxEntries() { + return maxEntriesByAssignee; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByAssignee = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByAssignee; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByAssignee; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByAssignee; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByAssignee; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByAssignee.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByCategory.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByCategory.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByCategory.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by category. + * + * @goal issues-report-by-category + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByCategory extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByCategory; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByCategory; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByCategory; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByCategory; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByCategory; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByCategory; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByCategory; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByCategory; + + public IssuesReportByCategory() { + super("category"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByCategory; + } + + @Override + public String getVersionId() { + return versionIdByCategory; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByCategory; + } + + @Override + public int getMaxEntries() { + return maxEntriesByCategory; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByCategory = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByCategory; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByCategory; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByCategory; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByCategory; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByCategory.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByPriority.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByPriority.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByPriority.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by priority. + * + * @goal issues-report-by-priority + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByPriority extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByPriority; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByPriority; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByPriority; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByPriority; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByPriority; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByPriority; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByPriority; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByPriority; + + public IssuesReportByPriority() { + super("priority"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByPriority; + } + + @Override + public String getVersionId() { + return versionIdByPriority; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByPriority; + } + + @Override + public int getMaxEntries() { + return maxEntriesByPriority; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByPriority = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByPriority; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByPriority; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByPriority; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByPriority; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByPriority.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByReporter.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByReporter.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByReporter.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by reporter. + * + * @goal issues-report-by-reporter + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByReporter extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByReporter; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByReporter; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByReporter; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByReporter; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByReporter; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByReporter; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByReporter; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByReporter; + + public IssuesReportByReporter() { + super("reporter"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByReporter; + } + + @Override + public String getVersionId() { + return versionIdByReporter; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByReporter; + } + + @Override + public int getMaxEntries() { + return maxEntriesByReporter; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByReporter = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByReporter; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByReporter; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByReporter; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByReporter; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByReporter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByStatus.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByStatus.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByStatus.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by status. + * + * @goal issues-report-by-status + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByStatus extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByStatus; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByStatus; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByStatus; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByStatus; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByStatus; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByStatus; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByStatus; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByStatus; + + public IssuesReportByStatus() { + super("status"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByStatus; + } + + @Override + public String getVersionId() { + return versionIdByStatus; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByStatus; + } + + @Override + public int getMaxEntries() { + return maxEntriesByStatus; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByStatus = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByStatus; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByStatus; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByStatus; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByStatus; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByStatus.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByTracker.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByTracker.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByTracker.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by tracker. + * + * @goal issues-report-by-tracker + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByTracker extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByTracker; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByTracker; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByTracker; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByTracker; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByTracker; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByTracker; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByTracker; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByTracker; + + public IssuesReportByTracker() { + super("tracker"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByTracker; + } + + @Override + public String getVersionId() { + return versionIdByTracker; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByTracker; + } + + @Override + public int getMaxEntries() { + return maxEntriesByTracker; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByTracker = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByTracker; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByTracker; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByTracker; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByTracker; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByTracker.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByVersion.java =================================================================== --- maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByVersion.java (rev 0) +++ maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByVersion.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,177 @@ +package org.nuiton.redmine.plugin.report; + +import java.util.Map; + +/** + * Generates a report for issues from Redmine's server organized by version. + * + * @goal issues-report-by-version + * @requiresProject true + * @requiresReports true + * + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByVersion extends AbstractIssuesReport { + + /** + * Project identifier. + * + * @parameter expression="${redmine.projectId}" default-value="${project.artifactId}" + * @required + * @since 1.0.0 + */ + protected String projectIdByVersion; + /** + * Version identifier. + * + * @parameter expression="${redmine.versionId}" default-value="${project.version}" + * @since 1.0.0 + */ + protected String versionIdByVersion; + /** + * Maximum number of entries to be fetched from redmine. + * + * <b>Note:</b> use value 0 to have no limits + * + * @parameter expression="${redmine.maxEntries}" default-value="100" + * @since 1.0.0 + */ + protected int maxEntriesByVersion; + /** + * If you only want to show issues for the current version in the report. + * The current version being used is <code>${project.version}</code> minus + * any "-SNAPSHOT" suffix. + * + * @parameter expression="${redmine.onlyCurrentVersion}" default-value="false" + * @since 1.0.0 + */ + protected boolean onlyCurrentVersionByVersion; + /** + * Sets some filters on issues to include. + * the possible keys are : + * <ul> + * <li><b>version</b> : to restrict on version fixed </li> + * <li><b>status</b> : to restrict on some status</li> + * <li><b>priority</b> : to restrict on some priorties</li> + * <li><b>category</b> : to restrict on some categories</li> + * <li><b>tracker</b> : to restrict on some tracker (says type of issues)</li> + * </ul> + * <p/> + * Values are Redmine's internal ids (except for the version entry + * which use Redmine's version names). + * <p/> + * Multiple values can be separated by commas. + * <p/> + * + * <b>Note :</b> If a value is set to empty - that means to not filter on + * that property. + * <p/> + * + * To see the internal ids, use the command : + * <pre> + * mvn redmine:display-ids -Dtype=<entry key> + * </pre> + * + * @parameter + * @since 1.0.0 + */ + protected Map<String, String> filtersByVersion; + /** + * Sets the column names that you want to show in the report. The columns + * will appear in the report in the same order as you specify them here. + * Multiple values can be separated by commas. + * <p> + * Valid columns are: <code>Key</code>, <code>Summary</code>, + * <code>Status</code>, <code>Assignee</code>, + * <code>Reporter</code>, <code>Tracker</code>, <code>Priority</code>, + * <code>Version</code>, <code>Category</code>, <code>Created</code> and + * <code>Updated</code>. + * </p> + * + * @parameter expression="${redmine.columnNames}" default-value="Tracker,Category,Key,Summary,Status,Assignee,Version" + * @since 2.0 + */ + protected String columnNamesByVersion; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%ISSUE%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.issueLinkTemplate}" + * @since 1.0.0 + */ + protected String issueLinkTemplateByVersion; + /** + * Template strings per system that is used to discover the URL to use to display an issue report. Each key in this + * map denotes the (case-sensitive) identifier of the issue tracking system and its value gives the URL template. + * <p> + * There are 2 template tokens you can use. <code>%URL%</code>: this is computed by getting the + * <code><issueManagement>/<url></code> value from the POM, and removing the last '/' + * and everything that comes after it. <code>%VERSION%</code>: this is the issue number. + * </p> + * + * @parameter expression="${redmine.versionLinkTemplate}" + * @since 1.0.0 + */ + protected String versionLinkTemplateByVersion; + + public IssuesReportByVersion() { + super("version"); + } + + /////////////////////////////////////////////////////////////////////////// + /// IssueCollectionConfiguration + /////////////////////////////////////////////////////////////////////////// + @Override + public String getProjectId() { + return projectIdByVersion; + } + + @Override + public String getVersionId() { + return versionIdByVersion; + } + + @Override + public boolean isOnlyCurrentVersion() { + return onlyCurrentVersionByVersion; + } + + @Override + public int getMaxEntries() { + return maxEntriesByVersion; + } + + @Override + public void setVersionId(String versionId) { + this.versionIdByVersion = versionId; + } + + /////////////////////////////////////////////////////////////////////////// + /// AbstractIssuesReport + /////////////////////////////////////////////////////////////////////////// + @Override + protected String getColumnNames() { + return columnNamesByVersion; + } + + @Override + protected Map<String, String> getFilters() { + return filtersByVersion; + } + + @Override + protected String getIssueLinkTemplate() { + return issueLinkTemplateByVersion; + } + + @Override + protected String getVersionLinkTemplate() { + return versionLinkTemplateByVersion; + } +} Property changes on: maven-redmine-plugin/trunk/src/main/java/org/nuiton/redmine/plugin/report/IssuesReportByVersion.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/main/resources/META-INF/plexus/components.xml =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/META-INF/plexus/components.xml (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/META-INF/plexus/components.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> +<component-set> + <components> + <component> + <role>org.sonatype.plexus.components.sec.dispatcher.SecDispatcher</role> + <role-hint>maven-redmine-plugin</role-hint> + <implementation>org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher</implementation> + <requirements> + <requirement> + <role>org.sonatype.plexus.components.cipher.PlexusCipher</role> + <field-name>_cipher</field-name> + </requirement> + <requirement> + <role>org.sonatype.plexus.components.sec.dispatcher.PasswordDecryptor</role> + <field-name>_decryptors</field-name> + </requirement> + </requirements> + <configuration> + <_configurationFile>~/.m2/settings-security.xml</_configurationFile> + </configuration> + </component> + <!--component> + <role>org.codehaus.plexus.velocity.VelocityComponent</role> + <role-hint>maven-changes-plugin</role-hint> + <implementation>org.codehaus.plexus.velocity.DefaultVelocityComponent</implementation> + <configuration> + <properties> + <property> + <name>resource.loader</name> + <value>file,class</value> + </property> + <property> + <name>class.resource.loader.class</name> + <value>org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader</value> + </property> + <property> + <name>file.resource.loader.class</name> + <value>org.apache.maven.plugin.resource.loader.ProjectResourceLoader</value> + </property> + </properties> + </configuration> + </component--> + </components> +</component-set> \ No newline at end of file Modified: maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/main/resources/META-INF/services/org.nuiton.io.xpp3.Xpp3Reader 2009-09-11 22:10:54 UTC (rev 86) @@ -1,5 +1,8 @@ org.nuiton.redmine.model.io.xpp3.AttachmentXpp3Reader org.nuiton.redmine.model.io.xpp3.IssueXpp3Reader +org.nuiton.redmine.model.io.xpp3.IssueStatusXpp3Reader +org.nuiton.redmine.model.io.xpp3.IssueCategoryXpp3Reader +org.nuiton.redmine.model.io.xpp3.IssuePriorityXpp3Reader org.nuiton.redmine.model.io.xpp3.ProjectXpp3Reader org.nuiton.redmine.model.io.xpp3.TrackerXpp3Reader org.nuiton.redmine.model.io.xpp3.UserXpp3Reader Added: maven-redmine-plugin/trunk/src/main/resources/redmine-report.properties =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/redmine-report.properties (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/redmine-report.properties 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,66 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +report.name=Issues Report +report.header=Redmine Issues Report +report.description=Report on Issues from the Redmine Issue Tracking System. + +report.name-assignee=Issues / Assignee +report.header-assignee=Redmine Issues Report organized by Assignee. +report.description-assignee=Report on Issues from the Redmine Issue Tracking System (organized by assignees). + +report.name-reporter=Issues / Reporter +report.header-reporter=Redmine Issues Report organized by Reporter. +report.description-reporter=Report on Issues from the Redmine Issue Tracking System (organized by reporters). + +report.name-tracker=Issues / Tracker +report.header-tracker=Redmine Issues Report organized by Tracker. +report.description-tracker=Report on Issues from the Redmine Issue Tracking System (organized by trackers). + +report.name-status=Issues / Status +report.header-status=Redmine Issues Report organized by Status. +report.description-status=Report on Issues from the Redmine Issue Tracking System (organized by status). + +report.name-category=Issues / Category +report.header-category=Redmine Issues Report organized by Category. +report.description-category=Report on Issues from the Redmine Issue Tracking System (organized by category). + +report.name-priority=Issues / Priority +report.header-priority=Redmine Issues Report organized by Priority. +report.description-priority=Report on Issues from the Redmine Issue Tracking System (organized by priority). + +report.name-version=Issues / Version +report.header-version=Redmine Issues Report organized by Version. +report.description-version=Report on Issues from the Redmine Issue Tracking System (organized by version). + +report.error=An error occured that made it impossible to generate this report. \ + Please check the console for information on what might be the cause of this. +report.date.format=yyy-MM-dd 'at' mm:hh +report.label.key=Key +report.label.summary=Summary +report.label.status=Status +report.label.resolution=Resolution +report.label.by=By +report.label.reporter=Reporter +report.label.type=Type +report.label.priority=Priority +report.label.version=Version +report.label.fixVersion=Fix Version +report.label.category=Component +report.message.only.for.current.version=The Redmine Report will contain issues only for the current version +report.label.created=Created on +report.label.updated=Updated on Added: maven-redmine-plugin/trunk/src/main/resources/redmine-report_de.properties =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/redmine-report_de.properties (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/redmine-report_de.properties 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,36 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +report.name=Redmine-Bericht +report.description=Bericht \u00FCber die Probleme aus dem Problemverwaltungssystem Redmine. +report.error=Es ist ein Fehler aufgetreten, der die Erstellung dieses Berichts unm\u00F6glich macht. \ + Bitte werten Sie die Konsolenausgabe zur Feststellung der Ursache aus. +report.header=Redmine-Bericht +report.label.key=Schl\u00FCssel +report.label.summary=Zusammenfassung +report.label.status=Status +report.label.resolution=L\u00F6sung +report.label.by=Durch +report.label.reporter=Reporter +report.label.type=Typ +report.label.priority=Priorit\u00E4t +report.label.version=Version +report.label.fixVersion=Korrigierte Version +report.label.category=Komponente +report.message.only.for.current.version=The Redmine Report will contain issues only for the current version +report.label.created=Created on +report.label.updated=Updated on Added: maven-redmine-plugin/trunk/src/main/resources/redmine-report_en.properties =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/redmine-report_en.properties (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/redmine-report_en.properties 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ + +report.label.created=Created on +report.label.updated=Updated on Added: maven-redmine-plugin/trunk/src/main/resources/redmine-report_fr.properties =================================================================== --- maven-redmine-plugin/trunk/src/main/resources/redmine-report_fr.properties (rev 0) +++ maven-redmine-plugin/trunk/src/main/resources/redmine-report_fr.properties 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,66 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +report.name=Rapport des demandes +report.description=Rapport des issues sur le server de type Redmine. +report.header=Rapport des demandes du serveur Redmine + +report.name-reporter=Demandes / Reporteur +report.description-reporter=Rapport des issues sur un server de type Redmine organis\u00E9s par reporteur. +report.header-reporter=Rapport des demandes sur le serveur Redmine organis\u00E9 par reporteur. + +report.name-assignee=Demandes / Contributeur +report.description-assignee=Rapport des issues sur un server de type Redmine organis\u00E9s par contributeur. +report.header-assignee=Rapport des demandes sur le serveur Redmine organis\u00E9 par contributeur. + +report.name-tracker=Demandes / Tracker +report.description-tracker=Rapport des issues sur un server de type Redmine organis\u00E9s par tracker. +report.header-tracker=Rapport des demandes sur le serveur Redmine organis\u00E9 par type de demandes. + +report.name-status=Demandes / Statut +report.description-status=Rapport des issues sur un server de type Redmine organis\u00E9s par statut. +report.header-status=Rapport des demandes sur le serveur Redmine organis\u00E9s par statut. + +report.name-category=Demandes / Cat\u00E9gorie +report.description-category=Rapport des issues sur un server de type Redmine organis\u00E9s par cat\u00E9gorie. +report.header-category=Rapport des demandes sur le serveur Redmine organis\u00E9s par cat\u00E9gorie. + +report.name-priority=Demandes / Priorit\u00E9 +report.description-priority=Rapport des issues sur un server de type Redmine organis\u00E9s par priorit\u00E9. +report.header-priority=Rapport des demandes sur le serveur Redmine organis\u00E9s par priorit\u00E9. + +report.name-version=Demandes / Version +report.description-version=Rapport des issues sur un server de type Redmine organis\u00E9s par version. +report.header-version=Rapport des demandes sur le serveur Redmine organis\u00E9s par version. + +report.error=An error occured that made it impossible to generate this report. \ + Please check the console for information on what might be the cause of this. +report.date.format=dd/MM/yyyy '\u00E0' mm:hh +report.label.key=Sujet +report.label.summary=Description +report.label.status=Statut +report.label.resolution=Resolution +report.label.by=Par +report.label.reporter=Cr\u00E9ateur +report.label.type=Type +report.label.priority=Priorit\u00E9 +report.label.version=Version +report.label.fixVersion=Version fix\u00E9e +report.label.category=Cat\u00E9gorie +report.message.only.for.current.version=Le rapport Redmine n'utilisera que les demandes de la version courante +report.label.created=Date de cr\u00E9ation +report.label.updated=Date de mise \u00E0 jour Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineDataProviderTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineDataProviderTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineDataProviderTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,136 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import org.apache.maven.plugin.logging.SystemStreamLog; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.redmine.model.Attachment; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.Project; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineDataProviderTest { + + protected static SystemStreamLog log; + protected static File testDir; + protected RedmineDataProvider store; + List<Attachment> attachments; + List<Issue> issues; + List<Project> projects; + List<Tracker> trackers; + List<User> users; + List<Version> versions; + File file; + + @BeforeClass + public static void setUpClass() throws Exception { + + log = new SystemStreamLog(); + + testDir = TestHelper.getTestDir(RedmineDataProviderTest.class, "target" + File.separator + "test-classes"); + + log.info("test dir : " + testDir.getAbsolutePath().substring(TestHelper.getBaseDir().getAbsolutePath().length() + 1)); + + // setup memory model + TestHelper.loadMemoryModel(); + } + + @AfterClass + public static void tearDownClass() throws Exception { + testDir = null; + } + + @Before + public void setUp() { + attachments = TestHelper.getAttachments(); + issues = TestHelper.getIssues(); + projects = TestHelper.getProjects(); + trackers = TestHelper.getTrackers(); + users = TestHelper.getUsers(); + versions = TestHelper.getVersions(); + } + + @After + public void tearDown() throws IOException { + file = null; + attachments = null; + issues = null; + projects = null; + trackers = null; + users = null; + versions = null; + if (store != null) { + store.close(); + store = null; + } + } + + /** + * Test of getData method, of class RedmineModelFactory. + * @throws Exception + */ + @Test + public void testGetDataOffLine() throws Exception { + System.out.println("getDataOffLine"); + + File basedir = new File(testDir, "off-line"); + + store = new RedmineDataProvider(TestHelper.ENCODING, log, basedir, null); + store.setOffline(true); + + Project p = store.getData(Project.class, "one", null); + Assert.assertNotNull(p); + TestHelper.assertMyEquals(Project.class, projects.get(0), p); + + Version v = store.getData(Version.class, "one", "yo"); + Assert.assertNotNull(v); + TestHelper.assertMyEquals(Version.class, versions.get(0), v); + } + + /** + * Test of getDatas method, of class RedmineModelFactory. + * @throws Exception + */ + @Test + public void testGetDatasOffLine() throws Exception { + System.out.println("getDatasOffLine"); + + File basedir = new File(testDir, "off-line"); + + store = new RedmineDataProvider(TestHelper.ENCODING, log, basedir, null); + store.setOffline(true); + + Attachment[] a = store.getDatas(Attachment.class, "one", "yo"); + Assert.assertNotNull(a); + TestHelper.assertMyListEquals(Attachment.class, attachments, a); + + Issue[] i = store.getDatas(Issue.class, "one", "yo"); + Assert.assertNotNull(i); + TestHelper.assertMyListEquals(Issue.class, issues, i); + + Tracker[] t = store.getDatas(Tracker.class, "one", null); + Assert.assertNotNull(t); + TestHelper.assertMyListEquals(Tracker.class, trackers, t); + + User[] u = store.getDatas(User.class, "one", null); + Assert.assertNotNull(u); + TestHelper.assertMyListEquals(User.class, users, u); + + Version[] v = store.getDatas(Version.class, "one", null); + Assert.assertNotNull(v); + TestHelper.assertMyListEquals(Version.class, versions, v); + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineDataProviderTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Deleted: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineModelBuilderTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineModelBuilderTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineModelBuilderTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,475 +0,0 @@ -package org.nuiton.redmine; - -import org.nuiton.redmine.model.*; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; -import org.apache.maven.plugin.logging.SystemStreamLog; -import org.codehaus.plexus.PlexusTestCase; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.nuiton.io.xpp3.AbstractXpp3Reader; -import org.nuiton.io.xpp3.Xpp3Helper; -import org.nuiton.io.xpp3.PropertyMapper; -import org.nuiton.redmine.model.io.xpp3.RedmineDataConverter; - -/** - * - * @author chemit - * @since 1.0.0 - */ -public class RedmineModelBuilderTest { - - protected static File basedir; - protected static SystemStreamLog log; - protected static File testDir; - protected static RedmineModelBuilder builder; -// static Attachment attachment; -// static Issue issue; -// static Project project; -// static Tracker tracker; -// static User user; -// static Version version; - static List<Attachment> attachments; - static List<Issue> issues; - static List<Project> projects; - static List<Tracker> trackers; - static List<User> users; - static List<Version> versions; - - protected static File getBaseDir() { - if (basedir == null) { - - String path = PlexusTestCase.getBasedir(); - basedir = new File(path); - } - return basedir; - } - - protected static File getTestDir() { - return testDir; - } - - @BeforeClass - public static void setUpClass() throws Exception { - - log = new SystemStreamLog(); - - String rep = RedmineModelBuilderTest.class.getName(); - rep = rep.replaceAll("\\.", File.separator); - - File f = new File(getBaseDir(), "target" + File.separator + "test-classes"); -// File f = new File(getBaseDir(), "src" + File.separator + "test" + File.separator + "resources"); - testDir = new File(f, rep); - log.info("test dir : " + testDir.getAbsolutePath().substring(getBaseDir().getAbsolutePath().length() + 1)); - builder = new RedmineModelBuilder(log); - - // setup memory model - loadMemoryModel(); - } - - @AfterClass - public static void tearDownClass() throws Exception { - } - File file; - - @Before - public void setUp() { - } - - @After - public void tearDown() { - file = null; - } - - /** - * Test the method {@code read} of class ModelBuilder. - * - * @throws Exception - */ - @Test - public void testRead() throws Exception { - - File rootDir = new File(testDir, "single"); - - file = new File(rootDir, "attachment.xml"); - assertMyEquals(attachments.get(0), builder.readAttachment(file)); - - file = new File(rootDir, "issue.xml"); - assertMyEquals(issues.get(0), builder.readIssue(file)); - - file = new File(rootDir, "project.xml"); - assertMyEquals(projects.get(0), builder.readProject(file)); - - file = new File(rootDir, "tracker.xml"); - assertMyEquals(trackers.get(0), builder.readTracker(file)); - - file = new File(rootDir, "user.xml"); - assertMyEquals(users.get(0), builder.readUser(file)); - - file = new File(rootDir, "version.xml"); - assertMyEquals(versions.get(0), builder.readVersion(file)); - - } - - /** - * Test the method {@code readArray} of class ModelBuilder. - * - * @throws Exception - */ - @Test - @SuppressWarnings("unchecked") - public void testReadArray() throws Exception { - - - doReadArrayTest("array-empty", - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST, - Collections.EMPTY_LIST); - - - doReadArrayTest("array-singleton", - Arrays.asList(attachments.get(0)), - Arrays.asList(issues.get(0)), - Arrays.asList(projects.get(0)), - Arrays.asList(trackers.get(0)), - Arrays.asList(users.get(0)), - Arrays.asList(versions.get(0))); - - doReadArrayTest("array-multi", - attachments, - issues, - projects, - trackers, - users, - versions); - - } - - protected <T> void assertMyEquals(List<T> expecteds, T[] actuals) throws Exception { - - Assert.assertNotNull(actuals); - Assert.assertEquals(expecteds.size(), actuals.length); - for (int i = 0, j = expecteds.size(); i < j; i++) { - T actual = actuals[i]; - T expected = expecteds.get(i); - assertMyEquals(expected, actual); - } - - } - - protected void assertMyEquals(Object expected, Object actual) throws Exception { - - Assert.assertNotNull(expected); - Assert.assertNotNull(actual); - AbstractXpp3Reader<?> reader = (AbstractXpp3Reader<?>) Xpp3Helper.getReader(expected.getClass()); - Map<String, PropertyMapper> mappers = reader.getMappers(expected.getClass()); - for (PropertyMapper m : mappers.values()) { - - Object expectedValue = m.getDescriptor().getReadMethod().invoke(expected); - Object actualValue = m.getDescriptor().getReadMethod().invoke(actual); - - Assert.assertEquals("error in attribute " + m.getPropertyName() + " for " + expected, expectedValue, actualValue); - } - } - - protected void doReadArrayTest(String name, - List<Attachment> attachments, - List<Issue> issues, - List<Project> projects, - List<Tracker> trackers, - List<User> users, - List<Version> versions) throws Exception { - - File rootDir = new File(testDir, name); - - file = new File(rootDir, "attachments.xml"); - assertMyEquals(attachments, builder.readAttachments(file)); - - file = new File(rootDir, "issues.xml"); - assertMyEquals(issues, builder.readIssues(file)); - - file = new File(rootDir, "projects.xml"); - assertMyEquals(projects, builder.readProjects(file)); - - file = new File(rootDir, "trackers.xml"); - assertMyEquals(trackers, builder.readTrackers(file)); - - file = new File(rootDir, "users.xml"); - assertMyEquals(users, builder.readUsers(file)); - - file = new File(rootDir, "versions.xml"); - assertMyEquals(versions, builder.readVersions(file)); - } - - protected static void loadMemoryModel() throws Exception { - - attachments = new ArrayList<Attachment>(); - Attachment tempA = null; - tempA = new Attachment(); - tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); - tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); - tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); - tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); - tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); - tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); - tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); - tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); - tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); - attachments.add(tempA); - tempA = new Attachment(); - tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); - tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); - tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); - tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); - tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); - tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); - tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); - tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json2")); - tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json2")); - attachments.add(tempA); - - issues = new ArrayList<Issue>(); - Issue tempI = null; - tempI = new Issue(); - tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); - tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); - tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); - tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); - tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); - tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); - tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); - tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); - tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!")); - issues.add(tempI); - tempI = new Issue(); - tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); - tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); - tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); - tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); - tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); - tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); - tempI.setId((Integer) RedmineDataConverter.Integer.convert("4")); - tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); - tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); - tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); - tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !2")); - tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!2")); - issues.add(tempI); - - projects = new ArrayList<Project>(); - Project tempP = null; - tempP = new Project(); - tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setIdentifier((String) RedmineDataConverter.Text.convert("one")); - tempP.setName((String) RedmineDataConverter.Text.convert("one")); - tempP.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); - tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); - projects.add(tempP); - tempP = new Project(); - tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); - tempP.setIdentifier((String) RedmineDataConverter.Text.convert("two")); - tempP.setName((String) RedmineDataConverter.Text.convert("two")); - tempP.setId((Integer) RedmineDataConverter.Integer.convert("2")); - tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); - tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); - projects.add(tempP); - - trackers = new ArrayList<Tracker>(); - Tracker tempT = null; - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setName((String) RedmineDataConverter.Text.convert("Anomalie")); - trackers.add(tempT); - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("2")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempT.setName((String) RedmineDataConverter.Text.convert("Evolution")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("2")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("2")); - trackers.add(tempT); - tempT = new Tracker(); - tempT.setId((Integer) RedmineDataConverter.Integer.convert("3")); - tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempT.setName((String) RedmineDataConverter.Text.convert("Assistance")); - tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("3")); - tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("3")); - trackers.add(tempT); - - users = new ArrayList<User>(); - User tempU = null; - tempU = new User(); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("Admin")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("admin")); - tempU.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); - users.add(tempU); - tempU = new User(); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:02+02:00")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("tony")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("8aed1322e5450badb078e1fb60a817a1df25a2ca")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("5")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("chemit2")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("tchemit2")); - tempU.setMail((String) RedmineDataConverter.Text.convert("chemit@codelutin.com")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("4")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); - users.add(tempU); - tempU = new User(); - tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:24:11+02:00")); - tempU.setFirstname((String) RedmineDataConverter.Text.convert("dev")); - tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); - tempU.setId((Integer) RedmineDataConverter.Integer.convert("7")); - tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); - tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); - tempU.setLastname((String) RedmineDataConverter.Text.convert("dev")); - tempU.setLogin((String) RedmineDataConverter.Text.convert("dev")); - tempU.setMail((String) RedmineDataConverter.Text.convert("dev3@ynot-home.info")); - tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); - tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("9")); - tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("4")); - tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); - tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); - users.add(tempU); - - versions = new ArrayList<Version>(); - Version tempV = null; - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:47:39+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yo")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("9")); - tempV.setName((String) RedmineDataConverter.Text.convert("yor")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:49+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("13")); - tempV.setName((String) RedmineDataConverter.Text.convert("rrrrrrrrrouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("15")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaauuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:12:25+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoyeppppppppppppppppp")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("16")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaau")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:13:20+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("14")); - tempV.setName((String) RedmineDataConverter.Text.convert("aaaaaaaaaarrrrrrrrrouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("5")); - tempV.setName((String) RedmineDataConverter.Text.convert("2")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setName((String) RedmineDataConverter.Text.convert("1.0.0")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("11")); - tempV.setName((String) RedmineDataConverter.Text.convert("yaouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:59+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("10")); - tempV.setName((String) RedmineDataConverter.Text.convert("ya")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:54:16+02:00")); - versions.add(tempV); - tempV = new Version(); - tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:37+02:00")); - tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); - tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); - tempV.setId((Integer) RedmineDataConverter.Integer.convert("12")); - tempV.setName((String) RedmineDataConverter.Text.convert("ouuuuuua")); - tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); - tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:42+02:00")); - versions.add(tempV); - } -} Modified: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineSessionTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineSessionTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/RedmineSessionTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,8 +1,9 @@ package org.nuiton.redmine; import java.io.IOException; -import java.net.URISyntaxException; import java.net.URL; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugin.logging.SystemStreamLog; import org.junit.After; import org.junit.AfterClass; @@ -18,38 +19,17 @@ */ public class RedmineSessionTest { - protected static SystemStreamLog log; - protected static URL redmineURL; - protected static final String redmineUsername = "chemit"; - protected static final String redminePassword = "azer"; + protected static Log log; protected static Boolean skip; protected RedmineSession session; + protected static RedmineConfiguration configuration; - /** - * Test si on peut se connecter a un serveur Redmine. - * - * @param redmineURL l'url du serveur redmine - * @param redmineUsername le login - * @param redminePassword le password - * @return <code>true</true> si une connection est possible sur le serveur - */ - public static boolean canAccess(URL redmineURL, String redmineUsername, String redminePassword) { - log = new SystemStreamLog(); - boolean result = false; - try { - RedmineSession.getSession(log, redmineURL, redmineUsername, redminePassword, true); - result = true; - } catch (Exception e) { - log.warn("can not connect to " + redmineURL + ", test will be skip : " + e.getMessage()); - } - return result; - } - @BeforeClass public static void setUpClass() throws Exception { log = new SystemStreamLog(); - redmineURL = new URL("http://www.mynuiton.org"); - skip = !canAccess(redmineURL, redmineUsername, redminePassword); + + configuration = TestHelper.getTestConfiguration(RedmineSessionTest.class.getSimpleName()); + skip = !TestHelper.canAccess(log, configuration); } @AfterClass @@ -69,15 +49,23 @@ } } - @Test(expected = IOException.class) + @Test(expected = org.apache.maven.plugin.MojoExecutionException.class) public void testBadHost() throws Exception { - RedmineSession.getSession(log, new URL("http://www.mynuiton.orgfake-" + System.nanoTime()), null, null, true); + RedmineConfiguration conf = new SimpleRedmineConfiguration(); + TestHelper.copyConfiguration(configuration, conf); + conf.setRedmineUrl(new URL("http://www.mynuiton.orgfake-" + System.nanoTime())); + + RedmineConfigurationHelper.openSession(conf, log); } - @Test(expected = IOException.class) + @Test(expected = org.apache.maven.plugin.MojoExecutionException.class) public void testBadLogin() throws Exception { - session = RedmineSession.getSession(log, redmineURL, redmineUsername + System.nanoTime(), redminePassword, true); + RedmineConfiguration conf = new SimpleRedmineConfiguration(); + TestHelper.copyConfiguration(configuration, conf); + conf.setRedmineUsername(configuration.getRedmineUsername() + System.nanoTime()); + + RedmineConfigurationHelper.openSession(conf, log); } @Test @@ -89,7 +77,7 @@ @Test public void testAskData() throws Exception { initSession(); - String result = session.askContent("rest", "get_project_users.xml", "one"); + String result = session.askData("rest", "get_project_users.xml", "one"); Assert.assertFalse(result.isEmpty()); if (log.isDebugEnabled()) { log.debug(result); @@ -101,7 +89,7 @@ @Test public void testAskDataAfterClosed() throws Exception { initSession(); - String result = session.askContent("rest", "get_project_users.xml", "one"); + String result = session.askData("rest", "get_project_users.xml", "one"); Assert.assertFalse(result.isEmpty()); if (log.isDebugEnabled()) { log.debug(result); @@ -109,14 +97,14 @@ session.logout(); Assert.assertFalse(session.isLogin()); try { - result = session.askContent("rest", "get_project_users.json", "one"); + result = session.askData("rest", "get_project_users.json", "one"); Assert.fail(); } catch (IOException e) { Assert.assertTrue(true); } } - protected void initSession() throws IOException, URISyntaxException { - session = RedmineSession.getSession(log, redmineURL, redmineUsername, redminePassword, true); + protected void initSession() throws MojoExecutionException { + session = RedmineConfigurationHelper.openSession(configuration, log); } } Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/SimpleRedmineConfiguration.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/SimpleRedmineConfiguration.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/SimpleRedmineConfiguration.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,120 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.nuiton.redmine; + +import java.io.File; +import java.net.URL; +import org.apache.commons.lang.builder.ToStringBuilder; +import org.apache.commons.lang.builder.ToStringStyle; + +/** + * + * @author chemit + */ +public class SimpleRedmineConfiguration implements RedmineConfiguration { + + URL redmineUrl; + String redmineUsername; + String redminePassword; + String encoding; + File localDir; + boolean offline; + boolean overwrite; + boolean verbose; + + @Override + public File getLocalDir() { + return localDir; + } + + @Override + public void setLocalDir(File localDir) { + this.localDir = localDir; + } + + @Override + public boolean isOffline() { + return offline; + } + + @Override + public void setOffline(boolean offline) { + this.offline = offline; + } + + @Override + public boolean isOverwrite() { + return overwrite; + } + + @Override + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + @Override + public String getRedminePassword() { + return redminePassword; + } + + @Override + public void setRedminePassword(String redminePassword) { + this.redminePassword = redminePassword; + } + + @Override + public URL getRedmineUrl() { + return redmineUrl; + } + + @Override + public void setRedmineUrl(URL redmineUrl) { + this.redmineUrl = redmineUrl; + } + + @Override + public String getRedmineUsername() { + return redmineUsername; + } + + @Override + public void setRedmineUsername(String redmineUsername) { + this.redmineUsername = redmineUsername; + } + + @Override + public String getEncoding() { + return encoding; + } + + @Override + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + @Override + public String toString() { + ToStringBuilder b = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE); + b.append("redmineUrl", redmineUrl); + b.append("redmineUsername", redmineUsername); + b.append("redminePassword", "***"); + b.append("localDir", localDir); + b.append("encoding", encoding); + b.append("overwrite", overwrite); + b.append("offline", offline); + b.append("verbose", verbose); + return b.toString(); + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/SimpleRedmineConfiguration.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/TestHelper.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/TestHelper.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/TestHelper.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,455 @@ +package org.nuiton.redmine; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import junit.framework.Assert; +import org.apache.maven.plugin.logging.Log; +import org.codehaus.plexus.PlexusTestCase; +import org.nuiton.io.xpp3.AbstractXpp3Reader; +import org.nuiton.io.xpp3.PropertyMapper; +import org.nuiton.io.xpp3.Xpp3Helper; +import org.nuiton.redmine.model.Attachment; +import org.nuiton.redmine.model.Issue; +import org.nuiton.redmine.model.Project; +import org.nuiton.redmine.model.Tracker; +import org.nuiton.redmine.model.User; +import org.nuiton.redmine.model.Version; +import org.nuiton.redmine.model.io.xpp3.RedmineDataConverter; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public abstract class TestHelper { + + public static final String ENCODING = "UTF-8"; + protected static File basedir; + protected static List<Attachment> attachments; + protected static List<Issue> issues; + protected static List<Project> projects; + protected static List<Tracker> trackers; + protected static List<User> users; + protected static List<Version> versions; + + public static File getBaseDir() { + if (basedir == null) { + + String path = PlexusTestCase.getBasedir(); + basedir = new File(path); + } + return basedir; + } + + public static File getTestDir(Class<?> type, String prefix) { + String rep = type.getName(); + rep = rep.replaceAll("\\.", File.separator); + + File f = new File(getBaseDir(), prefix); + File testDir = new File(f, rep); + return testDir; + } + + public static RedmineConfiguration getTestConfiguration(String testName) { + + RedmineConfiguration configuration = new SimpleRedmineConfiguration(); + String url = System.getenv("redmineUrl"); + try { + if (url == null) { + configuration.setRedmineUrl(new URL("http://mynuiton.org")); + } else { + configuration.setRedmineUrl(new URL(url)); + } + } catch (MalformedURLException ex) { + throw new IllegalStateException("could not convert url " + url); + } + String username = System.getenv("redmineUsername"); + if (username == null) { + username = "chemit"; + } + configuration.setRedmineUsername(username); + String password = System.getenv("redminePassword"); + if (password == null) { + password = "azer"; + } + configuration.setRedminePassword(password); + + configuration.setEncoding(ENCODING); + String verbose = System.getenv("verbose"); + if (verbose == null || verbose.trim().isEmpty()) { + verbose = "true"; + } + configuration.setVerbose(Boolean.valueOf(verbose)); + File localDir = new File(getBaseDir(), "target" + File.separator + "redmine-cache-" + testName); + configuration.setLocalDir(localDir); + if (configuration.isVerbose()) { + System.out.println("will use configuration : " + configuration); + } + return configuration; + } + + public static void copyConfiguration(RedmineConfiguration src, RedmineConfiguration dst) { + if (src.getRedmineUrl() != null) { + dst.setRedmineUrl(src.getRedmineUrl()); + } + if (src.getRedmineUsername() != null) { + dst.setRedmineUsername(src.getRedmineUsername()); + } + if (src.getRedminePassword() != null) { + dst.setRedminePassword(src.getRedminePassword()); + } + if (src.getEncoding() != null) { + dst.setEncoding(src.getEncoding()); + } + if (src.getLocalDir() != null) { + dst.setLocalDir(src.getLocalDir()); + } + dst.setOffline(src.isOffline()); + dst.setOverwrite(src.isOverwrite()); + dst.setVerbose(src.isVerbose()); + } + + /** + * Test si on peut se connecter a un serveur Redmine. + * + * @param log logger + * @param configuration configuration du server + * @return <code>true</true> si une connection est possible sur le serveur + */ + public static boolean canAccess(Log log, RedmineConfiguration configuration) { + boolean result = false; + try { + RedmineConfigurationHelper.openSession(configuration, log); + result = true; + } catch (Exception e) { + log.warn("can not connect to " + configuration.getRedmineUrl() + ", test will be skip : " + e.getMessage()); + } + return result; + } + + public static List<Attachment> getAttachments() { + return attachments; + } + + public static List<Issue> getIssues() { + return issues; + } + + public static List<Project> getProjects() { + return projects; + } + + public static List<Tracker> getTrackers() { + return trackers; + } + + public static List<User> getUsers() { + return users; + } + + public static List<Version> getVersions() { + return versions; + } + + public static void tearDownClass() throws Exception { + basedir = null; + attachments = null; + issues = null; + projects = null; + trackers = null; + users = null; + versions = null; + } + + public static <T> void assertMyListEquals(Class<T> type, List<T> expecteds, T... actuals) throws Exception { + + Assert.assertNotNull(actuals); + Assert.assertEquals(expecteds.size(), actuals.length); + for (int i = 0, j = expecteds.size(); i < j; i++) { + T actual = actuals[i]; + T expected = expecteds.get(i); + assertMyEquals(type, expected, actual); + } + + } + + public static void assertMyEquals(Class<?> type, Object expected, Object actual) throws Exception { + + Assert.assertNotNull(expected); + Assert.assertNotNull(actual); + AbstractXpp3Reader<?> reader = (AbstractXpp3Reader<?>) Xpp3Helper.getReader(type); + Map<String, PropertyMapper> mappers = reader.getMappers(type); + for (PropertyMapper m : mappers.values()) { + + Object expectedValue = m.getDescriptor().getReadMethod().invoke(expected); + Object actualValue = m.getDescriptor().getReadMethod().invoke(actual); + + Assert.assertEquals("error in attribute " + m.getPropertyName() + " for " + expected, expectedValue, actualValue); + } + } + + public static void loadMemoryModel() throws Exception { + + attachments = new ArrayList<Attachment>(); + Attachment tempA = null; + tempA = new Attachment(); + tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json")); + tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json")); + attachments.add(tempA); + tempA = new Attachment(); + tempA.setAuthorId((Integer) RedmineDataConverter.Integer.convert("4")); + tempA.setContainerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempA.setFilesize((Integer) RedmineDataConverter.Integer.convert("411")); + tempA.setDownloads((Integer) RedmineDataConverter.Integer.convert("0")); + tempA.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T12:56:41+02:00")); + tempA.setContainerType((String) RedmineDataConverter.Text.convert("Version")); + tempA.setContentType((String) RedmineDataConverter.Text.convert("application/json")); + tempA.setDigest((String) RedmineDataConverter.Text.convert("6ea84342c7475c05fb077b4aca832f9a")); + tempA.setDiskFilename((String) RedmineDataConverter.Text.convert("090905125641_get_issue.json2")); + tempA.setFilename((String) RedmineDataConverter.Text.convert("get_issue.json2")); + attachments.add(tempA); + + issues = new ArrayList<Issue>(); + Issue tempI = null; + tempI = new Issue(); + tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !")); + tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!")); + issues.add(tempI); + tempI = new Issue(); + tempI.setAuthorId((Integer) RedmineDataConverter.Integer.convert("5")); + tempI.setCategoryId((Integer) RedmineDataConverter.Integer.convert("2")); + tempI.setDoneRatio((Integer) RedmineDataConverter.Integer.convert("0")); + tempI.setLockVersion((Integer) RedmineDataConverter.Integer.convert("7")); + tempI.setPriorityId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setStatusId((Integer) RedmineDataConverter.Integer.convert("3")); + tempI.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setFixedVersionId((Integer) RedmineDataConverter.Integer.convert("1")); + tempI.setId((Integer) RedmineDataConverter.Integer.convert("4")); + tempI.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T20:11:52+02:00")); + tempI.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T00:37:40+02:00")); + tempI.setStartDate((Date) RedmineDataConverter.Date.convert("2009-09-04")); + tempI.setDescription((String) RedmineDataConverter.Text.convert("avec une description !2")); + tempI.setSubject((String) RedmineDataConverter.Text.convert("yes!2")); + issues.add(tempI); + + projects = new ArrayList<Project>(); + Project tempP = null; + tempP = new Project(); + tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:11:54+02:00")); + tempP.setIdentifier((String) RedmineDataConverter.Text.convert("one")); + tempP.setName((String) RedmineDataConverter.Text.convert("one")); + tempP.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("true")); + projects.add(tempP); + tempP = new Project(); + tempP.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:14+02:00")); + tempP.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:22:29+02:00")); + tempP.setIdentifier((String) RedmineDataConverter.Text.convert("two")); + tempP.setName((String) RedmineDataConverter.Text.convert("two")); + tempP.setId((Integer) RedmineDataConverter.Integer.convert("2")); + tempP.setProjectsCount((Integer) RedmineDataConverter.Integer.convert("0")); + tempP.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempP.setIsPublic((Boolean) RedmineDataConverter.Boolean.convert("false")); + projects.add(tempP); + + trackers = new ArrayList<Tracker>(); + Tracker tempT = null; + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setName((String) RedmineDataConverter.Text.convert("Anomalie")); + trackers.add(tempT); + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("2")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempT.setName((String) RedmineDataConverter.Text.convert("Evolution")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("2")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("2")); + trackers.add(tempT); + tempT = new Tracker(); + tempT.setId((Integer) RedmineDataConverter.Integer.convert("3")); + tempT.setIsInChlog((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setIsInRoadmap((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempT.setName((String) RedmineDataConverter.Text.convert("Assistance")); + tempT.setPosition((Integer) RedmineDataConverter.Integer.convert("3")); + tempT.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempT.setTrackerId((Integer) RedmineDataConverter.Integer.convert("3")); + trackers.add(tempT); + + users = new ArrayList<User>(); + User tempU = null; + tempU = new User(); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T17:24:46+02:00")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T01:23:59+02:00")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("5")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("Redmine")); + tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("Admin")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("admin")); + tempU.setMail((String) RedmineDataConverter.Text.convert("dummy@codelutin.com")); + users.add(tempU); + tempU = new User(); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("true")); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:02+02:00")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("tony")); + tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("8aed1322e5450badb078e1fb60a817a1df25a2ca")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("5")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("chemit2")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("tchemit2")); + tempU.setMail((String) RedmineDataConverter.Text.convert("chemit@codelutin.com")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("4")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("3")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T19:49:38+02:00")); + users.add(tempU); + tempU = new User(); + tempU.setAdmin((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T16:24:11+02:00")); + tempU.setFirstname((String) RedmineDataConverter.Text.convert("dev")); + tempU.setHashedPassword((String) RedmineDataConverter.Text.convert("70c881d4a26984ddce795f6f71817c9cf4480e79")); + tempU.setId((Integer) RedmineDataConverter.Integer.convert("7")); + tempU.setLanguage((String) RedmineDataConverter.Text.convert("fr")); + tempU.setLastLoginOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + tempU.setLastname((String) RedmineDataConverter.Text.convert("dev")); + tempU.setLogin((String) RedmineDataConverter.Text.convert("dev")); + tempU.setMail((String) RedmineDataConverter.Text.convert("dev3@ynot-home.info")); + tempU.setMailNotification((Boolean) RedmineDataConverter.Boolean.convert("false")); + tempU.setMemberId((Integer) RedmineDataConverter.Integer.convert("9")); + tempU.setRoleId((Integer) RedmineDataConverter.Integer.convert("4")); + tempU.setStatus((Integer) RedmineDataConverter.Integer.convert("1")); + tempU.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T16:34:39+02:00")); + users.add(tempU); + + versions = new ArrayList<Version>(); + Version tempV = null; + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:47:39+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yo")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("9")); + tempV.setName((String) RedmineDataConverter.Text.convert("yor")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:49+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("13")); + tempV.setName((String) RedmineDataConverter.Text.convert("rrrrrrrrrouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:09+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("15")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaauuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:07:58+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:12:25+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoyeppppppppppppppppp")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("16")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaau")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T04:13:20+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("14")); + tempV.setName((String) RedmineDataConverter.Text.convert("aaaaaaaaaarrrrrrrrrouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:05:40+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("5")); + tempV.setName((String) RedmineDataConverter.Text.convert("2")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-05T00:39:15+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setName((String) RedmineDataConverter.Text.convert("1.0.0")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-04T18:13:05+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("11")); + tempV.setName((String) RedmineDataConverter.Text.convert("yaouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:12+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:50:59+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("yoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("10")); + tempV.setName((String) RedmineDataConverter.Text.convert("ya")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T02:54:16+02:00")); + versions.add(tempV); + tempV = new Version(); + tempV.setCreatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:37+02:00")); + tempV.setDescription((String) RedmineDataConverter.Text.convert("ysssoye")); + tempV.setEffectiveDate((Date) RedmineDataConverter.Date.convert("2009-09-06")); + tempV.setId((Integer) RedmineDataConverter.Integer.convert("12")); + tempV.setName((String) RedmineDataConverter.Text.convert("ouuuuuua")); + tempV.setProjectId((Integer) RedmineDataConverter.Integer.convert("1")); + tempV.setUpdatedOn((Date) RedmineDataConverter.Datetime.convert("2009-09-06T03:00:42+02:00")); + versions.add(tempV); + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/TestHelper.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,220 @@ +package org.nuiton.redmine.model.io.xpp3; + +import java.beans.Introspector; +import org.nuiton.redmine.model.*; +import java.io.File; +import java.io.FileInputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.apache.maven.plugin.logging.SystemStreamLog; +import org.codehaus.plexus.util.IOUtil; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.redmine.TestHelper; + +/** + * + * @author chemit + * @since 1.0.0 + */ +public class RedmineXpp3HelperTest { + + private static final Class<?>[] TYPES = new Class<?>[]{ + Attachment.class, + Issue.class, + Project.class, + Tracker.class, + User.class, + Version.class + }; + protected static SystemStreamLog log; + protected static File testDir; + protected static RedmineXpp3Helper builder; + List<Attachment> attachments; + List<Issue> issues; + List<Project> projects; + List<Tracker> trackers; + List<User> users; + List<Version> versions; + File file; + + @BeforeClass + public static void setUpClass() throws Exception { + + log = new SystemStreamLog(); + + testDir = TestHelper.getTestDir(RedmineXpp3HelperTest.class, "target" + File.separator + "test-classes"); + + builder = new RedmineXpp3Helper(); + + log.info("test dir : " + testDir.getAbsolutePath().substring(TestHelper.getBaseDir().getAbsolutePath().length() + 1)); + + // setup memory model + TestHelper.loadMemoryModel(); + } + + @AfterClass + public static void tearDownClass() throws Exception { + testDir = null; + builder = null; + log = null; + } + + @Before + public void setUp() { + attachments = TestHelper.getAttachments(); + issues = TestHelper.getIssues(); + projects = TestHelper.getProjects(); + trackers = TestHelper.getTrackers(); + users = TestHelper.getUsers(); + versions = TestHelper.getVersions(); + } + + @After + public void tearDown() { + file = null; + attachments = null; + issues = null; + projects = null; + trackers = null; + users = null; + versions = null; + } + + /** + * Test the method {@code read} of class ModelBuilder. + * + * @throws Exception + */ + @Test + public void testRead() throws Exception { + + TestAction action = new TestAction() { + + @Override + protected <T> void runForType(File rootDir, Class<T> type, List<?> expected) throws Exception { + + File file = new File(rootDir, Introspector.decapitalize(type.getSimpleName()) + ".xml"); + + log.info("will test " + file.getAbsolutePath().substring(TestHelper.getBaseDir().getAbsolutePath().length() + 1)); + + // test from file + + T actual = builder.readObject(type, file); + + TestHelper.assertMyEquals(type, expected.get(0), actual); + + // test from string + + String txt = IOUtil.toString(new FileInputStream(file)); + + actual = builder.readObject(type, txt); + + TestHelper.assertMyEquals(type, expected.get(0), actual); + } + }; + + action.run("single", + Arrays.asList(attachments.get(0)), + Arrays.asList(issues.get(0)), + Arrays.asList(projects.get(0)), + Arrays.asList(trackers.get(0)), + Arrays.asList(users.get(0)), + Arrays.asList(versions.get(0))); + } + + /** + * Test the method {@code readArray} of class ModelBuilder. + * + * @throws Exception + */ + @Test + @SuppressWarnings("unchecked") + public void testReadArray() throws Exception { + + TestAction action = new TestAction() { + + @Override + protected <T> void runForType(File rootDir, Class<T> type, List<?> expected) throws Exception { + + File file = new File(rootDir, Introspector.decapitalize(type.getSimpleName()) + "s.xml"); + + log.info("will test " + file.getAbsolutePath().substring(TestHelper.getBaseDir().getAbsolutePath().length() + 1)); + + // test from file + + T[] actual = builder.readObjects(type, file); + + TestHelper.assertMyListEquals(type, (List<T>) expected, actual); + + // test from text + String txt = IOUtil.toString(new FileInputStream(file)); + + actual = builder.readObjects(type, txt); + + TestHelper.assertMyListEquals(type, (List<T>) expected, actual); + } + }; + + action.run("array-empty", + Collections.EMPTY_LIST, + Collections.EMPTY_LIST, + Collections.EMPTY_LIST, + Collections.EMPTY_LIST, + Collections.EMPTY_LIST, + Collections.EMPTY_LIST); + + + action.run("array-singleton", + Arrays.asList(attachments.get(0)), + Arrays.asList(issues.get(0)), + Arrays.asList(projects.get(0)), + Arrays.asList(trackers.get(0)), + Arrays.asList(users.get(0)), + Arrays.asList(versions.get(0))); + + action.run("array-multi", + attachments, + issues, + projects, + trackers, + users, + versions); + + } + + /** + * A little action wrapper to simplify this test class :) + * + */ + public static abstract class TestAction { + + /** + * Implements the logic of action for the given {@code type} and + * the {@code expected} datas. + * + * @param <T> the type of data used + * @param rootDir the rootdir file of the local cache + * @param type the type of data used + * @param expected the list of expected datas + * @throws Exception if any pb + */ + protected abstract <T> void runForType(File rootDir, Class<T> type, List<?> expected) throws Exception; + + public void run(String name, List<?>... expected) throws Exception { + int size = TYPES.length; + Assert.assertEquals(size, expected.length); + File rootDir = new File(testDir, name); + + + for (int i = 0; i < size; i++) { + runForType(rootDir, TYPES[i], expected[i]); + } + } + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Deleted: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/AbstractRedmineMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/AbstractRedmineMojoTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/AbstractRedmineMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,47 +0,0 @@ -package org.nuiton.redmine.plugin; - -import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.MojoFailureException; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.Assume; -import org.junit.Before; -import org.nuiton.util.BasePluginTestCase; - -/** - * @param <P> the goal to test - * @author tchemit - * @since 1.0.0 - */ -public abstract class AbstractRedmineMojoTest<P extends AbstractRedmineMojo> extends BasePluginTestCase<P> { - - @AfterClass - public static void cleanAfterClass() throws Exception { - if (log != null) { - log.info("release test " + testDir.getName()); - log = null; - } - configItr = null; - testDir = null; - } - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - Assert.assertNotNull(mojo); - boolean canContinue = false; - try { - if (mojo.init()) { - canContinue = true; - } - mojo.getLog().info("setup done for " + mojo.getProject().getFile().getName()); - } catch (MojoFailureException ex) { - mojo.getLog().warn("can not init mojo" + mojo.getProject().getFile().getName() + ", test will be skip : " + ex.getMessage()); - throw ex; - } catch (MojoExecutionException ex) { - mojo.getLog().warn("can not connect to " + mojo.getRedmineUrl() + ", test will be skip : " + ex.getMessage()); - } - Assume.assumeTrue(canContinue); - } -} Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DisplayDataMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DisplayDataMojoTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DisplayDataMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,103 @@ +package org.nuiton.redmine.plugin; + +import org.apache.maven.model.IssueManagement; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.redmine.TestHelper; +import org.nuiton.util.BasePluginTestCase; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class DisplayDataMojoTest extends BasePluginTestCase<DisplayDataMojo> { + + private static final String GOAL_NAME="display-data"; + + @AfterClass + public static void cleanAfterClass() throws Exception { + if (log != null) { + if (log.isDebugEnabled()) { + log.debug("release test " + testDir.getName()); + } + log = null; + } + configItr = null; + testDir = null; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + Assert.assertNotNull(mojo); + // copy redmine test server configuration + TestHelper.copyConfiguration(TestHelper.getTestConfiguration(DisplayDataMojoTest.class.getSimpleName() + "-" + pomFile.getName()), mojo); + // add a issue management + IssueManagement i = new IssueManagement(); + i.setSystem("redmine"); + i.setUrl(mojo.getRedmineUrl() + "/projects/one/issues"); + mojo.getProject().setIssueManagement(i); + boolean canContinue = mojo.init(); + if (canContinue) { + if (mojo.isVerbose()) { + log.info("setup done for " + mojo.getProject().getFile().getName()); + } + } else { + log.warn("setup was not successfull, will skip this test class"); + } + + Assume.assumeTrue(canContinue); + } + + @BeforeClass + public static void initClass() throws Exception { + + initConfigs(DisplayDataMojoTest.class); + } + + @Test + @PluginConfig(pomName = "display-project-trackers.xml", goalName = GOAL_NAME) + public void testTrackers() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "display-project-users.xml", goalName = GOAL_NAME) + public void testProject() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "display-project-issue-categories.xml", goalName = GOAL_NAME) + public void testProject2() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "display-issue-statuses.xml", goalName = GOAL_NAME) + public void testUsers() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "display-all.xml", goalName = GOAL_NAME) + public void testAll() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DisplayDataMojoTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DownloadDataMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DownloadDataMojoTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DownloadDataMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,167 @@ +package org.nuiton.redmine.plugin; + +import org.apache.maven.model.IssueManagement; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; +import org.nuiton.redmine.TestHelper; +import org.nuiton.util.BasePluginTestCase; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class DownloadDataMojoTest extends BasePluginTestCase<DownloadDataMojo> { + + private static final String GOAL_NAME = "download"; + + @AfterClass + public static void cleanAfterClass() throws Exception { + if (log != null) { + if (log.isDebugEnabled()) { + log.debug("release test " + testDir.getName()); + } + log = null; + } + configItr = null; + testDir = null; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + Assert.assertNotNull(mojo); + // copy redmine test server configuration + TestHelper.copyConfiguration(TestHelper.getTestConfiguration(DownloadDataMojoTest.class.getSimpleName() + "-" + pomFile.getName()), mojo); + // add a issue management + IssueManagement i = new IssueManagement(); + i.setSystem("redmine"); + i.setUrl(mojo.getRedmineUrl() + "/projects/one/issues"); + mojo.getProject().setIssueManagement(i); + boolean canContinue = mojo.init(); + if (canContinue) { + if (mojo.isVerbose()) { + log.info("setup done for " + mojo.getProject().getFile().getName()); + } + } else { + log.warn("setup was not successfull, will skip this test class"); + } + + Assume.assumeTrue(canContinue); + } + + @BeforeClass + public static void initClass() throws Exception { + + initConfigs(DownloadDataMojoTest.class); + } + + @Test + @PluginConfig(pomName = "get-projects.xml", goalName = GOAL_NAME) + public void testProjects() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project.xml", goalName = GOAL_NAME) + public void testProject() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project2.xml", goalName = GOAL_NAME) + public void testProject2() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project-users.xml", goalName = GOAL_NAME) + public void testUsers() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project-trackers.xml", goalName = GOAL_NAME) + public void testTrakers() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project-versions.xml", goalName = GOAL_NAME) + public void testVersions() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-version.xml", goalName = GOAL_NAME) + public void testVersion() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-version-issues.xml", goalName = GOAL_NAME) + public void testIssues() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-issue-statuses.xml", goalName = GOAL_NAME) + public void testIssueStatuses() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-issue-priorities.xml", goalName = GOAL_NAME) + public void testIssuePriorities() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-project-issue-categories.xml", goalName = GOAL_NAME) + public void testIssueCategories() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-version-attachments.xml", goalName = GOAL_NAME) + public void testAttachments() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } + + @Test + @PluginConfig(pomName = "get-all.xml", goalName = GOAL_NAME) + public void testAll() throws Exception { + + mojo.doAction(); + //TODO check file is generated + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/DownloadDataMojoTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GenerateChangesMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GenerateChangesMojoTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GenerateChangesMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,15 +1,63 @@ package org.nuiton.redmine.plugin; +import org.apache.maven.model.IssueManagement; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; import org.nuiton.util.PluginConfig; import org.junit.BeforeClass; import org.junit.Test; +import org.nuiton.redmine.TestHelper; +import org.nuiton.util.BasePluginTestCase; /** * @author tchemit * @since 1.0.0 */ -public class GenerateChangesMojoTest extends AbstractRedmineMojoTest<GenerateChangesMojo> { +public class GenerateChangesMojoTest extends BasePluginTestCase<GenerateChangesMojo> { + private static final String GOAL_NAME="generate-changes"; + @AfterClass + public static void cleanAfterClass() throws Exception { + if (log != null) { + if (log.isDebugEnabled()) { + log.debug("release test " + testDir.getName()); + } + log = null; + } + configItr = null; + testDir = null; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + Assert.assertNotNull(mojo); + + // copy redmine test server configuration + TestHelper.copyConfiguration(TestHelper.getTestConfiguration(GenerateChangesMojoTest.class.getSimpleName() + "-" + pomFile.getName()), mojo); + mojo.setVerbose(true); + // add a issue management + IssueManagement i = new IssueManagement(); + i.setSystem("redmine"); + i.setUrl(mojo.getRedmineUrl() + "/projects/one/issues"); + mojo.getProject().setIssueManagement(i); + + boolean canContinue = mojo.init(); + + if (canContinue) { + if (mojo.isVerbose()) { + log.info("setup done for " + mojo.getProject().getFile().getName()); + } + } else { + log.warn("setup was not successfull, will skip this test class"); + } + + Assume.assumeTrue(canContinue); + } + @BeforeClass public static void initClass() throws Exception { @@ -17,9 +65,10 @@ } @Test - @PluginConfig(pomName = "generate-changes.xml", goalName = "generate-changes") + @PluginConfig(pomName = "generate-changes.xml", goalName = GOAL_NAME) public void testGenerateChangesMojo() throws Exception { + mojo.doAction(); //TODO check file is generated } Deleted: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectDataMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectDataMojoTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectDataMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,50 +0,0 @@ -package org.nuiton.redmine.plugin; - -import org.nuiton.util.PluginConfig; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * @author tchemit - * @since 1.0.0 - */ -public class GetProjectDataMojoTest extends AbstractRedmineMojoTest<GetProjectDataMojo> { - - @BeforeClass - public static void initClass() throws Exception { - - initConfigs(GetProjectDataMojoTest.class); - } - - @Test - @PluginConfig(pomName = "get-project.xml", goalName = "get-project-data") - public void testProject() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } - - @Test - @PluginConfig(pomName = "get-project-users.xml", goalName = "get-project-data") - public void testUsers() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } - - @Test - @PluginConfig(pomName = "get-project-trackers.xml", goalName = "get-project-data") - public void testTrakers() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } - - @Test - @PluginConfig(pomName = "get-project-versions.xml", goalName = "get-project-data") - public void testVersions() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } -} Deleted: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojoTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/GetProjectVersionDataMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,42 +0,0 @@ -package org.nuiton.redmine.plugin; - -import org.nuiton.util.PluginConfig; -import org.junit.BeforeClass; -import org.junit.Test; - -/** - * @author tchemit - * @since 1.0.0 - */ -public class GetProjectVersionDataMojoTest extends AbstractRedmineMojoTest<GetProjectVersionDataMojo> { - - @BeforeClass - public static void initClass() throws Exception { - - initConfigs(GetProjectVersionDataMojoTest.class); - } - - @Test - @PluginConfig(pomName = "get-version.xml", goalName = "get-project-version-data") - public void testVersion() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } - - @Test - @PluginConfig(pomName = "get-version-issues.xml", goalName = "get-project-version-data") - public void testIssues() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } - - @Test - @PluginConfig(pomName = "get-version-files.xml", goalName = "get-project-version-data") - public void testFiles() throws Exception { - - mojo.doAction(); - //TODO check file is generated - } -} Deleted: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/RedmineReportMojoTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/RedmineReportMojoTest.java 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/RedmineReportMojoTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -1,42 +0,0 @@ -package org.nuiton.redmine.plugin; - -import org.nuiton.util.PluginConfig; -import org.junit.BeforeClass; -import org.junit.Test; - - -/** - * @author tchemit - * @since 1.0.0 - */ -public class RedmineReportMojoTest extends AbstractRedmineMojoTest<RedmineReportMojo> { - - @BeforeClass - public static void initClass() throws Exception { - initConfigs(RedmineReportMojoTest.class); -// initConfigs(RedmineReportMojoTest.class, "testRedmineReportMojo"); - } - -// @AfterClass -// public static void afterClass() throws Exception { -// configItr = null; -// testDir = null; -// } -// @Before -// @Override -// public void setUp() throws Exception { -// super.setUp(); -// assertNotNull(mojo); -// mojo = (RedmineReportMojo) mojo; -// } -// @Test -// public void testDummy() { -// -// } - @Test - @PluginConfig(pomName = "redmine-report.xml", goalName = "redmine-report") - public void testRedmineReportMojo() throws Exception { - - mojo.doAction(); - } -} Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/AbstractIssuesReportTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/AbstractIssuesReportTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/AbstractIssuesReportTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,53 @@ +package org.nuiton.redmine.plugin.report; + +import org.apache.maven.model.IssueManagement; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Assume; +import org.junit.Before; +import org.nuiton.redmine.TestHelper; +import org.nuiton.util.BasePluginTestCase; + +/** + * @param <P> type of issue reports to test + * @author tchemit + * @since 1.0.0 + */ +public abstract class AbstractIssuesReportTest<P extends AbstractIssuesReport> extends BasePluginTestCase<P> { + + @AfterClass + public static void cleanAfterClass() throws Exception { + if (log != null) { + if (log.isDebugEnabled()) { + log.debug("release test " + testDir.getName()); + } + log = null; + } + configItr = null; + testDir = null; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + Assert.assertNotNull(mojo); + // copy redmine test server configuration + TestHelper.copyConfiguration(TestHelper.getTestConfiguration(getClass().getSimpleName() + "-" + pomFile.getName()), mojo); + // add a issue management + IssueManagement i = new IssueManagement(); + i.setSystem("redmine"); + i.setUrl(mojo.getRedmineUrl() + "/projects/one/issues"); + mojo.getProject().setIssueManagement(i); + boolean canContinue = mojo.canGenerateReport(); + if (canContinue) { + if (mojo.isVerbose()) { + log.info("setup done for " + mojo.getProject().getFile().getName()); + } + } else { + log.warn("setup was not successfull, will skip this test class"); + } + + Assume.assumeTrue(canContinue); + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/AbstractIssuesReportTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByAssigneeTest extends AbstractIssuesReportTest<IssuesReportByAssignee> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByAssigneeTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-assignee") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByCategoryTest extends AbstractIssuesReportTest<IssuesReportByCategory> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByCategoryTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-category") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByPriorityTest extends AbstractIssuesReportTest<IssuesReportByPriority> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByPriorityTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-priority") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByReporterTest extends AbstractIssuesReportTest<IssuesReportByReporter> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByReporterTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-reporter") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByStatusTest extends AbstractIssuesReportTest<IssuesReportByStatus> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByStatusTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-status") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByTrackerTest extends AbstractIssuesReportTest<IssuesReportByTracker> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByTrackerTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-tracker") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest.java =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportByVersionTest extends AbstractIssuesReportTest<IssuesReportByVersion> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportByVersionTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report-by-version") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Copied: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportTest.java (from rev 31, maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/RedmineReportMojoTest.java) =================================================================== --- maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportTest.java (rev 0) +++ maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportTest.java 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,25 @@ +package org.nuiton.redmine.plugin.report; + +import org.nuiton.util.PluginConfig; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * @author tchemit + * @since 1.0.0 + */ +public class IssuesReportTest extends AbstractIssuesReportTest<IssuesReport> { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(IssuesReportTest.class); + } + + @Test + @PluginConfig(pomName = "issues-report.xml", goalName = "issues-report") + public void testRedmineReportMojo() throws Exception { + //TODO make this possible + //mojo.execute(); + //TODO do some checks ? + } +} Property changes on: maven-redmine-plugin/trunk/src/test/java/org/nuiton/redmine/plugin/report/IssuesReportTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: svn:mergeinfo + Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/attachments.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/attachments.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachments type="array"> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> + </attachment> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json2</disk-filename> + <filename>get_issue.json2</filename> + </attachment> +</attachments> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/issues.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/issues.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues type="array"> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> + </issue> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">4</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !2</description> + <subject>yes!2</subject> + </issue> +</issues> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/version.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/version.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/__Vyo/version.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> +</version> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/project.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/project.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/project.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + + <description></description> + <homepage></homepage> + <identifier>one</identifier> + <name>one</name> + + <id type="integer">1</id> + <parent-id type="integer" nil="true"></parent-id> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + + <is-public type="boolean">true</is-public> +</project> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<trackers type="array"> + <tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> + </tracker> + <tracker> + <id type="integer">2</id> + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">true</is-in-roadmap> + <name>Evolution</name> + <position type="integer">2</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">2</tracker-id> + </tracker> + <tracker> + <id type="integer">3</id> + <is-in-chlog type="boolean">false</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + <name>Assistance</name> + <position type="integer">3</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">3</tracker-id> + </tracker> +</trackers> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<users type="array"> + <user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> + </user> + <user> + <admin type="boolean">true</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-04T19:49:02+02:00</created-on> + <firstname>tony</firstname> + <hashed-password>8aed1322e5450badb078e1fb60a817a1df25a2ca</hashed-password> + <id type="integer">5</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-04T19:49:38+02:00</last-login-on> + <lastname>chemit2</lastname> + <login>tchemit2</login> + <mail>chemit@codelutin.com</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">4</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-04T19:49:38+02:00</updated-on> + </user> + <user> + <admin type="boolean">false</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-05T16:24:11+02:00</created-on> + <firstname>dev</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <id type="integer">7</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-06T16:34:39+02:00</last-login-on> + <lastname>dev</lastname> + <login>dev</login> + <mail>dev3@ynot-home.info</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">9</member-id> + <role-id type="NilClass">4</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-06T16:34:39+02:00</updated-on> + </user> +</users> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/versions.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/__Pone/versions.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions type="array"> + <version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:09+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">13</id> + <name>rrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:09+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:07:58+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">15</id> + <name>aaaauuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:07:58+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T04:12:25+02:00</created-on> + <description>ysssoyeppppppppppppppppp</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">16</id> + <name>aaaau</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T04:13:20+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:40+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">14</id> + <name>aaaaaaaaaarrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:40+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-05T00:39:15+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">5</id> + <name>2</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-05T00:39:15+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-04T18:13:05+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">1</id> + <name>1.0.0</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-04T18:13:05+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:12+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">11</id> + <name>yaouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:12+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T02:50:59+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">10</id> + <name>ya</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:54:16+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:37+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">12</id> + <name>ouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:42+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> +</versions> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/RedmineDataProviderTest/off-line/projects.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projects type="array"> + <project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <description/> + <homepage/> + <id type="integer">1</id> + <identifier>one</identifier> + <is-public type="boolean">true</is-public> + <name>one</name> + <parent-id type="integer" nil="true"/> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + </project> + <project> + <created-on type="datetime">2009-09-05T16:22:14+02:00</created-on> + <description/> + <homepage/> + <id type="integer">2</id> + <identifier>two</identifier> + <is-public type="boolean">false</is-public> + <name>two</name> + <parent-id type="integer" nil="true"/> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-05T16:22:29+02:00</updated-on> + </project> +</projects> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/attachments.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/attachments.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachments type="array"> +</attachments> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/issues.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/issues.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues type="array"> +</issues> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/projects.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projects type="array"> +</projects> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<trackers type="array"> +</trackers> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<users type="array"> +</users> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/versions.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-empty/versions.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions type="array"> +</versions> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/attachments.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/attachments.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachments type="array"> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> + </attachment> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json2</disk-filename> + <filename>get_issue.json2</filename> + </attachment> +</attachments> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/issues.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/issues.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues type="array"> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> + </issue> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">4</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !2</description> + <subject>yes!2</subject> + </issue> +</issues> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/projects.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projects type="array"> + <project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <description/> + <homepage/> + <id type="integer">1</id> + <identifier>one</identifier> + <is-public type="boolean">true</is-public> + <name>one</name> + <parent-id type="integer" nil="true"/> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + </project> + <project> + <created-on type="datetime">2009-09-05T16:22:14+02:00</created-on> + <description/> + <homepage/> + <id type="integer">2</id> + <identifier>two</identifier> + <is-public type="boolean">false</is-public> + <name>two</name> + <parent-id type="integer" nil="true"/> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-05T16:22:29+02:00</updated-on> + </project> +</projects> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<trackers type="array"> + <tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> + </tracker> + <tracker> + <id type="integer">2</id> + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">true</is-in-roadmap> + <name>Evolution</name> + <position type="integer">2</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">2</tracker-id> + </tracker> + <tracker> + <id type="integer">3</id> + <is-in-chlog type="boolean">false</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + <name>Assistance</name> + <position type="integer">3</position> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">3</tracker-id> + </tracker> +</trackers> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<users type="array"> + <user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> + </user> + <user> + <admin type="boolean">true</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-04T19:49:02+02:00</created-on> + <firstname>tony</firstname> + <hashed-password>8aed1322e5450badb078e1fb60a817a1df25a2ca</hashed-password> + <id type="integer">5</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-04T19:49:38+02:00</last-login-on> + <lastname>chemit2</lastname> + <login>tchemit2</login> + <mail>chemit@codelutin.com</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">4</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-04T19:49:38+02:00</updated-on> + </user> + <user> + <admin type="boolean">false</admin> + <auth-source-id type="integer" nil="true"></auth-source-id> + <created-on type="datetime">2009-09-05T16:24:11+02:00</created-on> + <firstname>dev</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <id type="integer">7</id> + <language>fr</language> + <last-login-on type="datetime">2009-09-06T16:34:39+02:00</last-login-on> + <lastname>dev</lastname> + <login>dev</login> + <mail>dev3@ynot-home.info</mail> + <mail-notification type="boolean">false</mail-notification> + <member-id type="NilClass">9</member-id> + <role-id type="NilClass">4</role-id> + <status type="integer">1</status> + <updated-on type="datetime">2009-09-06T16:34:39+02:00</updated-on> + </user> +</users> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/versions.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-multi/versions.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,103 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions type="array"> + <version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:09+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">13</id> + <name>rrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:09+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:07:58+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">15</id> + <name>aaaauuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:07:58+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T04:12:25+02:00</created-on> + <description>ysssoyeppppppppppppppppp</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">16</id> + <name>aaaau</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T04:13:20+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:05:40+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">14</id> + <name>aaaaaaaaaarrrrrrrrrouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:05:40+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-05T00:39:15+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">5</id> + <name>2</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-05T00:39:15+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-04T18:13:05+02:00</created-on> + <description></description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">1</id> + <name>1.0.0</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-04T18:13:05+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:12+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">11</id> + <name>yaouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:12+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T02:50:59+02:00</created-on> + <description>yoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">10</id> + <name>ya</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:54:16+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> + <version> + <created-on type="datetime">2009-09-06T03:00:37+02:00</created-on> + <description>ysssoye</description> + <effective-date type="date">2009-09-06</effective-date> + <id type="integer">12</id> + <name>ouuuuuua</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T03:00:42+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> +</versions> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/attachments.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/attachments.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachments type="array"> + <attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> + </attachment> +</attachments> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/issues.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/issues.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issues type="array"> + <issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> + </issue> +</issues> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/projects.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projects type="array"> + <project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + + <description></description> + <homepage></homepage> + <identifier>one</identifier> + <name>one</name> + + <id type="integer">1</id> + <parent-id type="integer" nil="true"></parent-id> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + + <is-public type="boolean">true</is-public> + </project> +</projects> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<trackers type="array"> + <tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> + </tracker> +</trackers> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<users type="array"> + <user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> + </user> +</users> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/versions.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/array-singleton/versions.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<versions type="array"> + <version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> + </version> +</versions> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/attachment.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/attachment.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/attachment.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<attachment> + <author-id type="integer">4</author-id> + <container-id type="integer">1</container-id> + <id type="integer">1</id> + <filesize type="integer">411</filesize> + <downloads type="integer">0</downloads> + + <created-on type="datetime">2009-09-05T12:56:41+02:00</created-on> + + <container-type>Version</container-type> + <content-type>application/json</content-type> + <description></description> + <digest>6ea84342c7475c05fb077b4aca832f9a</digest> + <disk-filename>090905125641_get_issue.json</disk-filename> + <filename>get_issue.json</filename> +</attachment> + Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/issue.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/issue.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/issue.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<issue> + <assigned-to-id type="integer" nil="true"></assigned-to-id> + <author-id type="integer">5</author-id> + <category-id type="integer">2</category-id> + <done-ratio type="integer">0</done-ratio> + <lock-version type="integer">7</lock-version> + <priority-id type="integer">4</priority-id> + <project-id type="integer">1</project-id> + <status-id type="integer">3</status-id> + <tracker-id type="integer">1</tracker-id> + <fixed-version-id type="integer">1</fixed-version-id> + <id type="integer">3</id> + + <estimated-hours type="float" nil="true"></estimated-hours> + + <created-on type="datetime">2009-09-04T20:11:52+02:00</created-on> + <updated-on type="datetime">2009-09-06T00:37:40+02:00</updated-on> + <due-date type="date" nil="true"></due-date> + <start-date type="date">2009-09-04</start-date> + + <description>avec une description !</description> + <subject>yes!</subject> +</issue> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/project.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/project.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/project.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project> + <created-on type="datetime">2009-09-04T18:11:54+02:00</created-on> + <updated-on type="datetime">2009-09-04T18:11:54+02:00</updated-on> + + <description></description> + <homepage></homepage> + <identifier>one</identifier> + <name>one</name> + + <id type="integer">1</id> + <parent-id type="integer" nil="true"></parent-id> + <projects-count type="integer">0</projects-count> + <status type="integer">1</status> + + <is-public type="boolean">true</is-public> +</project> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/tracker.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/tracker.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/tracker.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<tracker> + <id type="integer">1</id> + <project-id type="NilClass">1</project-id> + <tracker-id type="NilClass">1</tracker-id> + <position type="integer">1</position> + + <is-in-chlog type="boolean">true</is-in-chlog> + <is-in-roadmap type="boolean">false</is-in-roadmap> + + <name>Anomalie</name> +</tracker> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/user.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/user.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/user.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<user> + <created-on type="datetime">2009-09-04T17:24:46+02:00</created-on> + <updated-on type="datetime">2009-09-06T01:23:59+02:00</updated-on> + <last-login-on type="datetime">2009-09-06T01:23:59+02:00</last-login-on> + + <id type="integer">1</id> + <auth-source-id type="integer" nil="true"></auth-source-id> + <member-id type="NilClass">5</member-id> + <role-id type="NilClass">3</role-id> + <status type="integer">1</status> + + <admin type="boolean">true</admin> + <mail-notification type="boolean">true</mail-notification> + + <firstname>Redmine</firstname> + <hashed-password>70c881d4a26984ddce795f6f71817c9cf4480e79</hashed-password> + <language>fr</language> + <lastname>Admin</lastname> + <login>admin</login> + <mail>dummy@codelutin.com</mail> +</user> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/version.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/version.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/model/io/xpp3/RedmineXpp3HelperTest/single/version.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<version> + <created-on type="datetime">2009-09-06T02:47:39+02:00</created-on> + <description>yo</description> + <effective-date type="date" nil="true"></effective-date> + <id type="integer">9</id> + <name>yor</name> + <project-id type="integer">1</project-id> + <updated-on type="datetime">2009-09-06T02:50:49+02:00</updated-on> + <wiki-page-title nil="true"></wiki-page-title> +</version> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-all.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-all.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-all.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <types>trackers,users,issueStatuses,issueCategories,issuePriorities,trackers</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-priorities.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-priorities.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-priorities.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <types>issuePriorities</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-statuses.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-statuses.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-issue-statuses.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <types>issueStatuses</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-issue-categories.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-issue-categories.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-issue-categories.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>issueCategories</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>trackers</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DisplayDataMojoTest/display-project-users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>users</types> + </configuration> + <executions> + <execution> + <goals> + <goal>display-data</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-all.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-all.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-all.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <types>attachments, + issues, + project, + projects, + trackers, + users, + versions, + version, + issueCategories, + issueStatuses, + issuePriorities + </types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-priorities.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-priorities.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-priorities.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <types>issuePriorities</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-statuses.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-statuses.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-issue-statuses.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <types>issueStatuses</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-issue-categories.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-issue-categories.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-issue-categories.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>issueCategories</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-trackers.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-trackers.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-trackers.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>trackers</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-users.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-users.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-users.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>users</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-versions.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-versions.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project-versions.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>versions</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>project</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project2.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project2.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-project2.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>two</projectId> + <types>project</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-projects.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-projects.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-projects.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <types>projects</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-attachments.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-attachments.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-attachments.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <types>attachments</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-issues.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-issues.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version-issues.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <types>issues</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/DownloadDataMojoTest/get-version.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-generate-changes</artifactId> + <version>0</version> + + <name>generate-changes</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <types>version</types> + </configuration> + <executions> + <execution> + <goals> + <goal>download</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Modified: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/GenerateChangesMojoTest/generate-changes.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/GenerateChangesMojoTest/generate-changes.xml 2009-09-11 22:09:20 UTC (rev 85) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/GenerateChangesMojoTest/generate-changes.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -2,7 +2,7 @@ <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - + <groupId>org.nuiton.maven-redmine-plugin</groupId> <artifactId>test-generate-changes</artifactId> <version>0</version> @@ -16,9 +16,14 @@ <groupId>org.nuiton</groupId> <artifactId>maven-redmine-plugin</artifactId> <configuration> - <redmineUrl>http://mynuiton.org</redmineUrl> - <redmineUsername>chemit</redmineUsername> - <redminePassword>azer</redminePassword> + <xmlPath>target/GenerateChangesMojoTest-generate-changes.xml</xmlPath> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + <actionMapping>fix:1, add:2</actionMapping> + <statusIds>3,4,5</statusIds> + <categoryIds>1</categoryIds> + <changesTitle>Title of the first release</changesTitle> + <!--<releaseDescription>Description of first release</releaseDescription>--> </configuration> <executions> <execution> Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByAssigneeTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByAssignee>one</projectIdByAssignee> + <versionIdByAssignee>1.0.0</versionIdByAssignee> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-assignee</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByCategoryTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByCategory>one</projectIdByCategory> + <versionIdByCategory>1.0.0</versionIdByCategory> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-category</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByPriorityTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByPriority>one</projectIdByPriority> + <versionIdByPriority>1.0.0</versionIdByPriority> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-priority</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByReporterTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByReporter>one</projectIdByReporter> + <versionIdByReporter>1.0.0</versionIdByReporter> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-reporter</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByStatusTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByStatus>one</projectIdByStatus> + <versionIdByStatus>1.0.0</versionIdByStatus> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-status</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByTrackerTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByTracker>one</projectIdByTracker> + <versionIdByTracker>1.0.0</versionIdByTracker> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-tracker</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest/issues-report.xml =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportByVersionTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectIdByVersion>one</projectIdByVersion> + <versionIdByVersion>1.0.0</versionIdByVersion> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report-by-version</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Copied: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/issues-report.xml (from rev 31, maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/RedmineReportMojoTest/redmine-report.xml) =================================================================== --- maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/issues-report.xml (rev 0) +++ maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/issues-report.xml 2009-09-11 22:10:54 UTC (rev 86) @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton.maven-redmine-plugin</groupId> + <artifactId>test-redmine-report</artifactId> + <version>0</version> + + <name>redmine-report</name> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-redmine-plugin</artifactId> + <configuration> + <projectId>one</projectId> + <versionId>1.0.0</versionId> + </configuration> + <executions> + <execution> + <goals> + <goal>issues-report</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Property changes on: maven-redmine-plugin/trunk/src/test/resources/org/nuiton/redmine/plugin/report/IssuesReportTest/issues-report.xml ___________________________________________________________________ Added: svn:mergeinfo +
participants (1)
-
tchemit@users.nuiton.org