svn commit: r14505 - branches/gsoc2008_maurelio1234_profiles/profile/plugin

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: maurelio1234
Date: 2008-04-29 01:50:39-0700
New Revision: 14505

Added:
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/ErrorLoadingProfile.java
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfile.java
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileImpl.java
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoader.java
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java
   branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileModule.java

Log:
commiting current code

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/ErrorLoadingProfile.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/ErrorLoadingProfile.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/ErrorLoadingProfile.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,22 @@
+package org.argouml.profile.plugin;
+
+@SuppressWarnings("serial")
+public class ErrorLoadingProfile extends Exception {
+
+	public ErrorLoadingProfile() {
+		super();
+	}
+
+	public ErrorLoadingProfile(String message, Throwable cause) {
+		super(message, cause);
+	}
+
+	public ErrorLoadingProfile(String message) {
+		super(message);
+	}
+
+	public ErrorLoadingProfile(Throwable cause) {
+		super(cause);
+	}
+
+}

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfile.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfile.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfile.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,41 @@
+package org.argouml.profile.plugin;
+
+import org.argouml.profile.Profile;
+
+/**
+ * This class represents a User Defined Profile defined as a Plug-in
+ * It allows the loading code to abstract from the internal format used
+ * to store these informations into the JAR archive 
+ * 
+ * @author maas
+ */
+public interface PluginProfile {
+
+	/**
+	 * @return the description for this profile
+	 */
+	String getDescription();
+
+	/**
+	 * @return the author of this profile
+	 */
+	String getAuthor();
+
+	/**
+	 * @return the version of this profile
+	 */
+	String getVersion();
+
+	/**
+	 * @return the download site for this profile
+	 */
+	String getDownloadSite();
+
+	/**
+	 * @return the name for this profile
+	 */
+	String getName();
+	
+	Profile getProfile();
+
+}

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileImpl.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileImpl.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,90 @@
+package org.argouml.profile.plugin;
+
+import org.argouml.profile.Profile;
+
+/**
+ * Default implementation for the {@link PluginProfile} interface
+ * 
+ * @author maas
+ */
+public class PluginProfileImpl implements PluginProfile {
+	private String author;
+	private String description;
+	private String name;
+	private String version;
+	private String downloadsite;
+	private Profile profile;
+	/**
+	 * @return the author
+	 */
+	public String getAuthor() {
+		return author;
+	}
+	/**
+	 * @param author the author to set
+	 */
+	public void setAuthor(String author) {
+		this.author = author;
+	}
+	/**
+	 * @return the description
+	 */
+	public String getDescription() {
+		return description;
+	}
+	/**
+	 * @param description the description to set
+	 */
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	/**
+	 * @return the downloadsite
+	 */
+	public String getDownloadSite() {
+		return downloadsite;
+	}
+	/**
+	 * @param downloadsite the downloadsite to set
+	 */
+	public void setDownloadSite(String downloadsite) {
+		this.downloadsite = downloadsite;
+	}
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+	/**
+	 * @param name the name to set
+	 */
+	public void setName(String name) {
+		this.name = name;
+	}
+	/**
+	 * @return the version
+	 */
+	public String getVersion() {
+		return version;
+	}
+	/**
+	 * @param version the version to set
+	 */
+	public void setVersion(String version) {
+		this.version = version;
+	}
+	/**
+	 * @return the profile
+	 */
+	public Profile getProfile() {
+		return profile;
+	}
+	/**
+	 * @param profile the profile to set
+	 */
+	public void setProfile(Profile profile) {
+		this.profile = profile;
+	}
+	
+}

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoader.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoader.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoader.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,18 @@
+package org.argouml.profile.plugin;
+
+/**
+ * This interface abstracts the process used to load the
+ * plugin descriptor. 
+ * 
+ * @author maas
+ */
+public interface PluginProfileLoader {
+	/**
+	 * Loads the profile
+	 * 
+	 * @param cl the reference class (used in order to find the needed resources) 
+	 * @return the profile descriptor
+	 * @throws ErrorLoadingProfile
+	 */
+	PluginProfile loadProfile(Class cl) throws ErrorLoadingProfile;
+}

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,142 @@
+package org.argouml.profile.plugin;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.argouml.model.Model;
+import org.argouml.profile.Profile;
+import org.argouml.profile.ProfileException;
+import org.argouml.profile.ProfileModelLoader;
+import org.argouml.profile.ProfileReference;
+import org.argouml.profile.ResourceModelLoader;
+import org.xml.sax.Attributes;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import org.xml.sax.helpers.DefaultHandler;
+import org.xml.sax.helpers.XMLReaderFactory;
+
+/**
+ * Reads the profile descriptor from a file called "profile.xml" 
+ * in the same directory as the reference class
+ * 
+ * @author maas
+ */
+public class PluginProfileLoaderImpl extends DefaultHandler implements PluginProfileLoader  {
+
+	PluginProfileImpl plugin = null;
+	Collection profileModel = null;
+	
+	Profile profile = new Profile() {
+		@Override
+		public String getDisplayName() {
+			return plugin.getName();
+		}
+
+		@Override
+		public Collection getProfilePackages() throws ProfileException {
+			return profileModel;
+		}
+	};
+	
+	private Class referenceClass;
+	
+	private interface Tags {
+		static final String PROFILE = "profile";
+		static final String MODEL = "model"; 
+	}
+	
+	private interface Atts {
+		static final String PROFILE_AUTHOR = "author";
+		static final String PROFILE_DESCRIPTION = "description";
+		static final String PROFILE_NAME = "name";
+		static final String PROFILE_VERSION = "version";
+		static final String PROFILE_DOWNLOADSITE = "downloadsite"; 
+		static final String MODEL_XMI = "xmi"; 
+	}
+
+	public PluginProfile loadProfile(Class cl) throws ErrorLoadingProfile {
+		try {
+			this.referenceClass = cl;
+			
+			XMLReader xr = XMLReaderFactory.createXMLReader();
+			
+			xr.setContentHandler(this);
+			xr.setErrorHandler(this);
+			
+			xr.parse(new InputSource(new InputStreamReader(cl.getResourceAsStream("profile.xml"))));
+			
+		} catch (SAXException e) {
+			throw new ErrorLoadingProfile();
+		} catch (IOException e) {
+			throw new ErrorLoadingProfile();
+		}		
+		
+		return plugin;
+	}
+
+	public void startDocument() {
+		plugin = new PluginProfileImpl();
+	}
+		
+	public void startElement(String uri, String name, String qName, Attributes atts) {
+			for(int i=0;i<atts.getLength();++i) {
+				if (name.equalsIgnoreCase(Tags.PROFILE)) {
+					if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_AUTHOR)) {
+						plugin.setAuthor(atts.getValue(i));
+					} else if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_DESCRIPTION)) {
+						plugin.setDescription(atts.getValue(i));
+					} else if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_NAME)) {
+						plugin.setName(atts.getValue(i));
+					} else if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_VERSION)) {
+						plugin.setVersion(atts.getValue(i));
+					} else if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_DOWNLOADSITE)) {
+						plugin.setDownloadSite(atts.getValue(i));
+					}
+				} else if (name.equalsIgnoreCase(Tags.MODEL)) {
+					if (atts.getLocalName(i).equalsIgnoreCase(Atts.MODEL_XMI)) {
+						try {
+							loadProfileModel(atts.getValue(i));
+						} catch (ProfileException e) {
+							e.printStackTrace();
+						}
+					}
+				}
+			}
+	}
+	
+	@SuppressWarnings("unchecked")
+	private void loadProfileModel(String profile) throws ProfileException {
+		ProfileModelLoader profileModelLoader = new ResourceModelLoader(referenceClass);
+		try {
+			profileModel = profileModelLoader.loadModel(new ProfileReference(
+					profile, new URL("http://example.com/argouml/userprofiles/"
+							+ profile)));
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		if (profileModel == null) {
+			profileModel = new ArrayList();
+			profileModel.add(Model.getModelManagementFactory().createModel());
+		}
+	}
+
+	public void endElement(String uri, String name, String qName) {
+		if (name.equalsIgnoreCase(Tags.PROFILE)) {
+			plugin.setProfile(profile);
+		}
+	}
+
+	private static PluginProfileLoaderImpl instance = null;
+	public static PluginProfileLoader getInstance() {
+		if (instance == null) {
+			instance = new PluginProfileLoaderImpl();
+		}
+		return instance;
+	}
+
+}

Added: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileModule.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileModule.java?view=auto&rev=14505
==============================================================================
--- (empty file)
+++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileModule.java	2008-04-29 01:50:39-0700
@@ -0,0 +1,84 @@
+package org.argouml.profile.plugin;
+
+import org.apache.log4j.Logger;
+import org.argouml.moduleloader.ModuleInterface;
+import org.argouml.profile.ProfileFacade;
+import org.tigris.gef.undo.UndoableAction;
+
+/**
+ * General superclass for module User Defined profiles defined as plug-in 
+ * 
+ * @author maas
+ */
+@SuppressWarnings("serial")
+public abstract class PluginProfileModule extends UndoableAction implements ModuleInterface {
+
+    /**
+     * Logger.
+     */
+    private static final Logger LOG = Logger.getLogger(PluginProfileModule.class);
+
+	private PluginProfile  profile;
+		
+	/**
+	 * 
+	 */
+	public PluginProfileModule() {
+		super("plugin profile");
+		registerProfile(this.getClass());
+	}
+
+	protected void registerProfile(Class cl) {
+		try {
+			PluginProfileLoader loader = PluginProfileLoaderImpl.getInstance();
+
+			profile = loader.loadProfile(cl);
+		} catch (ErrorLoadingProfile e) {
+			LOG.error("Error loading profile", e);
+		}
+	}
+	
+	public boolean disable() {
+		ProfileFacade.getManager().removeProfile(profile.getProfile());
+		return true;
+	}
+
+	public boolean enable() {		
+		ProfileFacade.getManager().registerProfile(profile.getProfile());
+		return true;
+	}
+
+	public String getInfo(int type) {
+		if (profile == null) {
+			LOG.debug("Empty Plugin Profile detected!");
+			
+			return "Empty Plug-in";
+		} else {
+	        switch (type) {
+	        case DESCRIPTION:
+	            return profile.getDescription();
+	        case AUTHOR:
+	            return profile.getAuthor();
+	        case VERSION:
+	            return profile.getVersion();
+	        case DOWNLOADSITE:
+	            return profile.getDownloadSite();
+	        default:
+	            return null;
+	        }    
+		}
+	}
+
+	public String getName() {
+		String ret = null;
+		if (profile == null) {
+			LOG.debug("Empty Plugin Profile detected!");
+			
+			ret = "Empty Plug-in";
+		} else {
+			ret = profile.getName();			
+		}
+		return ret;
+	}
+
+}
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.