Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortfaure2013-12-18 08:21:35 +0000
committertfaure2013-12-18 08:21:35 +0000
commit0ba68f6e66f2b17112e42b015c27fd8ae1601777 (patch)
tree40aaf7f72d3883832aa0e4a5d4f5d0af0787c7d6
parentc4f66e4724e5a63e9190c9626203a9828b8e3077 (diff)
downloadorg.eclipse.papyrus-0ba68f6e66f2b17112e42b015c27fd8ae1601777.tar.gz
org.eclipse.papyrus-0ba68f6e66f2b17112e42b015c27fd8ae1601777.tar.xz
org.eclipse.papyrus-0ba68f6e66f2b17112e42b015c27fd8ae1601777.zip
ASSIGNED - bug 424218: Performance issue with multiple diagrams
https://bugs.eclipse.org/bugs/show_bug.cgi?id=424218 Signed-off-by: tfaure <tristan.faure@atos.net>
-rw-r--r--plugins/core/org.eclipse.papyrus.core.adaptor.gmf/src/org/eclipse/papyrus/core/adaptor/gmf/GmfMultiDiagramDocumentProvider.java113
1 files changed, 71 insertions, 42 deletions
diff --git a/plugins/core/org.eclipse.papyrus.core.adaptor.gmf/src/org/eclipse/papyrus/core/adaptor/gmf/GmfMultiDiagramDocumentProvider.java b/plugins/core/org.eclipse.papyrus.core.adaptor.gmf/src/org/eclipse/papyrus/core/adaptor/gmf/GmfMultiDiagramDocumentProvider.java
index 6af275307f6..9e7da9ebf6b 100644
--- a/plugins/core/org.eclipse.papyrus.core.adaptor.gmf/src/org/eclipse/papyrus/core/adaptor/gmf/GmfMultiDiagramDocumentProvider.java
+++ b/plugins/core/org.eclipse.papyrus.core.adaptor.gmf/src/org/eclipse/papyrus/core/adaptor/gmf/GmfMultiDiagramDocumentProvider.java
@@ -836,15 +836,25 @@ public class GmfMultiDiagramDocumentProvider extends AbstractDocumentProvider im
private ResourceSetModificationListener myResourceSetListener;
/**
- * @generated
+ * @generated not
*/
public ResourceSetInfo(IDiagramDocument document, IEditorInput editorInput) {
super(document);
myDocument = document;
myEditorInput = editorInput;
startResourceListening();
- myResourceSetListener = new ResourceSetModificationListener(this);
- getResourceSet().eAdapters().add(myResourceSetListener);
+
+ for (Adapter a : getResourceSet().eAdapters()){
+ if (a instanceof ResourceSetModificationListener){
+ myResourceSetListener = (ResourceSetModificationListener) a ;
+ break;
+ }
+ }
+ if (myResourceSetListener == null){
+ myResourceSetListener = new ResourceSetModificationListener();
+ getResourceSet().eAdapters().add(myResourceSetListener);
+ }
+ myResourceSetListener.addResourceSet(this);
}
/**
@@ -883,18 +893,21 @@ public class GmfMultiDiagramDocumentProvider extends AbstractDocumentProvider im
}
/**
- * @generated
+ * @generated not
*/
public void dispose() {
stopResourceListening();
- getResourceSet().eAdapters().remove(myResourceSetListener);
- for(Iterator it = getResourceSet().getResources().iterator(); it.hasNext();) {
- Resource resource = (Resource)it.next();
- // Do not unload the resource because the DocumentProvider can be disposed while its
- // Diagram node is
- // kept for future re-openeing.
- // resource.unload();
+ myResourceSetListener.removeResourceSet(this);
+ if(myResourceSetListener.isEmpty()){
+ getResourceSet().eAdapters().remove(myResourceSetListener);
}
+// for(Iterator it = getResourceSet().getResources().iterator(); it.hasNext();) {
+// Resource resource = (Resource)it.next();
+// // Do not unload the resource because the DocumentProvider can be disposed while its
+// // Diagram node is
+// // kept for future re-openeing.
+// // resource.unload();
+// }
}
/**
@@ -1054,7 +1067,7 @@ public class GmfMultiDiagramDocumentProvider extends AbstractDocumentProvider im
}
/**
- * @generated
+ * @generated not
*/
private class ResourceSetModificationListener extends EContentAdapter {
@@ -1064,22 +1077,35 @@ public class GmfMultiDiagramDocumentProvider extends AbstractDocumentProvider im
private NotificationFilter myModifiedFilter;
/**
- * @generated
+ * @generated not
*/
- private ResourceSetInfo myInfo;
+ private List<ResourceSetInfo> myInfos;
/**
- * @generated
+ * @generated not
*/
- public ResourceSetModificationListener(ResourceSetInfo info) {
- myInfo = info;
+ public ResourceSetModificationListener() {
+ myInfos = new ArrayList<GmfMultiDiagramDocumentProvider.ResourceSetInfo>();
myModifiedFilter = NotificationFilter.createEventTypeFilter(Notification.SET).or(
NotificationFilter.createEventTypeFilter(Notification.UNSET)).and(
NotificationFilter.createFeatureFilter(Resource.class, Resource.RESOURCE__IS_MODIFIED));
}
- /**
- * @generated
+ public void addResourceSet(ResourceSetInfo info) {
+ myInfos.add(info);
+ }
+
+ public boolean removeResourceSet(ResourceSetInfo info){
+ return myInfos.remove(info);
+ }
+
+ public boolean isEmpty(){
+ return myInfos.isEmpty();
+ }
+
+
+ /**
+ * @generated not
*/
public void notifyChanged(Notification notification) {
if(notification.getNotifier() instanceof ResourceSet) {
@@ -1089,29 +1115,32 @@ public class GmfMultiDiagramDocumentProvider extends AbstractDocumentProvider im
if(notification.getNotifier() instanceof Resource) {
Resource resource = (Resource)notification.getNotifier();
if(resource.isLoaded()) {
- boolean modified = false;
- for(Iterator it = myInfo.getResourceSet().getResources().iterator(); it.hasNext() && !modified;) {
- Resource nextResource = (Resource)it.next();
- if(nextResource.isLoaded()) {
- modified = nextResource.isModified();
- }
- }
- boolean dirtyStateChanged = false;
- synchronized(myInfo) {
- if(modified != myInfo.fCanBeSaved) {
- myInfo.fCanBeSaved = modified;
- dirtyStateChanged = true;
- }
- if(!resource.isModified()) {
- myInfo.setSynchronized(resource);
- }
- }
- if(dirtyStateChanged) {
- fireElementDirtyStateChanged(myInfo.getEditorInput(), modified);
-
- if(!modified) {
- myInfo.setModificationStamp(computeModificationStamp(myInfo));
- }
+ boolean modified = false;
+ for(Iterator it = resource.getResourceSet().getResources().iterator(); it.hasNext() && !modified;) {
+ Resource nextResource = (Resource)it.next();
+ if(nextResource.isLoaded()) {
+ modified = nextResource.isModified();
+ }
+ }
+ for(ResourceSetInfo myInfo : myInfos){
+ boolean dirtyStateChanged = false;
+ synchronized(myInfo) {
+ if(modified != myInfo.fCanBeSaved) {
+ myInfo.fCanBeSaved = modified;
+ dirtyStateChanged = true;
+ }
+ if(!resource.isModified()) {
+ myInfo.setSynchronized(resource);
+ }
+ }
+ if(dirtyStateChanged) {
+ fireElementDirtyStateChanged(myInfo.getEditorInput(), modified);
+
+ if(!modified) {
+ myInfo.setModificationStamp(computeModificationStamp(myInfo));
+ }
+ }
+
}
}
}

Back to the top