Author: euluis
Date: 2010-01-30 04:43:37-0800
New Revision: 17935

Modified:
   trunk/src/argouml-app/src/org/argouml/i18n/dialog.properties
   trunk/src/argouml-app/src/org/argouml/persistence/XmlInputStream.java
   trunk/src/argouml-app/src/org/argouml/profile/UserDefinedProfile.java
   trunk/src/argouml-app/src/org/argouml/profile/init/ProfileLoader.java
   
trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java
   trunk/src/argouml-app/src/org/argouml/ui/ProjectSettingsTabProfile.java
   trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java
   trunk/src/argouml-app/src/org/argouml/ui/explorer/ActionDeployProfile.java
   trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java
   trunk/src/argouml-app/tests/org/argouml/profile/TestUserDefinedProfile.java

Log:
issue 5506: injecting ProfileManager into UserDefinedProfile constructors

Modified: trunk/src/argouml-app/src/org/argouml/i18n/dialog.properties
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/dialog.properties?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/dialog.properties        
(original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/dialog.properties        
2010-01-30 04:43:37-0800
@@ -75,7 +75,9 @@
   (1) Either load a module which contains that profile,\n\
   (2) or make sure that the URL can be resolved,\n\
   (3) or load it as a user defined profile in the profile configuration in \
-  the edit->settings dialog.
+  the edit->settings dialog,\n\
+  (4) or use the Model recovery tool to replace the existing external \
+  references that may be obsolete to the correct references.
 dialog.exception.link.report = Please report this problem at \
  <a href="http://argouml.tigris.org/project_bugs.html";>\
  http://argouml.tigris.org/project_bugs.html</a>

Modified: trunk/src/argouml-app/src/org/argouml/persistence/XmlInputStream.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/persistence/XmlInputStream.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/persistence/XmlInputStream.java       
(original)
+++ trunk/src/argouml-app/src/org/argouml/persistence/XmlInputStream.java       
2010-01-30 04:43:37-0800
@@ -132,6 +132,12 @@
      * @param theTag the tag name
      */
     public synchronized void reopen(String theTag) {
+        try {
+            reset();
+        } catch (IOException e) {
+            // TODO: Auto-generated catch block
+            LOG.error("Exception while reset().", e);
+        }
         endStream = false;
         xmlStarted = false;
         inTag = false;

Modified: trunk/src/argouml-app/src/org/argouml/profile/UserDefinedProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/profile/UserDefinedProfile.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/profile/UserDefinedProfile.java       
(original)
+++ trunk/src/argouml-app/src/org/argouml/profile/UserDefinedProfile.java       
2010-01-30 04:43:37-0800
@@ -1,6 +1,6 @@
 /* $Id$
  *****************************************************************************
- * Copyright (c) 2009 Contributors - see below
+ * Copyright (c) 2009-2010 Contributors - see below
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -8,6 +8,7 @@
  *
  * Contributors:
  *    thn
+ *    euluis
  *****************************************************************************
  *
  * Some portions of this file was previously release using the BSD License:
@@ -60,6 +61,7 @@
 import org.argouml.cognitive.Decision;
 import org.argouml.cognitive.ToDoItem;
 import org.argouml.cognitive.Translator;
+import org.argouml.kernel.ProfileConfiguration;
 import org.argouml.model.Model;
 import org.argouml.profile.internal.ocl.CrOCL;
 import org.argouml.profile.internal.ocl.InvalidOclException;
@@ -126,9 +128,12 @@
      * The default constructor for this class
      * 
      * @param file the file from where the model should be read
+     * @param manager the profile manager which will be used to resolve
+     *        dependencies 
      * @throws ProfileException if the profile could not be loaded
      */
-    public UserDefinedProfile(File file) throws ProfileException {
+    public UserDefinedProfile(File file, ProfileManager manager)
+            throws ProfileException {
         LOG.info("load " + file);
         displayName = file.getName();
         modelFile = file;
@@ -141,23 +146,104 @@
         }
         profilePackages = new FileModelLoader().loadModel(reference);
 
-        finishLoading();
+        finishLoading(manager);
+    }
+
+    /**
+     * The default constructor for this class
+     * 
+     * @param file the file from where the model should be read
+     * @throws ProfileException if the profile could not be loaded
+     * @deprecated for 0.30 by euluis. Use
+     * {...@link UserDefinedProfile#UserDefinedProfile(File, ProfileManager)}
+     * instead.
+     */
+    @Deprecated
+    public UserDefinedProfile(File file) throws ProfileException {
+        this(file, getSomeProfileManager());
+    }
+    
+    private static class NullProfileManager implements ProfileManager {
+
+        public void addSearchPathDirectory(String path) {
+        }
+
+        public void addToDefaultProfiles(Profile profile) {
+        }
+
+        public void applyConfiguration(ProfileConfiguration pc) {
+        }
+
+        public List<Profile> getDefaultProfiles() {
+            return new ArrayList<Profile>();
+        }
+
+        public Profile getProfileForClass(String className) {
+            return null;
+        }
+
+        public List<Profile> getRegisteredProfiles() {
+            return new ArrayList<Profile>();
+        }
+
+        public List<String> getSearchPathDirectories() {
+            return new ArrayList<String>();
+        }
+
+        public Profile getUMLProfile() {
+            return null;
+        }
+
+        public Profile lookForRegisteredProfile(String profile) {
+            return null;
+        }
+
+        public void refreshRegisteredProfiles() {
+        }
+
+        public void registerProfile(Profile profile) {
+        }
+
+        public void removeFromDefaultProfiles(Profile profile) {
+        }
+
+        public void removeProfile(Profile profile) {
+        }
+
+        public void removeSearchPathDirectory(String path) {
+        }
+        
     }
 
     /**
      * A constructor that reads a file from an URL
      * 
      * @param url the URL
+     * @param manager the profile manager which will be used to resolve
+     *        dependencies
      * @throws ProfileException if the profile can't be read or is not valid
      */
-    public UserDefinedProfile(URL url) throws ProfileException {
+    public UserDefinedProfile(URL url, ProfileManager manager)
+            throws ProfileException {
         LOG.info("load " + url);
-
         ProfileReference reference = null;
         reference = new UserProfileReference(url.getPath(), url);
         profilePackages = new URLModelLoader().loadModel(reference);
+        finishLoading(manager);
+    }
 
-        finishLoading();
+    /**
+     * A constructor that reads a file from an URL
+     * 
+     * @param url the URL
+     * @throws ProfileException if the profile could not be loaded
+     * @deprecated for 0.30 by euluis. Use
+     * {...@link UserDefinedProfile#UserDefinedProfile(URL, ProfileManager)}
+     * instead.
+     */
+    @Deprecated
+    public UserDefinedProfile(URL url) throws ProfileException {
+        this(url, getSomeProfileManager());
     }
 
     /**
@@ -167,10 +253,13 @@
      * @param url the URL of the profile mode
      * @param critics the Critics defined by this profile
      * @param dependencies the dependencies of this profile
+     * @param manager the profile manager which will be used to resolve
+     *        dependencies
      * @throws ProfileException if the model cannot be loaded
      */
     public UserDefinedProfile(String dn, URL url, Set<Critic> critics,
-            Set<String> dependencies) throws ProfileException {
+            Set<String> dependencies, ProfileManager manager)
+            throws ProfileException {
         LOG.info("load " + url);
 
         this.displayName = dn;
@@ -188,13 +277,41 @@
             addProfileDependency(profileID);
         }
 
-        finishLoading();
+        finishLoading(manager);
+    }
+
+    /**
+     * A constructor that reads a file from an URL associated with some 
profiles
+     * 
+     * @param dn the display name of the profile
+     * @param url the URL of the profile mode
+     * @param critics the Critics defined by this profile
+     * @param dependencies the dependencies of this profile
+     * @throws ProfileException if the model cannot be loaded
+     * 
+     * @deprecated for 0.30 by euluis. Use
+     * {...@link UserDefinedProfile#UserDefinedProfile(String, URL, Set, Set, 
ProfileManager)}
+     * instead.
+     */
+    @Deprecated
+    public UserDefinedProfile(String dn, URL url, Set<Critic> critics,
+            Set<String> dependencies) throws ProfileException {
+        this(dn, url, critics, dependencies, getSomeProfileManager());
+    }
+
+    private static ProfileManager getSomeProfileManager() {
+        if (ProfileFacade.isInitiated()) {
+            return ProfileFacade.getManager();
+        }
+        return new NullProfileManager();
     }
 
     /**
      * Reads the informations defined as TaggedValues
+     * @param manager the profile manager which will be used to resolve
+     *        dependencies
      */
-    private void finishLoading() {
+    private void finishLoading(ProfileManager manager) {
         Collection packagesInProfile = filterPackages();
         
         for (Object obj : packagesInProfile) {
@@ -224,14 +341,23 @@
                     StringTokenizer st = new StringTokenizer(dependencyListStr,
                             " ,;:");
 
-                    String profile = null;
+                    String dependencyName = null;
 
                     while (st.hasMoreTokens()) {
-                        profile = st.nextToken();
-                        if (profile != null) {
-                            LOG.debug("AddingDependency " + profile);
-                            
this.addProfileDependency(ProfileFacade.getManager()
-                                    .lookForRegisteredProfile(profile));
+                        dependencyName = st.nextToken();
+                        if (dependencyName != null) {
+                            LOG.debug("Adding dependency " + dependencyName);
+                            Profile profile =
+                                manager.lookForRegisteredProfile(
+                                    dependencyName);
+                            if (profile != null) {
+                                addProfileDependency(profile);
+                            } else {
+                                LOG.warn("The profile \"" + displayName
+                                    + "\" has a dependency named \""
+                                    + dependencyName
+                                    + "\" which isn't solvable.");
+                            }
                         }
                     }
                 }

Modified: trunk/src/argouml-app/src/org/argouml/profile/init/ProfileLoader.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/profile/init/ProfileLoader.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/profile/init/ProfileLoader.java       
(original)
+++ trunk/src/argouml-app/src/org/argouml/profile/init/ProfileLoader.java       
2010-01-30 04:43:37-0800
@@ -158,7 +158,8 @@
 
                     UserDefinedProfile udp = new UserDefinedProfile(entryName,
                             modelURL, critics,
-                            loadManifestDependenciesForProfile(attr));
+                            loadManifestDependenciesForProfile(attr),
+                            ProfileFacade.getManager());
 
                     ProfileFacade.getManager().registerProfile(udp);
                     LOG.debug("Registered Profile: " + udp.getDisplayName()

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&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java  
    (original)
+++ 
trunk/src/argouml-app/src/org/argouml/profile/internal/ProfileManagerImpl.java  
    2010-01-30 04:43:37-0800
@@ -172,7 +172,7 @@
 
                             if (p == null) {
                                 try {
-                                    p = new UserDefinedProfile(file);
+                                    p = new UserDefinedProfile(file, this);
                                     registerProfile(p);
                                 } catch (ProfileException e) {
                                     LOG.error("Error loading profile: " + file,
@@ -398,7 +398,7 @@
                 if (!found) {
                     UserDefinedProfile udp = null;
                     try {
-                        udp = new UserDefinedProfile(file);
+                        udp = new UserDefinedProfile(file, this);
                         registerProfile(udp);
                     } catch (ProfileException e) {
                         // if an exception is raised file is unusable

Modified: 
trunk/src/argouml-app/src/org/argouml/ui/ProjectSettingsTabProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/ProjectSettingsTabProfile.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/ProjectSettingsTabProfile.java     
(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/ProjectSettingsTabProfile.java     
2010-01-30 04:43:37-0800
@@ -358,7 +358,8 @@
                 File file = chooser.getSelectedFile();
                 chooser.setCurrentDirectory(file.getParentFile());
                 try {
-                    UserDefinedProfile profile = new UserDefinedProfile(file);
+                    UserDefinedProfile profile = new UserDefinedProfile(file,
+                        ProfileFacade.getManager());
                     ProfileFacade.getManager().registerProfile(profile);
 
                     modelAvailable.addElement(profile);

Modified: trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java    
(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java    
2010-01-30 04:43:37-0800
@@ -375,7 +375,8 @@
                 for (File file : files) {
                     try {
                         UserDefinedProfile profile =
-                            new UserDefinedProfile(file);
+                            new UserDefinedProfile(file,
+                                ProfileFacade.getManager());
                         ProfileFacade.getManager().registerProfile(profile);
                         modelAvl.addElement(profile);
                     } catch (ProfileException e) {

Modified: 
trunk/src/argouml-app/src/org/argouml/ui/explorer/ActionDeployProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/explorer/ActionDeployProfile.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/explorer/ActionDeployProfile.java  
(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/explorer/ActionDeployProfile.java  
2010-01-30 04:43:37-0800
@@ -104,7 +104,8 @@
         }
         // register it as a user profile
         try {
-            profileManager.registerProfile(new UserDefinedProfile(f));
+            profileManager.registerProfile(new UserDefinedProfile(f,
+                profileManager));
         } catch (ProfileException e) {
             LOG.warn("failed to load profile from file " + f.getPath(), 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&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java 
(original)
+++ trunk/src/argouml-app/tests/org/argouml/kernel/TestProjectWithProfiles.java 
2010-01-30 04:43:37-0800
@@ -262,9 +262,9 @@
         File userDefinedProfileFile = createUserProfileFile(testCaseDir,
             
"testProjectWithUserDefinedProfilePersistency-TestUserProfile.xmi");
         // add it to the project configuration
-        Profile userDefinedProfile = 
-            new UserDefinedProfile(userDefinedProfileFile);
         ProfileManager profileManager = ProfileFacade.getManager();
+        Profile userDefinedProfile = 
+            new UserDefinedProfile(userDefinedProfileFile, profileManager);
         profileManager.registerProfile(userDefinedProfile);
         profileManager.addSearchPathDirectory(testCaseDir.getAbsolutePath());
         Project project = ProjectManager.getManager().makeEmptyProject();
@@ -342,9 +342,9 @@
         File userDefinedProfileFile = createUserProfileFile(testCaseDir,
             testName + "-TestUserProfile.xmi");
         // add it to the project configuration
-        Profile userDefinedProfile = 
-            new UserDefinedProfile(userDefinedProfileFile);
         ProfileManager profileManager = ProfileFacade.getManager();
+        Profile userDefinedProfile = 
+            new UserDefinedProfile(userDefinedProfileFile, profileManager);
         profileManager.registerProfile(userDefinedProfile);
         profileManager.addSearchPathDirectory(testCaseDir.getAbsolutePath());
         Project project = ProjectManager.getManager().makeEmptyProject();

Modified: 
trunk/src/argouml-app/tests/org/argouml/profile/TestUserDefinedProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/tests/org/argouml/profile/TestUserDefinedProfile.java?view=diff&pathrev=17935&r1=17934&r2=17935
==============================================================================
--- trunk/src/argouml-app/tests/org/argouml/profile/TestUserDefinedProfile.java 
(original)
+++ trunk/src/argouml-app/tests/org/argouml/profile/TestUserDefinedProfile.java 
2010-01-30 04:43:37-0800
@@ -54,7 +54,7 @@
  * Some basic tests for the {...@link UserDefinedProfile} class.
  * 
  * @author Luis Sergio Oliveira (euluis)
- * @authos maurelio1234
+ * @author maurelio1234
  */
 public class TestUserDefinedProfile extends TestCase {
 
@@ -88,7 +88,8 @@
         // save the profile into a xmi file
         File profileFile = new File(testDir, "testLoadingConstructor.xmi");
         profileMother.saveProfileModel(model, profileFile);
-        Profile profile = new UserDefinedProfile(profileFile);
+        Profile profile = new UserDefinedProfile(profileFile,
+            ProfileFacade.getManager());
         assertTrue(profile.getDisplayName().contains(profileFile.getName()));
     }
 
@@ -115,8 +116,8 @@
         profiles.add(pm.getUMLProfile().getProfileIdentifier());
         critics.add(critic);
 
-        Profile profile = new UserDefinedProfile("displayName", profileFile
-                .toURI().toURL(), critics, profiles);
+        Profile profile = new UserDefinedProfile("displayName",
+            profileFile.toURI().toURL(), critics, profiles, pm);
 
         assertEquals(profile.getDisplayName(), "displayName");
         assertTrue(profile.getDependencies().contains(pm.getUMLProfile()));

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2443304

To unsubscribe from this discussion, e-mail: 
[commits-unsubscr...@argouml.tigris.org].

Reply via email to