svn commit: r15405 - trunk/src/argouml-core-model-euml/src/org/argouml/model/euml

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: tfmorris
Date: 2008-07-29 10:34:18-0700
New Revision: 15405

Modified:
   trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java
   trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java
   trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java
   trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java

Log:
Issue 4994: Add basic support for read-only resources

Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java?view=diff&rev=15405&p1=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java&p2=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java&r1=15404&r2=15405
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/EUMLModelImplementation.java	2008-07-29 10:34:18-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007, The ArgoUML Project
+// Copyright (c) 2007,2008 Tom Morris and other contributors
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -43,6 +43,7 @@
 import java.io.OutputStream;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -55,6 +56,7 @@
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EcorePackage;
 import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
 import org.eclipse.emf.edit.domain.EditingDomain;
@@ -162,8 +164,19 @@
     /**
      * This keeps track of the editing domain that is used to track all changes
      * to the model.
+     * <p>
+     * TODO: This probably needs to be a set of EditingDomain so that we can
+     * manage an EditingDomain per project.
      */
     private AdapterFactoryEditingDomain editingDomain;
+    
+    /**
+     * Map of which resources are read-only.
+     * <p>
+     * TODO: This needs to be managed per EditingDomain.
+     */
+    private Map<Resource,Boolean> readOnlyMap = 
+        new HashMap<Resource, Boolean>();
 
     /**
      * Constructor.
@@ -175,6 +188,9 @@
 
     /**
      * This sets up the editing domain for the model editor.
+     * 
+     * TODO: We probably need an EditingDomain per Argo project so that we can 
+     * keep the ResourceSets separate.
      */
     private void initializeEditingDomain() {
         // If the eUML.resources system property is defined then we are in a
@@ -205,7 +221,7 @@
         // to our consumer (e.g. ArgoUML) if a new undo mechanism is implemented
         // for the Model subsystem - tfm
         editingDomain = new UML2AdapterFactoryEditingDomain(
-                adapterFactory, commandStack);
+                adapterFactory, commandStack, readOnlyMap);
 
         ResourceSet resourceSet = editingDomain.getResourceSet();
         Map<String, Object> extensionToFactoryMap = 
@@ -263,6 +279,13 @@
     public EditingDomain getEditingDomain() {
         return editingDomain;
     }
+    
+    /**
+     * @return the read only map for resources in the EditingDomain
+     */
+    public Map<Resource, Boolean> getReadOnlyMap() {
+        return readOnlyMap;
+    }
 
     public ActivityGraphsFactoryEUMLlImpl getActivityGraphsFactory() {
         if (theActivityGraphsFactory == null) {
@@ -520,4 +543,14 @@
         return theCommandStack;
     }
 
+    /**
+     * Unload all resources in the editing domain and clear the read only map.
+     */
+    void clearEditingDomain() {
+        for (Resource resource : editingDomain.getResourceSet().getResources()) {
+            resource.unload();
+        }
+        readOnlyMap.clear();
+    }
+    
 }

Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java?view=diff&rev=15405&p1=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java&p2=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java&r1=15404&r2=15405
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelManagementFactoryEUMLImpl.java	2008-07-29 10:34:18-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007, The ArgoUML Project
+// Copyright (c) 2007,2008 Tom Morris and other contributors
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -150,7 +150,8 @@
 	}
         theRootModel = (org.eclipse.uml2.uml.Package) rootModel;
 	if (rootModel != null) {
-            Resource r = UMLUtil.getResource(modelImpl, UMLUtil.DEFAULT_URI);
+            Resource r = UMLUtil.getResource(modelImpl, UMLUtil.DEFAULT_URI, 
+                    Boolean.FALSE);
             r.getContents().add(theRootModel);
 	}
         modelImpl.getModelEventPump().setRootContainer(theRootModel);

Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java?view=diff&rev=15405&p1=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java&p2=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java&r1=15404&r2=15405
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UMLUtil.java	2008-07-29 10:34:18-0700
@@ -1,5 +1,5 @@
 // $Id: UMLUtil.java 13394 2007-08-18 12:48:34Z b00__1 $

-// Copyright (c) 2007, The ArgoUML Project

+// Copyright (c) 2007,2008 Bogdan Pistol and other contributors

 // All rights reserved.

 //

 // Redistribution and use in source and binary forms, with or without

@@ -174,15 +174,18 @@
      *                the URI which identifies the resource

      * @return the retrieved or created resource

      */

-    public static Resource getResource(

-            EUMLModelImplementation modelImplementation, URI uri) {

-        Resource r = modelImplementation.getEditingDomain().getResourceSet().getResource(

-                uri, false);

+    static Resource getResource(

+            EUMLModelImplementation modelImplementation, URI uri,

+            boolean readOnly) {

+        Resource r = modelImplementation.getEditingDomain().getResourceSet()

+                .getResource(uri, false);

         if (r == null) {

-            r = modelImplementation.getEditingDomain().getResourceSet().createResource(

-                    uri);

+            r = modelImplementation.getEditingDomain().getResourceSet()

+                    .createResource(uri);

         }

+        modelImplementation.getReadOnlyMap().put(r, Boolean.valueOf(readOnly));

         return r;

     }

 

+

 }


Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java?view=diff&rev=15405&p1=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java&p2=trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java&r1=15404&r2=15405
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/XmiReaderEUMLImpl.java	2008-07-29 10:34:18-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007, The ArgoUML Project
+// Copyright (c) 2007,2008 Tom Morris and other contributors
 // All rights reserved.
 // 
 // Redistribution and use in source and binary forms, with or without
@@ -98,7 +98,7 @@
         return parse(inputSource, false);
     }
 
-    public Collection parse(InputSource inputSource, boolean profile)
+    public Collection parse(InputSource inputSource, boolean readOnly)
             throws UmlException {
         if (inputSource == null) {
             throw new NullPointerException(
@@ -129,12 +129,13 @@
             throw new UnsupportedOperationException();
         }
 
-        EditingDomain editingDomain = modelImpl.getEditingDomain();
-        for (Resource resource : editingDomain.getResourceSet().getResources()) {
-            resource.unload();
-        }
+
+        // TODO: This won't work if the user loads a profile and then 
+        // a user model or multiple user models. - tfm
+        modelImpl.clearEditingDomain();
         
-        Resource r = UMLUtil.getResource(modelImpl, UMLUtil.DEFAULT_URI);
+        Resource r = UMLUtil.getResource(modelImpl, UMLUtil.DEFAULT_URI,
+                readOnly);
         try {
             modelImpl.getModelEventPump().stopPumpingEvents();
             r.load(is, null);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.