Author: olamy Date: Mon Nov 21 14:40:54 2011 New Revision: 1204521 URL: http://svn.apache.org/viewvc?rev=1204521&view=rev Log: add a mojo to update an issue with an a patch file
Added: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/UpdatePatchMojo.java - copied, changed from r1204515, maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/PatchTracker.java maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraPatchTracker.java maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraSession.java Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java?rev=1204521&r1=1204520&r2=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/AbstractPatchMojo.java Mon Nov 21 14:40:54 2011 @@ -181,14 +181,19 @@ public abstract class AbstractPatchMojo } } - protected PatchTrackerRequest buidPatchTrackerRequest() + protected PatchTrackerRequest buidPatchTrackerRequest( boolean creation ) throws MojoExecutionException { try { - return new PatchTrackerRequest().setUrl( getPatchTrackerUrl() ).setUserName( - getPatchTrackerUsername() ).setPassword( getPatchTrackerPassword() ).setSummary( - getPatchTrackerSummary() ).setDescription( getPatchTrackerDescription() ).setPatchType( patchType ); + PatchTrackerRequest patchTrackerRequest = + new PatchTrackerRequest().setUrl( getPatchTrackerUrl() ).setUserName( + getPatchTrackerUsername() ).setPassword( getPatchTrackerPassword() ).setPatchType( patchType ); + + return creation ? patchTrackerRequest.setSummary( getPatchTrackerSummary() ).setDescription( + getPatchTrackerDescription() ) : patchTrackerRequest; + + } catch ( PrompterException e ) { Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java?rev=1204521&r1=1204520&r2=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java Mon Nov 21 14:40:54 2011 @@ -42,7 +42,7 @@ public class CreatePatchMojo String patchContent = getPatchContent(); - PatchTrackerRequest patchTrackerRequest = buidPatchTrackerRequest(); + PatchTrackerRequest patchTrackerRequest = buidPatchTrackerRequest( true ); patchTrackerRequest.setPatchContent( patchContent ); Copied: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/UpdatePatchMojo.java (from r1204515, maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java) URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/UpdatePatchMojo.java?p2=maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/UpdatePatchMojo.java&p1=maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java&r1=1204515&r2=1204521&rev=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/CreatePatchMojo.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/UpdatePatchMojo.java Mon Nov 21 14:40:54 2011 @@ -16,43 +16,51 @@ package org.apache.maven.plugins.patchtr * limitations under the License. */ +import org.apache.commons.lang.StringUtils; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.patchtracker.tracking.PatchTracker; import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerException; import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerRequest; import org.apache.maven.plugins.patchtracker.tracking.PatchTrackerResult; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.codehaus.plexus.components.interactivity.PrompterException; /** * Goal which create a diff/patch file from the current project and create an issue in the project * with attaching the created patch file * - * @goal create + * @goal update * @aggregator */ -public class CreatePatchMojo +public class UpdatePatchMojo extends AbstractPatchMojo { + /** + * @parameter expression="${patch.patchId}" default-value="" + */ + protected String patchId; + public void execute() throws MojoExecutionException { - // TODO do a status before and complains if some files in to be added status ? - String patchContent = getPatchContent(); + try + { + // TODO do a status before and complains if some files in to be added status ? - PatchTrackerRequest patchTrackerRequest = buidPatchTrackerRequest(); + String patchContent = getPatchContent(); - patchTrackerRequest.setPatchContent( patchContent ); + PatchTrackerRequest patchTrackerRequest = buidPatchTrackerRequest( false ); - getLog().debug( patchTrackerRequest.toString() ); + patchTrackerRequest.setPatchId( getPatchId() ).setPatchContent( patchContent ).setDescription( + getPatchTrackerDescription() ); - try - { + getLog().debug( patchTrackerRequest.toString() ); PatchTracker patchTracker = getPatchTracker(); - PatchTrackerResult result = patchTracker.createPatch( patchTrackerRequest ); - getLog().info( "issue created with id:" + result.getPatchId() + ", url:" + result.getPatchUrl() ); + PatchTrackerResult result = patchTracker.updatePatch( patchTrackerRequest ); + getLog().info( "issue updated with id:" + result.getPatchId() + ", url:" + result.getPatchUrl() ); } catch ( ComponentLookupException e ) { @@ -62,9 +70,29 @@ public class CreatePatchMojo { throw new MojoExecutionException( e.getMessage(), e ); } + catch ( PrompterException e ) + { + throw new MojoExecutionException( e.getMessage(), e ); + } } + protected String getPatchId() + throws PrompterException, MojoExecutionException + { + String value = null; + + // cli must win ! + if ( StringUtils.isNotEmpty( patchId ) ) + { + value = patchId; + } + + return getValue( value, "patch id to update ?", null, true, + "you must configure a patch id when updating an issue or at least use interactive mode", value, + false ); + } + } Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/PatchTracker.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/PatchTracker.java?rev=1204521&r1=1204520&r2=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/PatchTracker.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/PatchTracker.java Mon Nov 21 14:40:54 2011 @@ -27,7 +27,22 @@ package org.apache.maven.plugins.patchtr public interface PatchTracker { + /** + * create a new entry in the patch tracker + * @param patchTrackerRequest + * @return + * @throws PatchTrackerException + */ PatchTrackerResult createPatch( PatchTrackerRequest patchTrackerRequest ) throws PatchTrackerException; + /** + * update a patch entry in the patch tracker + * <b>patchTrackerRequest.patchId is mandatory!</b> + * @param patchTrackerRequest + * @return + * @throws PatchTrackerException + */ + PatchTrackerResult updatePatch( PatchTrackerRequest patchTrackerRequest ) + throws PatchTrackerException; } Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraPatchTracker.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraPatchTracker.java?rev=1204521&r1=1204520&r2=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraPatchTracker.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraPatchTracker.java Mon Nov 21 14:40:54 2011 @@ -47,32 +47,60 @@ public class JiraPatchTracker JiraSession jiraSession = createSession( patchTrackerRequest ); try { - RemoteIssue remoteIssue = null; - // is it an update - if ( patchTrackerRequest.getPatchId() != null ) - { + RemoteIssue remoteIssue = new RemoteIssue(); + remoteIssue.setProject( extractProjectKey( patchTrackerRequest.getUrl() ) ); + remoteIssue.setSummary( patchTrackerRequest.getSummary() ); + remoteIssue.setDescription( patchTrackerRequest.getDescription() ); + remoteIssue.setType( patchTrackerRequest.getPatchType() ); - } - else + remoteIssue = jiraSession.createIssue( remoteIssue ); + + // TODO handle of boolean result + jiraSession.addBase64EncodedAttachmentsToIssue( remoteIssue.getKey(), remoteIssue.getKey(), + patchTrackerRequest.getPatchContent() ); + + // add a comment + + return new PatchTrackerResult().setPatchId( remoteIssue.getKey() ).setPatchUrl( + extractBaseUrl( patchTrackerRequest.getUrl() ) + "/browse/" + remoteIssue.getKey() ); + } + catch ( RemoteAuthenticationException e ) + { + throw new PatchTrackerException( e.getMessage(), e ); + } + catch ( RemoteException e ) + { + throw new PatchTrackerException( e.getMessage(), e ); + } + catch ( java.rmi.RemoteException e ) + { + throw new PatchTrackerException( e.getMessage(), e ); + } + } + + public PatchTrackerResult updatePatch( PatchTrackerRequest patchTrackerRequest ) + throws PatchTrackerException + { + + JiraSession jiraSession = createSession( patchTrackerRequest ); + try + { + RemoteIssue remoteIssue = jiraSession.findRemoteIssue( patchTrackerRequest.getPatchId() ); + + if ( patchTrackerRequest.getPatchId() == null ) { - remoteIssue = new RemoteIssue(); - remoteIssue.setProject( extractProjectKey( patchTrackerRequest.getUrl() ) ); - remoteIssue.setSummary( patchTrackerRequest.getSummary() ); - remoteIssue.setDescription( patchTrackerRequest.getDescription() ); - remoteIssue.setType( patchTrackerRequest.getPatchType() ); - - remoteIssue = jiraSession.createIssue( remoteIssue ); - - // TODO handle of boolean result - jiraSession.addBase64EncodedAttachmentsToIssue( remoteIssue.getKey(), remoteIssue.getKey(), - patchTrackerRequest.getPatchContent() ); + throw new PatchTrackerException( "patch id is mandatory when updating the patch tracker" ); } - PatchTrackerResult patchTrackerResult = new PatchTrackerResult(); - patchTrackerResult.setPatchId( remoteIssue.getKey() ); - patchTrackerResult.setPatchUrl( + // TODO handle of boolean result + jiraSession.addBase64EncodedAttachmentsToIssue( remoteIssue.getKey(), remoteIssue.getKey(), + patchTrackerRequest.getPatchContent() ); + + jiraSession.addCommentToIssue( remoteIssue.getKey(), patchTrackerRequest.getDescription() ); + + return new PatchTrackerResult().setPatchId( remoteIssue.getKey() ).setPatchUrl( extractBaseUrl( patchTrackerRequest.getUrl() ) + "/browse/" + remoteIssue.getKey() ); - return patchTrackerResult; + } catch ( RemoteAuthenticationException e ) { @@ -88,7 +116,6 @@ public class JiraPatchTracker } } - public JiraSession createSession( PatchTrackerRequest patchTrackerRequest ) throws PatchTrackerException { Modified: maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraSession.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraSession.java?rev=1204521&r1=1204520&r2=1204521&view=diff ============================================================================== --- maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraSession.java (original) +++ maven/sandbox/trunk/plugins/maven-patch-tracker-plugin/src/main/java/org/apache/maven/plugins/patchtracker/tracking/jira/JiraSession.java Mon Nov 21 14:40:54 2011 @@ -21,6 +21,7 @@ package org.apache.maven.plugins.patchtr import org.apache.axis.encoding.Base64; import org.apache.maven.plugins.patchtracker.tracking.jira.soap.JiraSoapService; import org.apache.maven.plugins.patchtracker.tracking.jira.soap.RemoteAuthenticationException; +import org.apache.maven.plugins.patchtracker.tracking.jira.soap.RemoteComment; import org.apache.maven.plugins.patchtracker.tracking.jira.soap.RemoteException; import org.apache.maven.plugins.patchtracker.tracking.jira.soap.RemoteIssue; import org.apache.maven.plugins.patchtracker.tracking.jira.soap.RemotePermissionException; @@ -62,4 +63,20 @@ public class JiraSession return service.addBase64EncodedAttachmentsToIssue( token, issueKey, new String[]{ fileName }, new String[]{ Base64.encode( attachmentContent.getBytes() ) } ); } + + public RemoteIssue findRemoteIssue( String issueKey ) + throws RemotePermissionException, RemoteValidationException, RemoteAuthenticationException, RemoteException, + java.rmi.RemoteException + { + return service.getIssue( token, issueKey ); + } + + public void addCommentToIssue( String issueKey, String comment ) + throws RemotePermissionException, RemoteValidationException, RemoteAuthenticationException, RemoteException, + java.rmi.RemoteException + { + RemoteComment remoteComment = new RemoteComment(); + remoteComment.setBody( comment ); + service.addComment( token, issueKey, remoteComment ); + } }