Author: maurelio1234 Date: 2008-04-30 05:21:15-0700 New Revision: 14529 Modified: branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java
Log: reading java critics from jar Modified: 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=diff&rev=14529&p1=branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java&p2=branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java&r1=14528&r2=14529 ============================================================================== --- branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java (original) +++ branches/gsoc2008_maurelio1234_profiles/profile/plugin/PluginProfileLoaderImpl.java 2008-04-30 05:21:15-0700 @@ -12,6 +12,8 @@ import javax.swing.ImageIcon; +import org.apache.log4j.Logger; +import org.argouml.cognitive.Agency; import org.argouml.model.Model; import org.argouml.profile.FigNodeStrategy; import org.argouml.profile.Profile; @@ -21,6 +23,8 @@ import org.argouml.profile.ProfileModelLoader; import org.argouml.profile.ProfileReference; import org.argouml.profile.ResourceModelLoader; +import org.argouml.uml.cognitive.critics.CrProfile; +import org.argouml.uml.cognitive.critics.CrUML; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -36,6 +40,10 @@ */ public class PluginProfileLoaderImpl extends DefaultHandler implements PluginProfileLoader { + /** + * Logger. + */ + private static final Logger LOG = Logger.getLogger(PluginProfileImpl.class); PluginProfileImpl plugin = null; @@ -94,6 +102,15 @@ } } + private class JavaCriticDescriptor { + String crClassName; + String dmClassName; + + public boolean isValid() { + return crClassName != null && dmClassName != null; + } + } + private Class referenceClass; private interface Tags { @@ -104,6 +121,9 @@ static final String DEPENDENCY = "dependency"; static final String FIGNODE = "fignode"; + + static final String CRITIC = "critic"; + } private interface Atts { @@ -126,6 +146,13 @@ static final String FIGNODE_IMAGE = "image"; static final String FIGNODE_LENGTH = "length"; + + static final String CRITIC_LANGUAGE = "language"; + + static final String CRITIC_JAVA_CLASS_NAME = "crClassName"; + + static final String CRITIC_JAVA_MATERIAL_NAME = "dmClassName"; + } public PluginProfile loadProfile(Class cl) throws ErrorLoadingProfile { @@ -157,11 +184,16 @@ Attributes atts) { FigNodeDescriptor desc = null; - + JavaCriticDescriptor cdesc = null; + if (name.equalsIgnoreCase(Tags.FIGNODE)) { desc = new FigNodeDescriptor(); } + if (name.equalsIgnoreCase(Tags.CRITIC)) { + cdesc = new JavaCriticDescriptor(); + } + for (int i = 0; i < atts.getLength(); ++i) { if (name.equalsIgnoreCase(Tags.PROFILE)) { if (atts.getLocalName(i).equalsIgnoreCase(Atts.PROFILE_AUTHOR)) { @@ -207,6 +239,17 @@ Atts.FIGNODE_LENGTH)) { desc.length = Integer.parseInt(atts.getValue(i)); } + } else if (name.equalsIgnoreCase(Tags.CRITIC)) { + if (atts.getLocalName(i).equalsIgnoreCase( + Atts.CRITIC_LANGUAGE)) { + + } else if (atts.getLocalName(i).equalsIgnoreCase( + Atts.CRITIC_JAVA_CLASS_NAME)) { + cdesc.crClassName = atts.getValue(i); + } else if (atts.getLocalName(i).equalsIgnoreCase( + Atts.CRITIC_JAVA_MATERIAL_NAME)) { + cdesc.dmClassName = atts.getValue(i); + } } } @@ -214,6 +257,19 @@ loadImage(desc); profile.figNodeStrat.addDesrciptor(desc); } + + if (cdesc != null && cdesc.isValid()) { + Class criticClass; + try { + criticClass = referenceClass.getClassLoader().loadClass(cdesc.crClassName); + CrProfile criticObject = (CrProfile) criticClass.newInstance(); + Class dmClass = Class.forName(cdesc.dmClassName); + + Agency.register(criticObject, dmClass); + } catch (Exception e) { + LOG.error("Exception", e); + } + } } private void loadImage(FigNodeDescriptor desc) { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
