svn commit: r14716 - trunk/src/argouml-app: src/org/argouml/persistence src/org/argouml/profile/internal tests/org/argouml/kernel tests/org/argouml/profile

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: euluis
Date: 2008-05-12 16:48:51-0700
New Revision: 14716

Modified:
   trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java   (contents, props changed)
   trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java
   trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java
   trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java

Log:
issue 5040: adding a check to raise an exception when a module profile of which a ArgoUML to be loaded depends, isn't found in the installed ArgoUML

Modified: trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java?view=diff&rev=14716&p1=trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java&p2=trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java&r1=14715&r2=14716
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/persistence/ProfileConfigurationFilePersister.java	2008-05-12 16:48:51-0700
@@ -1,317 +1,337 @@
-// $Id: ProfileConfigurationFilePersister.java 13298 2007-08-12 19:40:57Z maurelio1234 $

-// Copyright (c) 2007 The Regents of the University of California. All

-// Rights Reserved. Permission to use, copy, modify, and distribute this

-// software and its documentation without fee, and without a written

-// agreement is hereby granted, provided that the above copyright notice

-// and this paragraph appear in all copies. This software program and

-// documentation are copyrighted by The Regents of the University of

-// California. The software program and documentation are supplied "AS

-// IS", without any accompanying services from The Regents. The Regents

-// does not warrant that the operation of the program will be

-// uninterrupted or error-free. The end-user understands that the program

-// was developed for research purposes and is advised not to rely

-// exclusively on the program for any reason. IN NO EVENT SHALL THE

-// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,

-// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,

-// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF

-// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF

-// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY

-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF

-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE

-// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF

-// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,

-// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

-

-package org.argouml.persistence;

-

-import java.io.BufferedReader;

-import java.io.File;

-import java.io.FileWriter;

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.InputStreamReader;

-import java.io.OutputStream;

-import java.io.PrintWriter;

-import java.io.StringWriter;

-import java.io.Writer;

-import java.net.URL;

-import java.util.ArrayList;

-import java.util.Collection;

-import java.util.Iterator;

-import java.util.List;

-

-import org.apache.log4j.Logger;

-import org.argouml.application.helpers.ApplicationVersion;

-import org.argouml.configuration.Configuration;

-import org.argouml.kernel.ProfileConfiguration;

-import org.argouml.kernel.Project;

-import org.argouml.kernel.ProjectMember;

-import org.argouml.model.Model;

-import org.argouml.model.UmlException;

-import org.argouml.model.XmiWriter;

-import org.argouml.profile.Profile;

-import org.argouml.profile.ProfileFacade;

-import org.argouml.profile.ProfileManager;

-import org.argouml.profile.UserDefinedProfile;

-

-/**

- * Persister for Project's Profile Configuration

- *

- * @author maurelio1234

- */

-public class ProfileConfigurationFilePersister extends MemberFilePersister {

-    

-    private static final Logger LOG = 

-        Logger.getLogger(ProfileConfigurationFilePersister.class);

-

-    /*

-     * @see org.argouml.persistence.MemberFilePersister#getMainTag()

-     */

-    public String getMainTag() {

-        return "profile";

-    }

-

-    /*

-     * @see org.argouml.persistence.MemberFilePersister#load(org.argouml.kernel.Project, java.io.InputStream)

-     */

-    public void load(Project project, InputStream inputStream)

-        throws OpenException {

-        try {

-            BufferedReader br = new BufferedReader(new InputStreamReader(

-                    inputStream));

-

-            String line = null;

-            while (true) {

-                line = br.readLine();

-                if (line.trim().equals("<profile>")) {

-                    break;

-                }

-            }

-            Collection<Profile> profiles = new ArrayList<Profile>();

-            while (true) {

-                line = br.readLine().trim();

-                if (line.equals("</profile>")) {

-                    break;

-                }

-                

-                Profile profile = null;

-

-                if (line.equals("<userDefined>")) {

-                    line = br.readLine().trim();

-                    String fileName = line.substring(line.indexOf(">") + 1,

-                            line.indexOf("</")).trim();

-

-                    // consumes the <model> tag

-                    br.readLine();

-

-                    StringBuffer xmi = new StringBuffer();

-                    

-                    while (true) {

-                        line = br.readLine();

-                        if (line == null || line.contains("</model>")) {

-                            break;

-                        }

-                        xmi.append(line + "\n");

-                    }

-                    ProfileManager profileManager = ProfileFacade.getManager();

-                    profile = getMatchingUserDefinedProfile(fileName, 

-                        profileManager);

-                    if (profile == null) {

-                        throw new XmiReferenceException("Profile: " + fileName,

-                                null);

-                        // Use xmi as a fall back alternative when the

-                        // file for the user defined profile isn't found by the

-                        // profile manager.

-//                        profile = new UserDefinedProfile(fileName,

-//                                new StringReader(xmi.toString()));

-//                        profile = createUserProfileDefinition(fileName, xmi,

-//                                profileManager);

-

-                    }

-                    

-                    // consumes the </userDefined>

-                    line = br.readLine().trim();		    

-                } else if (line.equals("<plugin>")) {

-                    String className = br.readLine().trim();

-                    profile = ProfileFacade.getManager().getProfileForClass(

-                            className);

-                    line = br.readLine().trim();

-                }

-

-                if (profile != null) {

-                    profiles.add(profile);

-                }

-            }

-            ProfileConfiguration pc = new ProfileConfiguration(project, 

-                    profiles);

-            project.setProfileConfiguration(pc);

-        } catch (Exception e) {

-            if (e instanceof OpenException) {

-                throw (OpenException) e;

-            }

-            throw new OpenException(e);

-        }

-    }

-

-    /**

-     * Create a user defined profile from the current project using the backup

-     * XMI file from the current project.  Currently unused.

-     * <p>

-     * <em>NOTE:</em> This has the side effect of permanently registering the

-     * profile which may not be what the user wants.

-     * 

-     * @param fileName name of original XMI file that the author of the project

-     *                used when creating the UserDefinedProfile.

-     * @param contents the contents of the XMI file.

-     * @return the new profile

-     * @throws IOException on any i/o error

-     */

-    private Profile createUserProfileDefinition(String fileName,

-            StringBuffer contents, ProfileManager profileManager)

-        throws IOException {

-

-

-        Profile profile;

-        File profilesDirectory = getProfilesDirectory(profileManager);

-        File profileFile = new File(profilesDirectory, fileName);

-        FileWriter writer = new FileWriter(profileFile);

-        writer.write(contents.toString());

-        writer.close();

-        LOG.info("Wrote user defined profile \"" + profileFile

-                + "\", with size " + contents.length() + ".");

-        if (isSomeProfileDirectoryConfigured(profileManager))

-            profileManager.refreshRegisteredProfiles();

-        else

-            profileManager.addSearchPathDirectory(profilesDirectory

-                    .getAbsolutePath());

-        profile = getMatchingUserDefinedProfile(fileName, profileManager);

-        assert profile != null : "Profile should be found now.";

-        return profile;

-    }

-

-    private Profile getMatchingUserDefinedProfile(String fileName, 

-            ProfileManager profileManager) {

-        for (Profile candidateProfile 

-            : profileManager.getRegisteredProfiles()) {

-            if (candidateProfile instanceof UserDefinedProfile) {

-                UserDefinedProfile userProfile = 

-                    (UserDefinedProfile) candidateProfile;

-                if (userProfile.getDisplayName().equals(fileName)) {

-                    return userProfile;

-                }

-            }

-        }

-        return null;

-    }

-

-    private File getProfilesDirectory(ProfileManager profileManager) {

-        if (isSomeProfileDirectoryConfigured(profileManager)) {

-            List<String> directories = 

-                profileManager.getSearchPathDirectories();

-            return new File(directories.get(0));

-        } else {

-            File userSettingsFile = new File(

-                Configuration.getFactory().getConfigurationHandler().

-                    getDefaultPath());

-            return userSettingsFile.getParentFile();

-        }

-    }

-

-    private boolean isSomeProfileDirectoryConfigured(

-            ProfileManager profileManager) {

-        return profileManager.getSearchPathDirectories().size() > 0;

-    }

-

-    /*

-     * @see org.argouml.persistence.MemberFilePersister#save(org.argouml.kernel.ProjectMember, java.io.Writer, boolean)

-     */

-    @Override

-    @Deprecated

-    @SuppressWarnings("deprecation")

-    public void save(ProjectMember member, Writer writer, boolean xmlFragment)

-        throws SaveException {

-        PrintWriter w = new PrintWriter(writer);

-        saveProjectMember(member, w);

-    }

-

-    /*

-     * @see org.argouml.persistence.MemberFilePersister#save(org.argouml.kernel.ProjectMember, java.io.OutputStream)

-     */

-    public void save(ProjectMember member, OutputStream stream)

-	throws SaveException {

-	

-        PrintWriter w = new PrintWriter(stream);

-	saveProjectMember(member, w);

-        w.flush();

-    }

-

-    private void saveProjectMember(ProjectMember member, PrintWriter w)

-	throws SaveException {

-	

-        try {

-	    if (member instanceof ProfileConfiguration) {

-		ProfileConfiguration pc = (ProfileConfiguration) member;

-

-		w.println("<?xml version = \"1.0\" encoding = \"UTF-8\" ?>");

-		w.println("<!DOCTYPE profile SYSTEM \"profile.dtd\" >");

-		w.println("<profile>");

-

-		Iterator it = pc.getProfiles().iterator();

-		while (it.hasNext()) {

-                    Profile profile = (Profile) it.next();

-

-                    if (profile instanceof UserDefinedProfile) {

-                        UserDefinedProfile uprofile = 

-                            (UserDefinedProfile) profile;

-                        w.println("\t\t<userDefined>");

-                        w.println("\t\t\t<filename>"

-                                + uprofile.getModelFile().getName()

-                                + "</filename>");

-                        w.println("\t\t\t<model>");

-

-                        final Collection profilePackages = 

-                            uprofile.getProfilePackages();

-                        final Object model = profilePackages.iterator().next();

-                        printModelXMI(w, model);

-

-                        w.println("\t\t\t</model>");

-                        w.println("\t\t</userDefined>");

-                    } else {

-                        w.println("\t\t<plugin>");

-                        w.println("\t\t\t" + profile.getClass().getName());

-                        w.println("\t\t</plugin>");

-                    }

-                }

-

-		w.println("</profile>");

-	    }

-	} catch (Exception e) {

-	    e.printStackTrace();

-	    throw new SaveException(e);

-	}

-    }

-

-    private void printModelXMI(PrintWriter w, Object model) 

-        throws UmlException {

-        

-        StringWriter myWriter = new StringWriter();

-        XmiWriter xmiWriter = Model.getXmiWriter(model, myWriter,

-                ApplicationVersion.getVersion() + "("

-                        + UmlFilePersister.PERSISTENCE_VERSION + ")");

-        xmiWriter.write();

-

-        myWriter.flush();

-        w.println("" + myWriter.toString());

-    }

-

-

-    @Override

-    public void load(Project project, URL url) throws OpenException {

-        try {

-            load(project, url.openStream());

-        } catch (IOException e) {

-            throw new OpenException(e);

-        }

-    }

-

-}

+// $Id$
+// Copyright (c) 2007-2008 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.persistence;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.argouml.application.helpers.ApplicationVersion;
+import org.argouml.configuration.Configuration;
+import org.argouml.kernel.ProfileConfiguration;
+import org.argouml.kernel.Project;
+import org.argouml.kernel.ProjectMember;
+import org.argouml.model.Model;
+import org.argouml.model.UmlException;
+import org.argouml.model.XmiWriter;
+import org.argouml.profile.Profile;
+import org.argouml.profile.ProfileFacade;
+import org.argouml.profile.ProfileManager;
+import org.argouml.profile.UserDefinedProfile;
+
+/**
+ * Persister for project's profile configuration.
+ *
+ * @author maurelio1234
+ */
+public class ProfileConfigurationFilePersister extends MemberFilePersister {
+    
+    private static final Logger LOG = 
+        Logger.getLogger(ProfileConfigurationFilePersister.class);
+
+    /*
+     * @see org.argouml.persistence.MemberFilePersister#getMainTag()
+     */
+    public String getMainTag() {
+        return "profile";
+    }
+
+    /*
+     * @see org.argouml.persistence.MemberFilePersister#load(org.argouml.kernel.Project, java.io.InputStream)
+     */
+    public void load(Project project, InputStream inputStream)
+        throws OpenException {
+        try {
+            BufferedReader br = new BufferedReader(new InputStreamReader(
+                    inputStream));
+
+            String line = null;
+            while (true) {
+                line = br.readLine();
+                if (line.trim().equals("<profile>")) {
+                    break;
+                }
+            }
+            Collection<Profile> profiles = new ArrayList<Profile>();
+            while (true) {
+                line = br.readLine().trim();
+                if (line.equals("</profile>")) {
+                    break;
+                }
+                
+                Profile profile = null;
+
+                if (line.equals("<userDefined>")) {
+                    profile = handleUserDefinedProfile(br);
+                    // consumes the </userDefined>
+                    br.readLine();
+                } else if (line.equals("<plugin>")) {
+                    profile = handlePluginProfile(br);
+                    // consumes closing tag
+                    br.readLine();
+                }
+
+                if (profile != null) {
+                    profiles.add(profile);
+                }
+            }
+            ProfileConfiguration pc = new ProfileConfiguration(project, 
+                    profiles);
+            project.setProfileConfiguration(pc);
+        } catch (Exception e) {
+            if (e instanceof OpenException) {
+                throw (OpenException) e;
+            }
+            throw new OpenException(e);
+        }
+    }
+
+    private Profile handlePluginProfile(BufferedReader br) throws IOException,
+        XmiReferenceException {
+        Profile profile;
+        String className = br.readLine().trim();
+        profile = ProfileFacade.getManager().getProfileForClass(
+                className);
+        if (profile == null) 
+            throw new XmiReferenceException(
+                "Plugin profile \"" + className 
+                + "\" is not available in installation.", null);
+        return profile;
+    }
+
+    private Profile handleUserDefinedProfile(BufferedReader br)
+        throws IOException, XmiReferenceException {
+        String line;
+        Profile profile;
+        line = br.readLine().trim();
+        String fileName = line.substring(line.indexOf(">") + 1,
+                line.indexOf("</")).trim();
+
+        // consumes the <model> tag
+        br.readLine();
+
+        StringBuffer xmi = new StringBuffer();
+        
+        while (true) {
+            line = br.readLine();
+            if (line == null || line.contains("</model>")) {
+                break;
+            }
+            xmi.append(line + "\n");
+        }
+        ProfileManager profileManager = ProfileFacade.getManager();
+        profile = getMatchingUserDefinedProfile(fileName, 
+            profileManager);
+        if (profile == null) {
+            throw new XmiReferenceException(
+                "User defined profile \"" + fileName 
+                + "\" isn't available in the current configuration.",
+                    null);
+            // Use XMI as a fall back alternative when the 
+            // file for the user defined profile isn't found by the 
+            // profile manager.
+            // TODO: work in progress, see issue 5039
+//                        addUserDefinedProfile(fileName, xmi, profileManager);
+//                        profile = getMatchingUserDefinedProfile(fileName, 
+//                            profileManager);
+//                        assert profile != null 
+//                            : "Profile should have been found now.";
+        }
+        return profile;
+    }
+
+    /**
+     * Register a user defined profile in the profileManager, using the backup 
+     * XMI file from the project being loaded.
+     * <p>
+     * <em>NOTE:</em> This has the side effect of permanently registering the
+     * profile which may not be what the user wants.
+     * 
+     * @param fileName name of original XMI file that the author of the project
+     *                used when creating the UserDefinedProfile.
+     * @param xmi the contents of the XMI file.
+     * @param profileManager the {@link ProfileManager}.
+     * @throws IOException on any i/o error
+     */
+    private void addUserDefinedProfile(String fileName, StringBuffer xmi,
+            ProfileManager profileManager) throws IOException {
+        File profilesDirectory = getProfilesDirectory(profileManager);
+        File profileFile = new File(profilesDirectory, fileName);
+        FileWriter writer = new FileWriter(profileFile);
+        writer.write(xmi.toString());
+        writer.close();
+        LOG.info("Wrote user defined profile \"" + profileFile 
+            + "\", with size " + xmi.length() + ".");
+        if (isSomeProfileDirectoryConfigured(profileManager))
+            profileManager.refreshRegisteredProfiles();
+        else 
+            profileManager.addSearchPathDirectory(
+                profilesDirectory.getAbsolutePath());
+    }
+
+    private Profile getMatchingUserDefinedProfile(String fileName, 
+            ProfileManager profileManager) {
+        for (Profile candidateProfile 
+            : profileManager.getRegisteredProfiles()) {
+            if (candidateProfile instanceof UserDefinedProfile) {
+                UserDefinedProfile userProfile = 
+                    (UserDefinedProfile) candidateProfile;
+                if (userProfile.getDisplayName().equals(fileName)) {
+                    return userProfile;
+                }
+            }
+        }
+        return null;
+    }
+
+    private File getProfilesDirectory(ProfileManager profileManager) {
+        if (isSomeProfileDirectoryConfigured(profileManager)) {
+            List<String> directories = 
+                profileManager.getSearchPathDirectories();
+            return new File(directories.get(0));
+        } else {
+            File userSettingsFile = new File(
+                Configuration.getFactory().getConfigurationHandler().
+                    getDefaultPath());
+            return userSettingsFile.getParentFile();
+        }
+    }
+
+    private boolean isSomeProfileDirectoryConfigured(
+            ProfileManager profileManager) {
+        return profileManager.getSearchPathDirectories().size() > 0;
+    }
+
+    /*
+     * @see org.argouml.persistence.MemberFilePersister#save(org.argouml.kernel.ProjectMember, java.io.Writer, boolean)
+     */
+    @Override
+    @Deprecated
+    @SuppressWarnings("deprecation")
+    public void save(ProjectMember member, Writer writer, boolean xmlFragment)
+        throws SaveException {
+        PrintWriter w = new PrintWriter(writer);
+        saveProjectMember(member, w);
+    }
+
+    /*
+     * @see org.argouml.persistence.MemberFilePersister#save(org.argouml.kernel.ProjectMember, java.io.OutputStream)
+     */
+    public void save(ProjectMember member, OutputStream stream)
+	throws SaveException {
+	
+        PrintWriter w = new PrintWriter(stream);
+	saveProjectMember(member, w);
+        w.flush();
+    }
+
+    private void saveProjectMember(ProjectMember member, PrintWriter w)
+	throws SaveException {
+	
+        try {
+	    if (member instanceof ProfileConfiguration) {
+		ProfileConfiguration pc = (ProfileConfiguration) member;
+
+		w.println("<?xml version = \"1.0\" encoding = \"UTF-8\" ?>");
+		w.println("<!DOCTYPE profile SYSTEM \"profile.dtd\" >");
+		w.println("<profile>");
+
+		Iterator it = pc.getProfiles().iterator();
+		while (it.hasNext()) {
+                    Profile profile = (Profile) it.next();
+
+                    if (profile instanceof UserDefinedProfile) {
+                        UserDefinedProfile uprofile = 
+                            (UserDefinedProfile) profile;
+                        w.println("\t\t<userDefined>");
+                        w.println("\t\t\t<filename>"
+                                + uprofile.getModelFile().getName()
+                                + "</filename>");
+                        w.println("\t\t\t<model>");
+
+                        printModelXMI(w, uprofile.getProfilePackages());
+
+                        w.println("\t\t\t</model>");
+                        w.println("\t\t</userDefined>");
+                    } else {
+                        w.println("\t\t<plugin>");
+                        w.println("\t\t\t" + profile.getClass().getName());
+                        w.println("\t\t</plugin>");
+                    }
+                }
+
+		w.println("</profile>");
+	    }
+	} catch (Exception e) {
+	    e.printStackTrace();
+	    throw new SaveException(e);
+	}
+    }
+
+    private void printModelXMI(PrintWriter w, Collection profileModels) 
+        throws UmlException {
+        
+        if (true) return;
+        StringWriter myWriter = new StringWriter();
+        // FIXME: this is completely useless since the XMI writer won't 
+        // write the model it is given, but, a list of models which it 
+        // determines on its own. See XmiWriterMDRImpl.write() implementation 
+        // and the usage of the flag WRITE_ALL.
+        for (Object model : profileModels) {
+            XmiWriter xmiWriter = Model.getXmiWriter(model, 
+                (OutputStream) null, //myWriter, 
+                ApplicationVersion.getVersion() + "("
+                    + UmlFilePersister.PERSISTENCE_VERSION + ")");
+            xmiWriter.write();
+        }
+
+        myWriter.flush();
+        w.println("" + myWriter.toString());
+    }
+
+
+    @Override
+    public void load(Project project, URL url) throws OpenException {
+        try {
+            load(project, url.openStream());
+        } catch (IOException e) {
+            throw new OpenException(e);
+        }
+    }
+
+}

Modified: trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java?view=diff&rev=14716&p1=trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java&p2=trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java&r1=14715&r2=14716
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java	2008-05-12 16:48:51-0700
@@ -282,6 +282,8 @@
                                 registerProfile(udp);
                             } catch (ProfileException e) {
                                 // if an exception is raised file is unusable
+                                LOG.warn("Failed to load user defined profile "
+                                    + file.getAbsolutePath() + ".", e);
                             }
                         }
                     }

Modified: trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java?view=diff&rev=14716&p1=trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java&p2=trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java&r1=14715&r2=14716
==============================================================================
--- trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java	(original)
+++ trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java	2008-05-12 16:48:51-0700
@@ -145,7 +145,7 @@
                 javaProfile));
         // create a dependency from the project's model to the UML profile for 
         // Java
-        Object model = Model.getModelManagementFactory().getRootModel();
+        Object model = getModelManagementFactory().getRootModel();
         assertNotNull(model);
         Object fooClass = Model.getCoreFactory().buildClass("Foo", model);
         Object javaListType = project.findType("List", false);
@@ -307,8 +307,10 @@
      */
     public void testProjectWithRemovedUserDefinedProfilePersistency() 
         throws Exception {
+        final String testName = 
+            "testProjectWithRemovedUserDefinedProfilePersistency";
         File userDefinedProfileFile = createUserProfileFile(testCaseDir,
-            "testProjectWithRemovedUserDefinedProfile-TestUserProfile.xmi");
+            testName + "-TestUserProfile.xmi");
         // add it to the project configuration
         Profile userDefinedProfile = 
             new UserDefinedProfile(userDefinedProfileFile);
@@ -320,7 +322,8 @@
         // create a dependency between the project's model and the user defined 
         // profile
         Object model = getModelManagementFactory().getRootModel();
-        Object fooClass = getCoreFactory().buildClass("Foo", model);
+        final String className = "Foo4" + testName;
+        Object fooClass = getCoreFactory().buildClass(className, model);
         Collection stereotypes = getExtensionMechanismsHelper().getStereotypes(
                 project.getModels());
         Object stStereotype = null;
@@ -333,8 +336,7 @@
         }
         Model.getCoreHelper().addStereotype(fooClass, stStereotype);
         // save the project
-        File file = getFileInTestDir(
-            "testProjectWithUserDefinedProfilePersistency.zargo");
+        File file = getFileInTestDir(testName + ".zargo");
         AbstractFilePersister persister = getProjectPersister(file);
         project.setVersion(ApplicationVersion.getVersion());
         persister.save(project, file);
@@ -359,7 +361,6 @@
                     file.getAbsolutePath());
         return persister;
     }
-    
 
     private File createUserProfileFile(File directory, String filename)
         throws IOException {

Modified: trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java?view=diff&rev=14716&p1=trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java&p2=trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java&r1=14715&r2=14716
==============================================================================
--- trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java	(original)
+++ trunk/src/argouml-app/tests/org/argouml/profile/TestProfileManager.java	2008-05-12 16:48:51-0700
@@ -26,6 +26,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
 
 import org.argouml.model.InitializeModel;
@@ -56,7 +57,7 @@
             @Override
             public Collection<Object> getProfilePackages() 
                 throws ProfileException {
-                return null;
+                return Collections.emptyList();
             }
         };
         manager = ProfileFacade.getManager();
@@ -69,11 +70,17 @@
         super.tearDown();
     }
 
+    /**
+     * Test the {@link ProfileManager#registerProfile(Profile)} method.
+     */
     public void testRegisterProfile() {
         manager.registerProfile(mockProfile);
         assertTrue(manager.getRegisteredProfiles().contains(mockProfile));
     }
     
+    /**
+     * Test the {@link ProfileManager#removeProfile(Profile)} method.
+     */
     public void testRemoveProfile() {
         assertFalse(manager.getRegisteredProfiles().contains(mockProfile));
         manager.registerProfile(mockProfile);
@@ -82,6 +89,9 @@
         assertFalse(manager.getRegisteredProfiles().contains(mockProfile));
     }
 
+    /**
+     * Test the {@link ProfileManager#getProfileForClass(String)} method.
+     */
     public void testGetProfileForClass() {
         mockProfileClassName = mockProfile.getClass().getName();
         assertNull(manager.getProfileForClass(mockProfileClassName));
@@ -92,6 +102,10 @@
         assertNull(manager.getProfileForClass(mockProfileClassName));
     }
     
+    /**
+     * Tests the methods of {@link ProfileManager} related to default profiles 
+     * management.
+     */
     public void testDefaultProfilesManagement() {
         List<Object> initialDefaultProfiles = 
             new ArrayList<Object>(manager.getDefaultProfiles());
@@ -106,7 +120,10 @@
         assertFalse(manager.getDefaultProfiles().contains(mockProfile));
     }
     
-    public void testGetUMLProfile() throws Exception {
+    /**
+     * Test the method {@link ProfileManager#getUMLProfile()}.
+     */
+    public void testGetUMLProfile() {
         Profile uml = manager.getUMLProfile();
         assertNotNull(uml);
         assertTrue(uml.getDisplayName().indexOf("UML") != -1);
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.