svn commit: r13279 - trunk/src_new/org/argouml/persistence

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: tfmorris
Date: 2007-08-09 12:38:48-0700
New Revision: 13279

Modified:
   trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java
   trunk/src_new/org/argouml/persistence/MemberFilePersister.java
   trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java
   trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java

Log:
Add methods to load from URL in addition to InputStream

Modified: trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java?view=diff&rev=13279&p1=trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java&p2=trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java&r1=13278&r2=13279
==============================================================================
--- trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java	(original)
+++ trunk/src_new/org/argouml/persistence/DiagramMemberFilePersister.java	2007-08-09 12:38:48-0700
@@ -31,6 +31,7 @@
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.net.URL;
 
 import org.argouml.kernel.Project;
 import org.argouml.kernel.ProjectMember;
@@ -72,7 +73,15 @@
             throw new OpenException(e);
         }
     }
-
+    
+    @Override
+    public void load(Project project, URL url) throws OpenException {   
+        try {
+            load(project, url.openStream());
+        } catch (IOException e) {
+            throw new OpenException(e);
+        }
+    }
 
     @Override
     public String getMainTag() {
@@ -140,4 +149,6 @@
         }
         
     }
+
+
 }

Modified: trunk/src_new/org/argouml/persistence/MemberFilePersister.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/MemberFilePersister.java?view=diff&rev=13279&p1=trunk/src_new/org/argouml/persistence/MemberFilePersister.java&p2=trunk/src_new/org/argouml/persistence/MemberFilePersister.java&r1=13278&r2=13279
==============================================================================
--- trunk/src_new/org/argouml/persistence/MemberFilePersister.java	(original)
+++ trunk/src_new/org/argouml/persistence/MemberFilePersister.java	2007-08-09 12:38:48-0700
@@ -34,6 +34,7 @@
 import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.net.URL;
 
 import org.argouml.application.api.Argo;
 import org.argouml.kernel.Project;
@@ -45,8 +46,7 @@
  */
 abstract class MemberFilePersister {
     /**
-     * Load the member based on instance variables
-     * which should have been setup in the constructor.
+     * Load a project member from an InputStream.
      *
      * @param project the project to persist
      * @param inputStream the inputStream to parse to load the member.
@@ -56,6 +56,16 @@
         throws OpenException;
 
     /**
+     * Load a project member from an InputStream.
+     *
+     * @param project the project to persist
+     * @param inputStream the inputStream to parse to load the member.
+     * @throws OpenException on any parsing errors.
+     */
+    public abstract void load(Project project, URL url)
+        throws OpenException;
+    
+    /**
      * Gets the tag name which is the root tag for this member.
      * @return tag name.
      */

Modified: trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java?view=diff&rev=13279&p1=trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java&p2=trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java&r1=13278&r2=13279
==============================================================================
--- trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java	(original)
+++ trunk/src_new/org/argouml/persistence/ModelMemberFilePersister.java	2007-08-09 12:38:48-0700
@@ -33,9 +33,11 @@
 import java.io.Writer;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.List;
 
 import org.apache.log4j.Logger;
 import org.argouml.application.api.Argo;
@@ -73,7 +75,23 @@
         Logger.getLogger(ModelMemberFilePersister.class);
 
     /**
-     * Loads a model (XMI only) from an input source. BE ADVISED this
+     * Loads a model (XMI only) from a URL. BE ADVISED this
+     * method has a side effect. It sets _UUIDREFS to the model.<p>
+     *
+     * If there is a problem with the xmi file, an error is set in the
+     * getLastLoadStatus() field. This needs to be examined by the
+     * calling function.<p>
+     *
+     * @see org.argouml.persistence.MemberFilePersister#load(org.argouml.kernel.Project,
+     * java.io.InputStream)
+     */
+    public void load(Project project, URL url)
+            throws OpenException {
+        load(project, new InputSource(url.toExternalForm()));
+    }
+    
+    /**
+     * Loads a model (XMI only) from an input stream. BE ADVISED this
      * method has a side effect. It sets _UUIDREFS to the model.<p>
      *
      * If there is a problem with the xmi file, an error is set in the
@@ -84,9 +102,14 @@
      * java.io.InputStream)
      */
     public void load(Project project, InputStream inputStream)
+            throws OpenException {
+        load(project, new InputSource(inputStream));
+    }
+
+
+    private void load(Project project, InputSource source)
         throws OpenException {
 
-        InputSource source = new InputSource(inputStream);
         Object mmodel = null;
 
         // 2002-07-18
@@ -283,8 +306,10 @@
 
     /**
      * Read a XMI file from the given inputsource.
+     * 
      * @param p Project to which load the inputsource.
-     * @param source The InputSource
+     * @param source The InputSource. The systemId of the input source should be
+     *                set so that it can be used to resolve external references.
      * @throws OpenException If an error occur while reading the source
      */
     public synchronized void readModels(InputSource source)
@@ -299,6 +324,19 @@
             } else {
                 reader.setIgnoredElements(null);
             }
+
+            List<String> searchPath = reader.getSearchPath();
+            String pathList = 
+                System.getProperty("org.argouml.model.modules_search_path");
+            if (pathList != null) {
+                String[] paths = pathList.split(",");
+                for (String path : paths) {
+                    if (!searchPath.contains(path)) {
+                        reader.addSearchPath(path);
+                    }
+                }
+            }
+            reader.addSearchPath(source.getSystemId());
             
             curModel = null;
             elementsRead = reader.parse(source, false);

Modified: trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java?view=diff&rev=13279&p1=trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java&p2=trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java&r1=13278&r2=13279
==============================================================================
--- trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java	(original)
+++ trunk/src_new/org/argouml/persistence/TodoListMemberFilePersister.java	2007-08-09 12:38:48-0700
@@ -33,6 +33,7 @@
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.io.Writer;
+import java.net.URL;
 
 import org.apache.log4j.Logger;
 import org.argouml.application.api.Argo;
@@ -74,6 +75,15 @@
             throw new OpenException(e);
         }
     }
+    
+    @Override
+    public void load(Project project, URL url) throws OpenException {   
+        try {
+            load(project, url.openStream());
+        } catch (IOException e) {
+            throw new OpenException(e);
+        }
+    }
 
     /*
      * @see org.argouml.persistence.MemberFilePersister#getMainTag()
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.