Bug 530354 - [Revision] add hierarchy of review when a modification is
done
Change-Id: I4fb1bde3aa00cd16d3a8a662642df5cf59baa962
diff --git a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/core/ReviewResourceManager.java b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/core/ReviewResourceManager.java
index 60c1f26..deeb299 100755
--- a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/core/ReviewResourceManager.java
+++ b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/core/ReviewResourceManager.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2014, 2017 CEA LIST.
+ * Copyright (c) 2014, 2017-2018 CEA LIST.
*
*
* All rights reserved. This program and the accompanying materials
@@ -15,11 +15,15 @@
import java.io.IOException;
import java.text.DateFormat;
+import java.util.ArrayList;
import java.util.Date;
+import java.util.EventObject;
+import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.emf.common.command.CommandStackListener;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.CompareFactory;
import org.eclipse.emf.compare.Comparison;
@@ -65,6 +69,7 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.PatternFilter;
+import org.eclipse.ui.internal.wizards.NewWizardRegistry;
import org.eclipse.ui.model.BaseWorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.uml2.uml.Actor;
@@ -94,6 +99,7 @@
protected RefreshFigureListener refreshFigureListener=null;
protected Comparison diffModel=null;
protected boolean modeRevisionRunning=false;
+ private int commentSize;
/**
@@ -235,6 +241,54 @@
getDomain().getCommandStack().execute(cmd);
}
+
+ /**
+ * used to group a set of review under a new review from the index to the last
+ * @param element the container of the review
+ * @param index must be >0
+ */
+ private void groupReviews(final Element element, final int index){
+ getCurrentReviewModel();
+ final Actor theauthor=getCurrentAuthor();
+
+ RecordingCommand cmd= new RecordingCommand(getDomain(), "createAReview") {
+ @Override
+ protected void doExecute() {
+ ArrayList<Comment> subComments= new ArrayList<Comment>();
+
+ for (int i=index; i<reviewModel.getOwnedComments().size();i++) {
+ subComments.add(reviewModel.getOwnedComments().get(i));
+ }
+
+ Comment cmt= UMLFactory.eINSTANCE.createComment();
+ cmt.setBody("Your review");
+ if(element instanceof Comment ){
+ ((Comment)element).getOwnedComments().add(cmt);
+ }
+ else{ reviewModel.getOwnedComments().add(cmt);}
+
+ Stereotype review= cmt.getApplicableStereotype(I_ReviewStereotype.TODO_STEREOTYPE);
+ cmt.applyStereotype(review);
+ cmt.setValue(review, I_ReviewStereotype.COMMENT_SUBJECT_ATT, "subject");
+
+ for (Iterator iterator = subComments.iterator(); iterator.hasNext();) {
+ Comment comment = (Comment) iterator.next();
+ cmt.getOwnedComments().add(comment);
+
+ }
+ cmt.setBody(cmt.getOwnedComments().get(0).getBody());
+ Stereotype authorStereotype= theauthor.getApplicableStereotype(I_VersioningStereotype.AUTHOR_STEREOTYPE);
+ cmt.setValue(review, I_VersioningStereotype.VERSIONINGELEMENT_AUTHOR_ATT, theauthor.getStereotypeApplication(authorStereotype));
+
+ // add tthe date
+ Date today = new Date();
+ DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT);
+ cmt.setValue(review, I_VersioningStereotype.VERSIONINGELEMENT_DATE_ATT, shortDateFormat.format(today));
+ }
+ };
+ getDomain().getCommandStack().execute(cmd);
+
+ }
/**
*
@@ -511,6 +565,7 @@
*/
public void startModeRevision(){
modeRevisionRunning=true;
+
RecordingCommand cmd= new RecordingCommand(getDomain(), "savediff") {
@Override
protected void doExecute() {
@@ -527,6 +582,18 @@
};
getDomain().getCommandStack().execute(cmd);
getDomain().addResourceSetListener(addingDiffListener);
+ getDomain().getCommandStack().addCommandStackListener(new CommandStackListener() {
+
+ @Override
+ public void commandStackChanged(EventObject event) {
+ System.out.println("Command added "+commentSize);
+ int commentIndex=commentSize;
+
+ groupReviews(getCurrentReviewModel(), commentIndex);
+ commentSize = getCurrentReviewModel().getOwnedComments().size();
+ }
+ });
+ commentSize = getCurrentReviewModel().getOwnedComments().size();
}
/**
* stop the revision model and stop listening modifications
diff --git a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/handlers/AcceptReviewHandler.java b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/handlers/AcceptReviewHandler.java
index 29ebdd2..7d96a53 100755
--- a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/handlers/AcceptReviewHandler.java
+++ b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/handlers/AcceptReviewHandler.java
@@ -1,5 +1,5 @@
/*****************************************************************************
- * Copyright (c) 2014, 2017 CEA LIST.
+ * Copyright (c) 2014, 2017-2018 CEA LIST.
*
*
* All rights reserved. This program and the accompanying materials
@@ -14,6 +14,7 @@
package org.eclipse.papyrus.revision.tool.handlers;
import java.util.ArrayList;
+import java.util.Iterator;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
@@ -32,6 +33,7 @@
import org.eclipse.papyrus.revision.tool.ui.ReviewsEditor;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.uml2.uml.Comment;
import org.eclipse.uml2.uml.Element;
import org.eclipse.uml2.uml.Stereotype;
@@ -55,39 +57,60 @@
if( part instanceof ReviewsEditor){
if( elements.size()!=0){
- RecordingCommand cmd= new RecordingCommand(((ReviewsEditor)part).getReviewResourceManager().getDomain(), "Refuse currentReview") {
+ RecordingCommand cmd= new RecordingCommand(((ReviewsEditor)part).getReviewResourceManager().getDomain(), "Accept currentReview") {
@Override
protected void doExecute() {
+
for (Element element : elements) {
+ ArrayList<Comment> subCommentsToReview= new ArrayList<Comment>();
+ //collect all subcomments
+ for (Iterator<Comment> commentInerator = element.getOwnedComments().iterator(); commentInerator.hasNext();) {
+ Comment subComment = (Comment) commentInerator.next();
+ subCommentsToReview.add(subComment);
+ }
+ //manage subComments
+ for (Iterator<Comment> commentInerator = subCommentsToReview.iterator(); commentInerator.hasNext();) {
+ Element subComment = (Comment) commentInerator.next();
+ manageTodoReview(part, subComment);
- Stereotype reviewtoDo= element.getAppliedStereotype(I_ReviewStereotype.TODO_STEREOTYPE);
- if(reviewtoDo!=null ){
- String diffuriFragment=(String)element.getValue(reviewtoDo, I_ReviewStereotype.COMMENT_DIFFREF_ATT);
- if( diffuriFragment!=null){
+ }
- //load EObject
- EObject eOject=element.eResource().getEObject(diffuriFragment);
- if(eOject instanceof ReferenceChange ){
- ReferenceChange referenceChange= (ReferenceChange)eOject;
- //accept Remove
- if( referenceChange.getKind().equals(DifferenceKind.DELETE)){
- acceptDelete(part, element, referenceChange);
- }
- //accept ADD
- else if( referenceChange.getKind().equals(DifferenceKind.ADD)){
- removeDiffAndReview(part, element, referenceChange);
+ manageTodoReview(part, element);
+ }
+ }
- }
+ private void manageTodoReview(final IWorkbenchPart part, Element element) {
+ Stereotype reviewtoDo= element.getAppliedStereotype(I_ReviewStereotype.TODO_STEREOTYPE);
+ if(reviewtoDo!=null ){
+ String diffuriFragment=(String)element.getValue(reviewtoDo, I_ReviewStereotype.COMMENT_DIFFREF_ATT);
+ if( diffuriFragment!=null){
+
+ //load EObject
+ EObject eOject=element.eResource().getEObject(diffuriFragment);
+ if(eOject instanceof ReferenceChange ){
+ ReferenceChange referenceChange= (ReferenceChange)eOject;
+ //accept Remove
+ if( referenceChange.getKind().equals(DifferenceKind.DELETE)){
+ acceptDelete(part, element, referenceChange);
}
- //accept Set
- else if(eOject instanceof Match ){
- ReviewResourceManager r=((ReviewsEditor)part).getReviewResourceManager();
- removeMatchAndReview(eOject, r, element);
+ //accept ADD
+ else if( referenceChange.getKind().equals(DifferenceKind.ADD)){
+ removeDiffAndReview(part, element, referenceChange);
}
}
+ //accept Set
+ else if(eOject instanceof Match ){
+ ReviewResourceManager r=((ReviewsEditor)part).getReviewResourceManager();
+ removeMatchAndReview(eOject, r, element);
+
+ }
+ }
+ else {
+ ((Element)element.eContainer()).getOwnedComments().remove(element);
}
}
+
}
};
((ReviewsEditor)part).getReviewResourceManager().getDomain().getCommandStack().execute(cmd);
@@ -110,15 +133,17 @@
DestroyElementRequest destroyrequest= new DestroyElementRequest(false);
destroyrequest.setEditingDomain(r.getDomain());
destroyrequest.setElementToDestroy(eObjectToRemove);
- IElementEditService provider = ElementEditServiceUtils.getCommandProvider(eObjectToRemove);
- if(provider != null) {
- // Retrieve delete command from the Element Edit service
- ICommand deleteCommand = provider.getEditCommand(destroyrequest);
- if(deleteCommand != null) {
- try {
- deleteCommand.execute(new NullProgressMonitor(), null);
- } catch (Exception e) {
- System.err.println(e);
+ if( eObjectToRemove!=null) {
+ IElementEditService provider = ElementEditServiceUtils.getCommandProvider(eObjectToRemove);
+ if(provider != null) {
+ // Retrieve delete command from the Element Edit service
+ ICommand deleteCommand = provider.getEditCommand(destroyrequest);
+ if(deleteCommand != null) {
+ try {
+ deleteCommand.execute(new NullProgressMonitor(), null);
+ } catch (Exception e) {
+ System.err.println(e);
+ }
}
}
}
diff --git a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/ui/ReviewsEditor.java b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/ui/ReviewsEditor.java
index 25feb72..e670932 100755
--- a/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/ui/ReviewsEditor.java
+++ b/plugins/revision/org.eclipse.papyrus.revisiontool/src/org/eclipse/papyrus/revision/tool/ui/ReviewsEditor.java
@@ -122,11 +122,12 @@
protected void filterContextMenu(IMenuManager mgr) {
IContributionItem[] contributionItems=mgr.getItems();
for (int i = 0; i < contributionItems.length; i++) {
- if(!(contributionItems[i].getId().startsWith(ORG_ECLIPSE_PAPYRUS_REVISIONTOOL))){
- mgr.remove(contributionItems[i]);
+ if(contributionItems[i].getId()!=null) {
+ if(!(contributionItems[i].getId().startsWith(ORG_ECLIPSE_PAPYRUS_REVISIONTOOL))){
+ mgr.remove(contributionItems[i]);
+ }
}
}
-
}
/**
@@ -288,7 +289,7 @@
viewer.setInput(reviewResourceManager.getCurrentReviewModel());
reviewResourceManager.getDomain().addResourceSetListener(getResourceListener());
reviewResourceManager.stopModelRevision();
-
+
}
/**
* @return true if the mode revision is running.
@@ -328,7 +329,7 @@
return super.getAdapter(adapter);
}
}
-
+
@Override
public void setFocus() {