Author: tchemit Date: 2009-11-27 12:29:08 +0100 (Fri, 27 Nov 2009) New Revision: 731 Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractModelFileWriter.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriter.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterConfiguration.java branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterUtil.java branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ModelFileWriterUtilTest.java branches/eugene-2.0/maven-eugene-plugin/src/it/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/README.txt branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/invoker.properties branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/pom.xml branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.properties branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.xmi branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.properties branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.zargo branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/verify.groovy branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/README.txt branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/invoker.properties branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/pom.xml branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.properties branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.xmi branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.zargo branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/verify.groovy branches/eugene-2.0/maven-eugene-plugin/src/it/settings.xml branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AbstractEugeneMojo.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/GeneratateModelFilesMojo.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseModelFileWriter.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseXmiToModelFileWriter.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToObjectModelFileWriter.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToStateModelFileWriter.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoModelFileWriter.java Modified: branches/eugene-2.0/maven-eugene-plugin/ branches/eugene-2.0/maven-eugene-plugin/pom.xml branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java branches/eugene-2.0/maven-eugene-plugin/src/main/resources/log4j.properties Log: - add ModelFileWriter api - add some integration tests in plugin (to run them use -Prun-its) Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractModelFileWriter.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractModelFileWriter.java (rev 0) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,150 @@ +package org.nuiton.eugene; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import static org.nuiton.eugene.ModelFileWriterUtil.ModelFileWriterEntry; +import org.nuiton.eugene.models.Model; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Abstract implementation of the {@link org.nuiton.eugene.ModelFileWriter}. + * + * @author tchemit + * @since 2.0.0 + */ +public abstract class AbstractModelFileWriter implements ModelFileWriter { + + private static final Log log = LogFactory.getLog(AbstractModelFileWriter.class); + /** + * entries to treate + */ + protected List<ModelFileWriterEntry> entries; + /** + * previous writer (can be null) + */ + protected ModelFileWriter previousWriter; + /** + * next writer (can be null) + */ + protected ModelFileWriter nextWriter; + + /** + * common configuration of all writers available in generate method scope + */ + protected ModelFileWriterConfiguration configuration; + + protected AbstractModelFileWriter() { + entries = new ArrayList<ModelFileWriterEntry>(); + } + + /** + * Generates some files for a given input, output and include pattern. + * + * @param outputDir where to generate files + * @param inputDirectory where to pick up files + * @param includePattern pattern of files to include + * @param overwrite {@code true} if should regenerate even if files are up to date + * @throws IOException for any IO pb. + */ + protected abstract void generate(File outputDir, File inputDirectory, String includePattern, boolean overwrite) throws IOException; + + @Override + public void clear() { + entries.clear(); + } + + @Override + public void addEntry(ModelFileWriterEntry entry) { + entries.add(entry); + } + + @Override + public <T> T getProperty(String key, Class<T> type) { + return (T) getConfiguration().getProperties().get(key); + } + + @Override + public void generate(ModelFileWriterConfiguration configuration) throws IOException { + if (log.isDebugEnabled()) { + log.debug("[" + getInputProtocol() + "] Start generate with writer " + this); + } + this.configuration = configuration; + try { + File outputDir = getOutputDirectory(configuration.getOutputDirectory()); + + if (!outputDir.exists()) { + if (log.isDebugEnabled()) { + log.debug("[" + getInputProtocol() + "] Create output directory " + outputDir); + } + boolean b = outputDir.mkdirs(); + if (!b) { + throw new IOException("Could not creat directory " + outputDir); + } + } + + for (ModelFileWriterEntry e : entries) { + if (log.isDebugEnabled()) { + log.debug("[" + getInputProtocol() + "] Will generate entry " + e.getInputDirectory() + " : " + e.getIncludePattern()); + } + generate(outputDir, e.getInputDirectory(), e.getIncludePattern(), configuration.isOverwrite()); + } + } finally { + this.configuration = null; + } + } + + @Override + public <M extends Model> String getInputProtocol(Class<M> modelType) { + // input protocol is the same for all model + return acceptModel(modelType) ? getInputProtocol() : null; + } + + @Override + public File getOutputDirectory(File outputBasedir) { + return new File(outputBasedir, getDefaultOutputDirectory()); + } + + @Override + public List<ModelFileWriterEntry> getEntries() { + return entries; + } + + /** + * @return the shared configuration used by the writer + */ + protected ModelFileWriterConfiguration getConfiguration() { + return configuration; + } +// +// protected File createOutputDirectory(File outputDir) throws IOException { +// +// outputDir = getOutputDirectory(outputDir); +// +// if (!outputDir.exists()) { +// if (log.isDebugEnabled()) { +// log.debug("[" + getInputProtocol() + "] Create output directory " + outputDir); +// } +// boolean b = outputDir.mkdirs(); +// if (!b) { +// throw new IOException("Could not creat directory " + outputDir); +// } +// } +// return outputDir; +// } + + protected ModelFileWriter getNextWriter() { + return nextWriter; + } + + protected ModelFileWriter getPreviousWriter() { + return previousWriter; + } + + protected void setNextWriter(ModelFileWriter nextWriter) { + this.nextWriter = nextWriter; + } +} \ No newline at end of file Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/AbstractModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriter.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriter.java (rev 0) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,117 @@ +package org.nuiton.eugene; + +import org.nuiton.eugene.models.Model; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * User: chemit + * Date: 27 nov. 2009 + * Time: 11:20:39 + */ +public interface ModelFileWriter { + + /** + * @return the accepted incoming protocol + */ + String getInputProtocol(); + + /** + * Obtain the input protocol of this writer given the passed {@code modelType}. + * + * @param modelType the type of model used + * @param <M> the type of model used + * @return the input protocol or {@code null} if this writer does not accept the type of model + */ + <M extends Model> String getInputProtocol(Class<M> modelType); + + /** + * Obtain the output protocol of this writer given the passed {@code modelType}. + * + * @param modelType the type of model used + * @param <M> the type of model used + * @return the output protocol or {@code null} if should not be chained + */ + <M extends Model> String getOutputProtocol(Class<M> modelType); + + /** + * Test if a type of model can be treated by this writer. + * + * @param modelType model type to test + * @param <M> model type to test + * @return {@code true} if this writer accept the given type of model, {@code false} otherwise. + */ + <M extends Model> boolean acceptModel(Class<M> modelType); + + /** + * Test in a entry can be treated by this writer. + * + * @param include the include to test + * @return {@code true} if the writer accept the entry, {@code false} otherwise. + */ + boolean acceptInclude(String include); + + /** + * @return the default includes files to be treated by the writer (can be an ant-like expression) + */ + String getDefaultIncludes(); + + /** + * @return the defalt relative path where to pick files to treate. + */ + String getDefaultInputDirectory(); + + /** + * @return the default relative path to add to output basedir + */ + String getDefaultOutputDirectory(); + + /** + * Obtain the real directory where to write files. + * <p/> + * //FIXME-TC20091126 make this configurable (via the properties) + * + * @param outputBasedir the output base directory + * @return the real output directory where to generate for this particular writer + */ + File getOutputDirectory(File outputBasedir); + + /** + * Generates. + * + * @param configuration the share configuration of all writers. + * @throws IOException if any io pb. + */ + void generate(ModelFileWriterConfiguration configuration) throws IOException; + + /** + * Clear all internal states + */ + void clear(); + + /** + * Add an entry to treate. + * + * @param entry the entry to add to writer + */ + void addEntry(ModelFileWriterUtil.ModelFileWriterEntry entry); + + /** + * Obtain a writer extra property. + * + * @param key the key of required property + * @param type the type of property + * @param <T> the type of property + * @return the property found or {@code null} if not found. + */ + <T> T getProperty(String key, Class<T> type); + +// ModelFileWriterConfiguration getConfiguration(); + + /** + * @return the list of all entries registered + */ + List<ModelFileWriterUtil.ModelFileWriterEntry> getEntries(); +} Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterConfiguration.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterConfiguration.java (rev 0) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterConfiguration.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,63 @@ +package org.nuiton.eugene; + +import org.nuiton.eugene.models.Model; + +import java.io.File; +import java.util.Map; +import java.util.Set; + +/** + * Shared configuration of a {@link ModelFileWriter}, should be the same for all writer + * to use in a time. + * + * @author tchemit + * @since 2.0.0 + */ +public interface ModelFileWriterConfiguration { + + /** + * @return the type of model used + */ + Class<? extends Model> getModelClass(); + + /** + * @return project base directory + */ + File getBasedir(); + + /** + * @return base directory where to generate + */ + File getOutputDirectory(); + + /** + * @return {@code true} if must regenerate files even if they are up to date + */ + boolean isOverwrite(); + + /** + * @return {@code true} if build is off-line and should not be able to access outside resources. + */ + boolean isOffline(); + + /** + * @return {@code true} if build is verbose. + */ + boolean isVerbose(); + + /** + * @return encoding to use to read and write files + */ + String getEncoding(); + + /** + * @return Set of all availables writers + */ + Set<ModelFileWriter> getAvailableWriters(); + + /** + * @return properties to pass to writers + */ + Map<String, Object> getProperties(); + +} Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterConfiguration.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterUtil.java =================================================================== --- branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterUtil.java (rev 0) +++ branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterUtil.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,311 @@ +package org.nuiton.eugene; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.Model; + +import java.io.File; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * User: chemit + * Date: 26 nov. 2009 + * Time: 00:18:29 + */ +public class ModelFileWriterUtil { + + private static final Log log = LogFactory.getLog(ModelFileWriterUtil.class); + + public static void registerInclude(ModelFileWriterConfiguration configuration, String include, List<ModelFileWriter> selectedWriters) { + if (log.isDebugEnabled()) { + log.debug(">>>>>>>>>>>>>>>>> [" + include + "]"); + log.debug("Will register include " + "[" + include + "]"); + log.debug("actual selected writers : " + selectedWriters); + } + ModelFileWriterEntryType selectedType = null; + Matcher matcher = null; + + // obtain the good type of entry and the corresponding matcher + + for (ModelFileWriterEntryType type : ModelFileWriterEntryType.values()) { + matcher = type.getMatcher(include); + if (matcher != null) { + // get a matcher + selectedType = type; + break; + } + } + + if (selectedType == null) { + // no writer + throw new IllegalArgumentException("could not find a writer for include pattern : " + include); + } + + // obtain the writer + ModelFileWriter writer = selectedType.getWriter(configuration, include, matcher); + + // create the new entry + + ModelFileWriterEntry writerEntry = selectedType.newEntry(configuration, include, matcher, writer); + + // register the new entry + + writer.addEntry(writerEntry); + if (!selectedWriters.contains(writer)) { + // register the writer as to be used + if (log.isDebugEnabled()) { + log.debug("[" + include + "] Associated with writer " + writer); + } + selectedWriters.add(writer); + } + + Class<? extends Model> modelType = configuration.getModelClass(); + + String outpoutProtocol = writer.getOutputProtocol(modelType); + + if (outpoutProtocol == null) { + // nothing more to do + if (log.isDebugEnabled()) { + log.debug("<<<<<<<<<<<<<<<<< [" + include + "]"); + } + return; + } + + // the writer need the includes of another writer + + if (log.isDebugEnabled()) { + log.debug("[" + include + "]" + " writer " + writer.getClass().getSimpleName() + " require a next writer of protocol " + outpoutProtocol); + } + + ModelFileWriter nextWriter = ((AbstractModelFileWriter)writer).getNextWriter(); + if (nextWriter == null) { + // the next writer was not initialize, just have to add new entry + + nextWriter = getWriterForInputProtocole(configuration.getAvailableWriters(), outpoutProtocol, modelType); + + if (nextWriter == null) { + throw new IllegalArgumentException("could not find a writer for protocole " + outpoutProtocol + " on model " + modelType); + } + // chain writer + ((AbstractModelFileWriter)writer).setNextWriter(nextWriter); + } + + // build the next include to do + + String basedirpath = configuration.getBasedir().getAbsolutePath(); + + String outputpath = writer.getOutputDirectory(configuration.getOutputDirectory()).getAbsolutePath(); + + String path = outputpath.substring(basedirpath.length() + 1); + + String newInclude = outpoutProtocol + ":" + path + ":" + nextWriter.getDefaultIncludes(); + + registerInclude(configuration, newInclude, selectedWriters); + + if (log.isDebugEnabled()) { + log.debug("<<<<<<<<<<<<<<<<< [" + include + "]"); + } + } + + public static Set<ModelFileWriter> filterWriterForModelType(Map<String, ModelFileWriter> universe, Class<? extends Model> modelType) { + Set<ModelFileWriter> result = new HashSet<ModelFileWriter>(); + for (ModelFileWriter w : universe.values()) { + if (w.acceptModel(modelType)) { + if (log.isDebugEnabled()) { + log.debug("writer [" + w + "] accept model " + modelType); + } + result.add(w); + } + } + return result; + } + + public static ModelFileWriter getWriterForInputProtocole(Set<ModelFileWriter> universe, String inputProtocol, Class<? extends Model> modelType) { + for (ModelFileWriter writer : universe) { + if (inputProtocol.equals(writer.getInputProtocol(modelType))) { + return writer; + } + } + return null; + } + + public static ModelFileWriter getWriterForInclude(Set<ModelFileWriter> universe, String include, Class<? extends Model> modelType) { + for (ModelFileWriter w : universe) { + if (w.acceptInclude(include)) { + return w; + } + } + return null; + } + + /** + * + */ + public static class ModelFileWriterEntry { + + /** + * + */ + protected File inputDirectory; + /** + * + */ + protected String includePattern; + + public ModelFileWriterEntry(File inputDirectory, String includePattern) { + this.inputDirectory = inputDirectory; + this.includePattern = includePattern; + } + + public String getIncludePattern() { + return includePattern; + } + + public File getInputDirectory() { + return inputDirectory; + } + + } + + /** + * + */ + public enum ModelFileWriterEntryType { + + ONLY_PROTOCOL_PATTERN(Pattern.compile("^([a-zA-Z]+)$")) { + + @Override + public ModelFileWriter getWriter(ModelFileWriterConfiguration configuration, String include, Matcher matcher) { + Set<ModelFileWriter> universe = configuration.getAvailableWriters(); + + String protocol = matcher.group(1).toLowerCase(); + ModelFileWriter writer = getWriterForInputProtocole(universe, protocol, configuration.getModelClass()); + if (writer == null) { + throw new IllegalArgumentException("could not find the writer named '" + protocol + "', use one of " + universe); + } + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "writer = (" + writer + ")"); + } + return writer; + } + + @Override + public ModelFileWriterEntry newEntry(ModelFileWriterConfiguration configuration, String include, Matcher matcher, ModelFileWriter writer) { + + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "detected pattern (" + name() + ")"); + } + + ModelFileWriterEntry writerEntry = new ModelFileWriterEntry( + new File(configuration.getBasedir(), writer.getDefaultInputDirectory()), + writer.getDefaultIncludes() + ); + return writerEntry; + } + }, + + NO_PROTOCOL_PATTERN(Pattern.compile("^([^:]+):([^:]+)$")) { + @Override + public ModelFileWriter getWriter(ModelFileWriterConfiguration configuration, String include, Matcher matcher) { + Set<ModelFileWriter> universe = configuration.getAvailableWriters(); + + Class<? extends Model> modelType = configuration.getModelClass(); + // with no protocol pattern + // pattern is discover from the includes + + // discover the writer from the given pattern + ModelFileWriter writer = getWriterForInclude(universe, include, modelType); + if (writer == null) { + throw new IllegalArgumentException("could not find a writer for include " + include); + } + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "writer = (" + writer + ")"); + } + return writer; + } + + @Override + public ModelFileWriterEntry newEntry(ModelFileWriterConfiguration configuration, String include, Matcher matcher, ModelFileWriter writer) { + // with no protocol pattern + // pattern is discover from the includes + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "detected pattern (" + name() + ")"); + } + + String inputPath = matcher.group(1); + String includes = matcher.group(2); + + ModelFileWriterEntry writerEntry = new ModelFileWriterEntry( + new File(configuration.getBasedir(), inputPath), + includes + ); + return writerEntry; + } + }, + + FULL_PATTERN(Pattern.compile("^(\\w+):([^:]+):([^:]+)$")) { + @Override + public ModelFileWriter getWriter(ModelFileWriterConfiguration configuration, String include, Matcher matcher) { + // with full pattern (protocol + directory + includes) + // pattern is discover from the includes + + Set<ModelFileWriter> universe = configuration.getAvailableWriters(); + + String protocol = matcher.group(1).toLowerCase(); + ModelFileWriter writer = getWriterForInputProtocole(universe, protocol, configuration.getModelClass()); + + if (writer == null) { + throw new IllegalArgumentException("could not find the writer named '" + protocol + "', use one of " + universe); + } + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "writer = (" + writer + ")"); + } + return writer; + } + + @Override + public ModelFileWriterEntry newEntry(ModelFileWriterConfiguration configuration, String include, Matcher matcher, ModelFileWriter writer) { + + // with full pattern (protocol + directory + includes) + // pattern is discover from the includes + if (log.isDebugEnabled()) { + log.debug("[" + include + "] " + "detected pattern (" + name() + ")"); + } + + String inputPath = matcher.group(2); + String includes = matcher.group(3); + ModelFileWriterEntry writerEntry = new ModelFileWriterEntry( + new File(configuration.getBasedir(), inputPath), + includes + ); + return writerEntry; + } + }; + + private final Pattern pattern; + + ModelFileWriterEntryType(Pattern pattern) { + this.pattern = pattern; + } + + public Pattern getPattern() { + return pattern; + } + + public Matcher getMatcher(String include) { + Matcher matcher = getPattern().matcher(include); + return matcher.matches() ? matcher : null; + } + + public abstract ModelFileWriterEntry newEntry(ModelFileWriterConfiguration configuration, String include, Matcher matcher, ModelFileWriter writer); + + public abstract ModelFileWriter getWriter(ModelFileWriterConfiguration configuration, String include, Matcher matcher); + } + + +} Property changes on: branches/eugene-2.0/eugene/src/main/java/org/nuiton/eugene/ModelFileWriterUtil.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ModelFileWriterUtilTest.java =================================================================== --- branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ModelFileWriterUtilTest.java (rev 0) +++ branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ModelFileWriterUtilTest.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,97 @@ +package org.nuiton.eugene; + +import org.junit.Assert; + +/** + * User: chemit + * Date: 25 nov. 2009 + * Time: 18:38:01 + */ + +public abstract class ModelFileWriterUtilTest extends Assert { +// /** +// * Les writers disponibles pour le test +// */ +// static Map<String, ToModelWriter> writers; +// +// @BeforeClass +// public static void beforeClass() throws Exception { +// writers = new HashMap<String, ToModelWriter>(); +// writers.put("test1", new ToModelWriter1()); +// writers.put("test2", new ToModelWriter2()); +// } +// +// @Before +// public void setUp() throws Exception { +// } +// +// @After +// public void tearDown() throws Exception { +// } +// +// @Test +// public void testConstructor() throws Exception { +// String pattern; +// ToModelWriterContext writerContext; +// ToModelWriter writer; +// writer = writers.get("test1"); +// +// pattern = "test1:"; +// writerContext = new ToModelWriterContext(basedir, pattern, ObjectModel.class, overwrite, writers); +// assertEquals(writerContext, pattern, "test1", writer.getDefaultInputDirectory(), writer.getDefaultIncludes()); +// +// pattern = "src/main/test1:**/*.test1"; +// writerContext = new ToModelWriterContext(basedir, pattern, ObjectModel.class, overwrite, writers); +// assertEquals(writerContext, pattern, "test1", "src/main/test1", "**/*.test1"); +// +// pattern = "test2:src/main/test1:**/*.test1"; +// writerContext = new ToModelWriterContext(basedir, pattern, ObjectModel.class, overwrite, writers); +// assertEquals(writerContext, pattern, "test2", "src/main/test1", "**/*.test1"); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude0() throws Exception { +// +// new ToModelWriterContext(basedir, ":", ObjectModel.class, overwrite, writers); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude1() throws Exception { +// +// new ToModelWriterContext(basedir, "test3:", ObjectModel.class, overwrite, writers); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude2() throws Exception { +// +// new ToModelWriterContext(basedir, "test1$", ObjectModel.class, overwrite, writers); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude3() throws Exception { +// +// new ToModelWriterContext(basedir, "test1$YO:", ObjectModel.class, overwrite, writers); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude4() throws Exception { +// +// new ToModelWriterContext(basedir, "test1$YO:yo", ObjectModel.class, overwrite, writers); +// } +// +// @Test(expected = IllegalArgumentException.class) +// public void testConstructorUnknownInclude5() throws Exception { +// +// new ToModelWriterContext(basedir, "test1$YO:yo:", ObjectModel.class, overwrite, writers); +// } + + +// protected void assertEquals(ToModelWriterContext writerContext, String pattern, String protocol, String inputDirectory, String includes) { +// assertNotNull(writerContext); +// assertEquals(pattern, writerContext.getPattern()); +// assertEquals(protocol, writerContext.getProtocol()); +// assertEquals(includes, writerContext.getIncludes()); +// assertEquals(inputDirectory, writerContext.getInputPath()); +// } + +} Property changes on: branches/eugene-2.0/eugene/src/test/java/org/nuiton/eugene/ModelFileWriterUtilTest.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Property changes on: branches/eugene-2.0/maven-eugene-plugin ___________________________________________________________________ Modified: svn:ignore - target target/* *.ipr *.iws .settings .classpath .project + target *.iml *.ipr *.iws .settings .classpath .project Modified: branches/eugene-2.0/maven-eugene-plugin/pom.xml =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/pom.xml 2009-11-27 10:00:00 UTC (rev 730) +++ branches/eugene-2.0/maven-eugene-plugin/pom.xml 2009-11-27 11:29:08 UTC (rev 731) @@ -83,6 +83,20 @@ </executions> </plugin> + <!-- expose new plexus components --> + <plugin> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-component-metadata</artifactId> + <executions> + <execution> + <goals> + <goal>generate-metadata</goal> + <!--<goal>merge-metadata</goal>--> + </goals> + </execution> + </executions> + </plugin> + </plugins> <pluginManagement> @@ -275,6 +289,12 @@ </taglets> </configuration> </plugin> + + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <version>1.4</version> + </plugin> + </plugins> </pluginManagement> @@ -484,5 +504,43 @@ </plugins> </reporting> + <profiles> + <profile> + <id>run-its</id> + <activation> + <property> + <name>performRedmineRelease</name> + <value>true</value> + </property> + </activation> + <build> + <plugins> + <plugin> + <artifactId>maven-invoker-plugin</artifactId> + <configuration> + <pomIncludes> + <pomInclude>**/pom.xml</pomInclude> + </pomIncludes> + <postBuildHookScript>verify</postBuildHookScript> + <localRepositoryPath>${basedir}/target/local-repo</localRepositoryPath> + <settingsFile>src/it/settings.xml</settingsFile> + <cloneProjectsTo>${project.build.directory}/its</cloneProjectsTo> + </configuration> + <executions> + <execution> + <id>integration-test</id> + <goals> + <goal>install</goal> + <goal>run</goal> + </goals> + <phase>integration-test</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> + </project> Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/README.txt =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/README.txt (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/README.txt 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,16 @@ +On teste ici le goal generate-model-files avec en include que des includes sans protocol +des writers connus : + +<execution> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>src/main/zargo:**/*.zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + </configuration> + <goals> + <goal>generate-model</goal> + </goals> +</execution> \ No newline at end of file Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/invoker.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/invoker.properties (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/invoker.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,21 @@ +# A comma or space separated list of goals/phases to execute, may +# specify an empty list to execute the default goal of the IT project +invoker.goals=clean generate-sources + +# Optionally, a list of goals to run during further invocations of Maven +#invoker.goals.2=${project.groupId}:${project.artifactId}:${project.version}:run + +# A comma or space separated list of profiles to activate +#invoker.profiles=run-all run-once + +# The value for the environment variable MAVEN_OPTS +#invoker.mavenOpts=-Dfile.encoding=UTF-16 -Xms32m -Xmx256m + +# Possible values are "fail-fast" (default), "fail-at-end" and "fail-never" +invoker.failureBehavior=fail-at-end + +# The expected result of the build, possible values are "success" (default) and "failure" +#invoker.buildResult=success + +# A boolean value controlling the -N flag, defaults to "false" +#invoker.nonRecursive=false Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/pom.xml =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/pom.xml (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/pom.xml 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,137 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> + + <groupId>org.nuiton.eugene.test</groupId> + <artifactId>testIncludeWithOnlyProtocol</artifactId> + <version>2.0.0</version> + + <dependencies> + <dependency> + <groupId>org.nuiton.eugene</groupId> + <artifactId>eugene</artifactId> + <version>${eugeneVersion}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-utils</artifactId> + <version>1.1.1</version> + <scope>compile</scope> + </dependency> + + </dependencies> + + + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> + + <name>EUGene Test :: testIncludeWithOnlyProtocol</name> + + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> + + <packaging>jar</packaging> + + <properties> + + <eugeneVersion>@pom.version@</eugeneVersion> + + <!-- default encoding --> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + + </properties> + + <build> + + <plugins> + + <plugin> + <groupId>org.nuiton.eugene</groupId> + <artifactId>maven-eugene-plugin</artifactId> + <version>${eugeneVersion}</version> + <executions> + <execution> + <id>Zargo to object model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>src/main/zargo:**/*.zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + <outputDirectory>target/generated-sources-zargo2ObjectModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Zargo to state model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>statemodel</modelType> + <includes> + <include>src/main/zargo:**/*.zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + <outputDirectory>target/generated-sources-zargo2StateModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Xmi to object model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>src/main/xmi:**/*.xmi</include> + </includes> + <fullPackagePath>org.nuiton.topia</fullPackagePath> + <outputDirectory>target/generated-sources-xmi2ObjectModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Xmi to state model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>statemodel</modelType> + <includes> + <include>src/main/xmi:**/*.xmi</include> + </includes> + <fullPackagePath>org.nuiton.topia</fullPackagePath> + <outputDirectory>target/generated-sources-xmi2StateModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.14</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> + +</project> + + Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.properties (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1 @@ +model.tagvalue.generateOperatorForDAOHelper=true \ No newline at end of file Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.xmi =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.xmi (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/xmi/topiatest.xmi 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,1334 @@ +<?xml version = '1.0' encoding = 'UTF-8' ?> +<XMI xmi.version = '1.2' xmlns:UML = 'org.omg.xmi.namespace.UML' timestamp = 'Mon Oct 19 15:56:54 CEST 2009'> + <XMI.header> <XMI.documentation> + <XMI.exporter>ArgoUML (using Netbeans XMI Writer version 1.0)</XMI.exporter> + <XMI.exporterVersion>0.28.1(6) revised on $Date: 2007-05-12 08:08:08 +0200 (Sat, 12 May 2007) $ </XMI.exporterVersion> + </XMI.documentation> + <XMI.metamodel xmi.name="UML" xmi.version="1.4"/></XMI.header> + <XMI.content> + <UML:Model xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000077B' + name = 'xmiTopiaTest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E3' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>1.2</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E4'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:Namespace.ownedElement> + <UML:TagDefinition xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E4' + name = 'version' isSpecification = 'false' tagType = 'String'> + <UML:TagDefinition.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E6'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E5' + lower = '0' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:TagDefinition.multiplicity> + </UML:TagDefinition> + <UML:Stereotype xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7' + name = 'entity' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090B' + name = 'org' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090C' + name = 'nuiton' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090D' + name = 'topiatest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA' + name = 'Personne' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001020'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF9' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFC' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB0' + name = 'otherNames' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB8'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB7' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE' + name = 'Employe' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E2'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D54' + name = 'salary' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D59' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0' + name = 'Company' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011BD' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011C5'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011C4' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008F9' + name = 'Address' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000903' + name = 'city' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF6' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CE8' + name = 'adress' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF3'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF2' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FB' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FC' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FE' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FF' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000900'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000901' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008F9'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Generalization xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E2' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Generalization.parent> + </UML:Generalization> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFE' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFF' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102B' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D02' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001029' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B' + name = 'Department' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D25' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D29'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D28' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A' + name = 'Product' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D37' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D3F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D3E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5B' + name = 'Store' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D7D' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D83'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D82' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D40' + name = 'Type' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4D' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D53'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D52' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:AssociationClass xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D65' + name = 'Bill' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D66' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D89'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D88' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D69' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D8D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D8C' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D6D' + name = 'cost' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D75'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D74' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D76' + name = 'date' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D7A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D79' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000085F'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:AssociationClass> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D18' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D19' + name = 'lead' visibility = 'public' isSpecification = 'false' isNavigable = 'false' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D24'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D23' + lower = '0' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1C' + name = 'leader' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0D' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D10' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D11' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D17'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D16' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2C' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2D' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2E'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2F' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D30' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D36'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D35' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D42' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D43' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4B' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D46' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D47'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D48' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D40'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Package xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E71' + name = 'beangen' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72' + name = 'Voiture' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'true' isActive = 'false'> + <UML:ModelElement.clientDependency> + <UML:Abstraction xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E77'/> + </UML:ModelElement.clientDependency> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA1' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>Doc for BeanA</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition href = 'http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7C' + name = 'immatriculation' visibility = 'public' isSpecification = 'false' + ownerScope = 'instance' changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA2' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>attrA of BeanA</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition href = 'http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7F' + name = 'modele' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E80'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E81' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE6' + name = 'proprietaire' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE8' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E75' + name = 'Roue' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E85' + name = 'mount' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E86' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086B'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E87' + name = 'getModel' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E88' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:Parameter.type> + </UML:Parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E89' + name = 'id' isSpecification = 'false'> + <UML:Parameter.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Abstraction xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E77' + isSpecification = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E78'/> + </UML:ModelElement.stereotype> + <UML:Dependency.client> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:Dependency.client> + <UML:Dependency.supplier> + <UML:Interface xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E76'/> + </UML:Dependency.supplier> + </UML:Abstraction> + <UML:Interface xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E76' + name = 'Vehicule' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false'> + <UML:Classifier.feature> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7A' + name = 'start' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7B' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086B'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Interface> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8A' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8B' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED2'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED1' + lower = '4' upper = '4'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E75'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAB' + name = 'RelationDTO' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAC' + name = 'idCompany' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAE' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAF' + name = 'idDepartement' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB0'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB1' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBB' + name = 'dateDebut' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBC'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBD' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000085F'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9' + name = 'PersonneDTO' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.clientDependency> + <UML:Dependency xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAA'/> + </UML:ModelElement.clientDependency> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74'/> + </UML:ModelElement.stereotype> + <UML:Namespace.ownedElement> + <UML:Dependency xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAA' + isSpecification = 'false'> + <UML:Dependency.client> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9'/> + </UML:Dependency.client> + <UML:Dependency.supplier> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Dependency.supplier> + </UML:Dependency> + </UML:Namespace.ownedElement> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB2' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB3' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBA'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB9' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAB'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB6' + name = 'person' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB8' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED3' + name = 'Siege' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDB' + name = 'noSerie' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDC'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDD' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED4' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED5' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE5'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE4' + lower = '1' upper = '4'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED3'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED8' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED9'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDA' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Package xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100A' + name = 'deletetest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B' + name = 'Contact2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001019' + name = 'contactValue' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101B' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101C' + name = 'type' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Operation xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102F' + name = 'findAllByCompany' visibility = 'public' isSpecification = 'false' + ownerScope = 'instance' isQuery = 'false' concurrency = 'sequential' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001034'/> + </UML:ModelElement.stereotype> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001030' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:Class xmi.idref = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001032'/> + </UML:Parameter.type> + </UML:Parameter> + <UML:Parameter xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001033' + name = 'company' isSpecification = 'false'> + <UML:Parameter.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100C' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100D' + name = 'contacts' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001026'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001025' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001010' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001028'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001027' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001017' + name = 'Telephone2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001018'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001021' + name = 'prefix' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001022'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001023' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001024' + name = 'country' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001025'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001026' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001018' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001017'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B'/> + </UML:Generalization.parent> + </UML:Generalization> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F' + name = 'Party2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + </UML:Class> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Generalization xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001020' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F'/> + </UML:Generalization.parent> + </UML:Generalization> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121D' + name = 'topia' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121E' + name = 'test' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121F' + name = 'entities' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001220' + name = 'Person' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001228' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001229'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122A' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122B' + name = 'firstname' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221' + name = 'Pet' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001222' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001223'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001224' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001225' + name = 'type' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001226'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001227' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001237' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001238' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001239'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123A' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001220'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123B' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123E' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102A' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102B' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001030' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001029'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001029' + name = 'Race' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001031' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001032'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001033' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73' + name = 'bean' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74' + name = 'dto' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E78' + name = 'realize' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Abstraction</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Package xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001031' + name = 'java.util' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001032' + name = 'Set<Contact2>' visibility = 'public' isSpecification = 'false' + isRoot = 'false' isLeaf = 'false' isAbstract = 'false' isActive = 'false'/> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Stereotype xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001034' + name = 'dao' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Operation</UML:Stereotype.baseClass> + </UML:Stereotype> + </UML:Namespace.ownedElement> + </UML:Model> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001233'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001234' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </XMI.content> +</XMI> Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.properties (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1 @@ +model.tagvalue.generateOperatorForDAOHelper=true \ No newline at end of file Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.zargo =================================================================== (Binary files differ) Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/src/main/zargo/topiatest.zargo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/verify.groovy =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/verify.groovy (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithNoProtocol/verify.groovy 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,42 @@ + + +// Zargo to object model + +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi/topiatest.xmi').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models/topiatest.objectmodel').exists(); + +// Zargo to state model + +assert new File(basedir, 'target/generated-sources-zargo2StateModel').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi/topiatest.xmi').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models/topiatest.statemodel').exists(); + +// Xmi to object model + +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models/topiatest.objectmodel').exists(); + + +// Xmi to state model + +assert new File(basedir, 'target/generated-sources-xmi2StateModel').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models/topiatest.statemodel').exists(); + +return true; + Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/README.txt =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/README.txt (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/README.txt 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,16 @@ +On teste ici le goal generate-model-files avec en include que des includes simplifiés n'utilisant que les noms +des writers connus : + +<execution> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + </configuration> + <goals> + <goal>generate-model</goal> + </goals> +</execution> \ No newline at end of file Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/invoker.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/invoker.properties (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/invoker.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,21 @@ +# A comma or space separated list of goals/phases to execute, may +# specify an empty list to execute the default goal of the IT project +invoker.goals=clean generate-sources + +# Optionally, a list of goals to run during further invocations of Maven +#invoker.goals.2=${project.groupId}:${project.artifactId}:${project.version}:run + +# A comma or space separated list of profiles to activate +#invoker.profiles=run-all run-once + +# The value for the environment variable MAVEN_OPTS +#invoker.mavenOpts=-Dfile.encoding=UTF-16 -Xms32m -Xmx256m + +# Possible values are "fail-fast" (default), "fail-at-end" and "fail-never" +invoker.failureBehavior=fail-at-end + +# The expected result of the build, possible values are "success" (default) and "failure" +#invoker.buildResult=success + +# A boolean value controlling the -N flag, defaults to "false" +#invoker.nonRecursive=false Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/pom.xml =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/pom.xml (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/pom.xml 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,137 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> + + <groupId>org.nuiton.eugene.test</groupId> + <artifactId>testIncludeWithOnlyProtocol</artifactId> + <version>2.0.0</version> + + <dependencies> + <dependency> + <groupId>org.nuiton.eugene</groupId> + <artifactId>eugene</artifactId> + <version>${eugeneVersion}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-utils</artifactId> + <version>1.1.1</version> + <scope>compile</scope> + </dependency> + + </dependencies> + + + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> + + <name>EUGene Test :: testIncludeWithOnlyProtocol</name> + + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> + + <packaging>jar</packaging> + + <properties> + + <eugeneVersion>@pom.version@</eugeneVersion> + + <!-- default encoding --> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + + </properties> + + <build> + + <plugins> + + <plugin> + <groupId>org.nuiton.eugene</groupId> + <artifactId>maven-eugene-plugin</artifactId> + <version>${eugeneVersion}</version> + <executions> + <execution> + <id>Zargo to object model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + <outputDirectory>target/generated-sources-zargo2ObjectModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Zargo to state model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>statemodel</modelType> + <includes> + <include>zargo</include> + </includes> + <fullPackagePath>org.nuiton.topia.test.entities</fullPackagePath> + <outputDirectory>target/generated-sources-zargo2StateModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Xmi to object model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>objectmodel</modelType> + <includes> + <include>xmi</include> + </includes> + <fullPackagePath>org.nuiton.topia</fullPackagePath> + <outputDirectory>target/generated-sources-xmi2ObjectModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + <execution> + <id>Xmi to state model</id> + <phase>generate-sources</phase> + <configuration> + <modelType>statemodel</modelType> + <includes> + <include>xmi</include> + </includes> + <fullPackagePath>org.nuiton.topia</fullPackagePath> + <outputDirectory>target/generated-sources-xmi2StateModel</outputDirectory> + </configuration> + <goals> + <goal>generate-model-files</goal> + </goals> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <version>1.2.14</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> + +</project> + + Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.properties (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1 @@ +model.tagvalue.generateOperatorForDAOHelper=true \ No newline at end of file Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.xmi =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.xmi (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.xmi 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,1334 @@ +<?xml version = '1.0' encoding = 'UTF-8' ?> +<XMI xmi.version = '1.2' xmlns:UML = 'org.omg.xmi.namespace.UML' timestamp = 'Mon Oct 19 15:56:54 CEST 2009'> + <XMI.header> <XMI.documentation> + <XMI.exporter>ArgoUML (using Netbeans XMI Writer version 1.0)</XMI.exporter> + <XMI.exporterVersion>0.28.1(6) revised on $Date: 2007-05-12 08:08:08 +0200 (Sat, 12 May 2007) $ </XMI.exporterVersion> + </XMI.documentation> + <XMI.metamodel xmi.name="UML" xmi.version="1.4"/></XMI.header> + <XMI.content> + <UML:Model xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000077B' + name = 'xmiTopiaTest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E3' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>1.2</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E4'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:Namespace.ownedElement> + <UML:TagDefinition xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E4' + name = 'version' isSpecification = 'false' tagType = 'String'> + <UML:TagDefinition.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E6'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E5' + lower = '0' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:TagDefinition.multiplicity> + </UML:TagDefinition> + <UML:Stereotype xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7' + name = 'entity' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090B' + name = 'org' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090C' + name = 'nuiton' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:000000000000090D' + name = 'topiatest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA' + name = 'Personne' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001020'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF9' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFC' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB0' + name = 'otherNames' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB8'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-67f6b63e:12187ee3a69:-8000:0000000000000EB7' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE' + name = 'Employe' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E2'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D54' + name = 'salary' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D59' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0' + name = 'Company' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011BD' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011C5'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000011C4' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008F9' + name = 'Address' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000903' + name = 'city' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF6' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CE8' + name = 'adress' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF3'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CF2' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FB' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FC' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FE' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008FF' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000900'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000901' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008F9'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Generalization xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E2' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Generalization.parent> + </UML:Generalization> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFE' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000CFF' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102B' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D02' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001029' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B' + name = 'Department' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D25' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D29'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D28' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A' + name = 'Product' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D37' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D3F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D3E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5B' + name = 'Store' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D7D' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D83'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D82' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D40' + name = 'Type' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4D' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D53'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D52' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:AssociationClass xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D65' + name = 'Bill' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D66' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D89'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D88' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D69' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D8D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D8C' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D5B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D6D' + name = 'cost' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D75'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D74' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D76' + name = 'date' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D7A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D79' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000085F'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:AssociationClass> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D18' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D19' + name = 'lead' visibility = 'public' isSpecification = 'false' isNavigable = 'false' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D24'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D23' + lower = '0' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1C' + name = 'leader' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D1E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DE'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0D' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D10' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D11' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D17'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D16' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2C' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2D' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2E'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2F' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D0B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D30' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D36'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D35' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D42' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D43' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D4B' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D46' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D47'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D48' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D40'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Package xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E71' + name = 'beangen' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72' + name = 'Voiture' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'true' isActive = 'false'> + <UML:ModelElement.clientDependency> + <UML:Abstraction xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E77'/> + </UML:ModelElement.clientDependency> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA1' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>Doc for BeanA</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition href = 'http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7C' + name = 'immatriculation' visibility = 'public' isSpecification = 'false' + ownerScope = 'instance' changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:ModelElement.taggedValue> + <UML:TaggedValue xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA2' + isSpecification = 'false'> + <UML:TaggedValue.dataValue>attrA of BeanA</UML:TaggedValue.dataValue> + <UML:TaggedValue.type> + <UML:TagDefinition href = 'http://argouml.org/profiles/uml14/default-uml14.xmi#.:000000000000087C'/> + </UML:TaggedValue.type> + </UML:TaggedValue> + </UML:ModelElement.taggedValue> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7F' + name = 'modele' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E80'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E81' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE6' + name = 'proprietaire' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE8' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E75' + name = 'Roue' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E85' + name = 'mount' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E86' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086B'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E87' + name = 'getModel' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E88' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:0000000000000D2A'/> + </UML:Parameter.type> + </UML:Parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E89' + name = 'id' isSpecification = 'false'> + <UML:Parameter.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Abstraction xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E77' + isSpecification = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E78'/> + </UML:ModelElement.stereotype> + <UML:Dependency.client> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:Dependency.client> + <UML:Dependency.supplier> + <UML:Interface xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E76'/> + </UML:Dependency.supplier> + </UML:Abstraction> + <UML:Interface xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E76' + name = 'Vehicule' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false'> + <UML:Classifier.feature> + <UML:Operation xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7A' + name = 'start' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + isQuery = 'false' concurrency = 'sequential' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E7B' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086B'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Interface> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8A' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8B' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E8E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED2'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED1' + lower = '4' upper = '4'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E75'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAB' + name = 'RelationDTO' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAC' + name = 'idCompany' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAD'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAE' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAF' + name = 'idDepartement' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB0'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB1' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBB' + name = 'dateDebut' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBC'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBD' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000085F'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9' + name = 'PersonneDTO' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.clientDependency> + <UML:Dependency xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAA'/> + </UML:ModelElement.clientDependency> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74'/> + </UML:ModelElement.stereotype> + <UML:Namespace.ownedElement> + <UML:Dependency xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAA' + isSpecification = 'false'> + <UML:Dependency.client> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9'/> + </UML:Dependency.client> + <UML:Dependency.supplier> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Dependency.supplier> + </UML:Dependency> + </UML:Namespace.ownedElement> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB2' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB3' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EBA'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB9' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EAB'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB6' + name = 'person' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB7'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EB8' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EA9'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED3' + name = 'Siege' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDB' + name = 'noSerie' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDC'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDD' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:DataType href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:000000000000086C'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED4' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED5' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE5'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EE4' + lower = '1' upper = '4'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED3'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED8' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000ED9'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000EDA' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E72'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Package xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100A' + name = 'deletetest' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B' + name = 'Contact2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001019' + name = 'contactValue' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101A'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101B' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101C' + name = 'type' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101D'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101E' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Operation xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:000000000000102F' + name = 'findAllByCompany' visibility = 'public' isSpecification = 'false' + ownerScope = 'instance' isQuery = 'false' concurrency = 'sequential' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001034'/> + </UML:ModelElement.stereotype> + <UML:BehavioralFeature.parameter> + <UML:Parameter xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001030' + name = 'return' isSpecification = 'false' kind = 'return'> + <UML:Parameter.type> + <UML:Class xmi.idref = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001032'/> + </UML:Parameter.type> + </UML:Parameter> + <UML:Parameter xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001033' + name = 'company' isSpecification = 'false'> + <UML:Parameter.type> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E0'/> + </UML:Parameter.type> + </UML:Parameter> + </UML:BehavioralFeature.parameter> + </UML:Operation> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100C' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100D' + name = 'contacts' visibility = 'public' isSpecification = 'false' isNavigable = 'true' + ordering = 'unordered' aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001026'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001025' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001010' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001028'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001027' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001017' + name = 'Telephone2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:GeneralizableElement.generalization> + <UML:Generalization xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001018'/> + </UML:GeneralizableElement.generalization> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001021' + name = 'prefix' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001022'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001023' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001024' + name = 'country' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001025'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001026' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Generalization xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001018' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001017'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000100B'/> + </UML:Generalization.parent> + </UML:Generalization> + <UML:Class xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F' + name = 'Party2' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + </UML:Class> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Generalization xmi.id = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:0000000000001020' + isSpecification = 'false'> + <UML:Generalization.child> + <UML:Class xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008DA'/> + </UML:Generalization.child> + <UML:Generalization.parent> + <UML:Class xmi.idref = '-64--88-99-15-7b62aac4:121aaa56ef3:-8000:000000000000101F'/> + </UML:Generalization.parent> + </UML:Generalization> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121D' + name = 'topia' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121E' + name = 'test' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Package xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000121F' + name = 'entities' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001220' + name = 'Person' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001228' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001229'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122A' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122B' + name = 'firstname' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000122D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Class xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221' + name = 'Pet' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001222' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001223'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001224' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + <UML:Attribute xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001225' + name = 'type' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001226'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001227' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + <UML:Association xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001237' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001238' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001239'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123A' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001220'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123B' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123E' + lower = '0' upper = '-1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Association xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102A' + name = '' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' isAbstract = 'false'> + <UML:Association.connection> + <UML:AssociationEnd xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102B' + visibility = 'public' isSpecification = 'false' isNavigable = 'false' ordering = 'unordered' + aggregation = 'composite' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1-13652238:1219c622604:-8000:0000000000001221'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + <UML:AssociationEnd xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102E' + visibility = 'public' isSpecification = 'false' isNavigable = 'true' ordering = 'unordered' + aggregation = 'none' targetScope = 'instance' changeability = 'changeable'> + <UML:AssociationEnd.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:000000000000102F'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001030' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:AssociationEnd.multiplicity> + <UML:AssociationEnd.participant> + <UML:Class xmi.idref = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001029'/> + </UML:AssociationEnd.participant> + </UML:AssociationEnd> + </UML:Association.connection> + </UML:Association> + <UML:Class xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001029' + name = 'Race' visibility = 'public' isSpecification = 'false' isRoot = 'false' + isLeaf = 'false' isAbstract = 'false' isActive = 'false'> + <UML:ModelElement.stereotype> + <UML:Stereotype xmi.idref = '127-0-0-1-3f03561c:11667f969c5:-8000:00000000000008E7'/> + </UML:ModelElement.stereotype> + <UML:Classifier.feature> + <UML:Attribute xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001031' + name = 'name' visibility = 'public' isSpecification = 'false' ownerScope = 'instance' + changeability = 'changeable' targetScope = 'instance'> + <UML:StructuralFeature.multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001032'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1--7876194c:121c66e8e17:-8000:0000000000001033' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </UML:StructuralFeature.multiplicity> + <UML:StructuralFeature.type> + <UML:Class href = 'http://argouml.org/profiles/uml14/default-java.xmi#.:0000000000000859'/> + </UML:StructuralFeature.type> + </UML:Attribute> + </UML:Classifier.feature> + </UML:Class> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E73' + name = 'bean' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E74' + name = 'dto' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Stereotype xmi.id = '-64--88-99-15-6093e433:1215d2d04f2:-8000:0000000000000E78' + name = 'realize' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Abstraction</UML:Stereotype.baseClass> + </UML:Stereotype> + <UML:Package xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001031' + name = 'java.util' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Namespace.ownedElement> + <UML:Class xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001032' + name = 'Set<Contact2>' visibility = 'public' isSpecification = 'false' + isRoot = 'false' isLeaf = 'false' isAbstract = 'false' isActive = 'false'/> + </UML:Namespace.ownedElement> + </UML:Package> + <UML:Stereotype xmi.id = '-64--88-99-15--164a0c3b:121af97fc30:-8000:0000000000001034' + name = 'dao' isSpecification = 'false' isRoot = 'false' isLeaf = 'false' + isAbstract = 'false'> + <UML:Stereotype.baseClass>Operation</UML:Stereotype.baseClass> + </UML:Stereotype> + </UML:Namespace.ownedElement> + </UML:Model> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001233'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:0000000000001234' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + <UML:Multiplicity xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123C'> + <UML:Multiplicity.range> + <UML:MultiplicityRange xmi.id = '127-0-0-1-13652238:1219c622604:-8000:000000000000123D' + lower = '1' upper = '1'/> + </UML:Multiplicity.range> + </UML:Multiplicity> + </XMI.content> +</XMI> Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.zargo =================================================================== (Binary files differ) Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/src/main/xmi/topiatest.zargo ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/verify.groovy =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/verify.groovy (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/generate-model-files/testIncludeWithOnlyProtocol/verify.groovy 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,42 @@ + + +// Zargo to object model + +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/xmi/topiatest.xmi').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2ObjectModel/models/topiatest.objectmodel').exists(); + +// Zargo to state model + +assert new File(basedir, 'target/generated-sources-zargo2StateModel').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/xmi/topiatest.xmi').exists(); + +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-zargo2StateModel/models/topiatest.statemodel').exists(); + +// Xmi to object model + +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-xmi2ObjectModel/models/topiatest.objectmodel').exists(); + + +// Xmi to state model + +assert new File(basedir, 'target/generated-sources-xmi2StateModel').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models/topiatest.properties').exists(); +assert new File(basedir, 'target/generated-sources-xmi2StateModel/models/topiatest.statemodel').exists(); + +return true; + Added: branches/eugene-2.0/maven-eugene-plugin/src/it/settings.xml =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/it/settings.xml (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/it/settings.xml 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +--> + +<settings> + + <profiles> + <profile> + <id>it-repo</id> + <activation> + <activeByDefault>true</activeByDefault> + </activation> + <repositories> + <repository> + <id>local.central</id> + <url>file:///@localRepository@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </repository> + </repositories> + <pluginRepositories> + <pluginRepository> + <id>local.central</id> + <url>file:///@localRepository@</url> + <releases> + <enabled>true</enabled> + </releases> + <snapshots> + <enabled>true</enabled> + </snapshots> + </pluginRepository> + </pluginRepositories> + </profile> + </profiles> +</settings> Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AbstractEugeneMojo.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AbstractEugeneMojo.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AbstractEugeneMojo.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,141 @@ +package org.nuiton.eugene.plugin; + +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.settings.Settings; +import org.nuiton.eugene.models.Model; +import org.nuiton.plugin.AbstractPlugin; + +import java.util.Map; + +/** + * User: chemit + * Date: 23 nov. 2009 + * Time: 20:19:35 + */ +public abstract class AbstractEugeneMojo extends AbstractPlugin { + + /** + * Maven project. + * + * @description Dépendance du projet. + * @parameter default-value="${project}" + * @readonly + * @since 2.0.0 + */ + protected MavenProject project; + /** + * @description le settings (pour obtenir le mode offline) + * @parameter default-value="${settings}" + * @readonly + * @since 2.0.0 + */ + protected Settings settings; + /** + * Ecrase les fichiers générés. + * + * @parameter expression="${eugene.overwrite}" default-value="false" + * @since 2.0.0 + */ + protected boolean overwrite; + /** + * Pour activer le mode verbeux. + * + * @parameter expression="${eugene.verbose}" default-value="${maven.verbose}" + * @since 2.0.0 + */ + protected boolean verbose; + /** + * Encoding to be used for generation of files. + * + * @parameter expression="${eugene.encoding}" default-value="${project.build.sourceEncoding}" + * @since 2.0.0 + */ + protected String encoding; + /** + * A flag to mark the mojo to be used in a test phase. This will permits to add generated sources in test compile roots. + * + * @parameter expression="${eugene.testPhase}" default-value="false" + * @since 2.0.0 + */ + protected boolean testPhase; + /** + * The type of model to be used. + * + * @parameter expression="${eugene.modelType}" + * @required + * @since 2.0.0 + */ + protected String modelType; + + + protected Class<? extends Model> modelClass; + + /** + * All available models + * + * @component role="org.nuiton.eugene.models.Model" + */ + protected Map<String, Model> _models; + + @Override + protected boolean init() throws Exception { + + // on recupere le fqn du model à traiter via le container plexus (plus pratique dans ce cas où on veut + // pouvoir associé un nom à un type de service). + Model model = _models.get(modelType.trim().toLowerCase()); + if (model == null) { + throw new MojoExecutionException("No modelType named '" + modelType + "', use one of " + _models.keySet()); + } + modelClass = model.getClass(); + return true; + } + + + @Override + public MavenProject getProject() { + return project; + } + + public void setProject(MavenProject project) { + this.project = project; + } + + @Override + public boolean isVerbose() { + return verbose; + } + + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + public String getEncoding() { + return encoding; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public boolean isOverwrite() { + return overwrite; + } + + public void setOverwrite(boolean overwrite) { + this.overwrite = overwrite; + } + + public Settings getSettings() { + return settings; + } + + public void setSettings(Settings settings) { + this.settings = settings; + } + + public boolean isOffline() { + return settings.isOffline(); + } + +} Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/AbstractEugeneMojo.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java 2009-11-27 10:00:00 UTC (rev 730) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/EugeneAbstractMojo.java 2009-11-27 11:29:08 UTC (rev 731) @@ -83,7 +83,7 @@ /** * - * Note : l'objet peut etre {@null} si la configuration ne definit + * Note : l'objet peut etre {@code null} si la configuration ne definit * pas la propriété associées dans l'implentation. * <p/> * Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/GeneratateModelFilesMojo.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/GeneratateModelFilesMojo.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/GeneratateModelFilesMojo.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,323 @@ +package org.nuiton.eugene.plugin; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.nuiton.eugene.ModelFileWriter; +import org.nuiton.eugene.ModelFileWriterConfiguration; +import org.nuiton.eugene.ModelFileWriterUtil; +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.plugin.writer.BaseModelFileWriter; +import org.nuiton.eugene.plugin.writer.BaseXmiToModelFileWriter; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.*; + +/** + * User: chemit + * Date: 24 nov. 2009 + * Time: 00:22:37 + * + * @goal generate-model-files + * @projectRequired true + * @requiresDependencyResolution compile + */ +public class GeneratateModelFilesMojo extends AbstractEugeneMojo implements ModelFileWriterConfiguration { + + /** + * Inputs files to used to generate the required model files. + * </p> + * An include has the following pattern : + * <pre> + * writer: + * </pre> + * when you want to use a specific writer with his default io values. + * <p/> + * Can also write : + * <pre> + * [writer:]directory:includes + * </pre> + * where {@code includes} is the pattern to find files from the directory given and must be terminated by the extension + * of files. + * <p/> + * Specifying the {@code writer} can be usefull when you want to use a writer for an unknown extension + * by any writer. + * <p/> + * Example : + * <pre> + * <includes> + * <include>zargo:<include> + * <include>src/main/xmi2:**\/*.zargo<include> + * <include>zargo:src/main/xmi:**\/*.zargo2<include> + * </includes> + * </pre> + * + * @parameter expression="${eugene.includes}" + * @required + * @since 2.0.0 + */ + protected String[] includes; + /** + * Where to generate files. + * + * @parameter expression="${eugene.outputDirectory}" default-value="target/generated-sources" + * @required + * @since 2.0.0 + */ + protected File outputDirectory; + /** + * Properties to pass to writer. + * + * @parameter + * @since 2.0.0 + */ + protected Map<String, Object> properties; + /** + * Ne génère rien, analyse juste la configuration. + * + * @parameter expression="${eugene.dryRun}" default-value="false" + * @since 2.0.0 + */ + protected boolean dryRun; + /** + * Nom du paquetage pour les fichiers générés + * + * @parameter expression="${generator.fullPackagePath}" default-value="${project.groupId}.${project.artifactId}" + * @since 2.0.0 + */ + protected String fullPackagePath; + /** + * Nom du paquetage à générer + * + * @parameter expression="${generator.extractedPackages}" default-value="${project.groupId}.${project.artifactId}" + * @since 2.0.0 + */ + protected String extractedPackages; + /** + * Nom du resolver a utiliser + * + * @parameter expression="${generator.resolver}" default-value="org.nuiton.util.ResourceResolver" + * @since 2.0.0 + */ + protected String resolver; + /** + * An extra directory to be added to the classpath. + * + * @parameter expression="${eugene.extraClassPathDirectory}" + * @since 2.0.0 + */ + protected File extraClassPathDirectory; + + /** + * All available writers + * + * @component role="org.nuiton.eugene.ModelFileWriter" + */ + protected Map<String, ModelFileWriter> writers; + + /** + * All available writers for the given {@link #getModelClass()} + */ + protected Set<ModelFileWriter> availableWriters; + + /** + * Writers to process + */ + protected List<ModelFileWriter> plan; + + @Override + protected boolean init() throws Exception { + boolean b = super.init(); + if (b) { + if (includes.length == 0) { + throw new MojoExecutionException("Must specify something to include using the includes property"); + } + + availableWriters = ModelFileWriterUtil.filterWriterForModelType(writers, getModelClass()); + + if (availableWriters.isEmpty()) { + throw new MojoExecutionException("Could not find any writer in class-path."); + } + + for (ModelFileWriter writer : availableWriters) { + if (writer instanceof BaseModelFileWriter) { + ((BaseModelFileWriter) writer).setLog(getLog()); + } + } + + plan = new ArrayList<ModelFileWriter>(); + + // first pass to detect top level writers + for (String include : includes) { + + getLog().info("Register include : " + include); + ModelFileWriterUtil.registerInclude(this, include, plan); + } + + if (properties == null) { + properties = new TreeMap<String, Object>(); + } + } + return b; + } + + @Override + protected void doAction() throws Exception { + if (dryRun) { + getLog().warn("dryRun property is set, no file will be generated."); + } + try { + // transfert to properties + + ClassLoader loader = fixClassLoader(); + + properties.put(BaseModelFileWriter.PROP_CLASS_LOADER, loader); + properties.put(BaseXmiToModelFileWriter.PROP_FULL_PACKAGE_PATH, fullPackagePath); + //properties.put("extractedPackages", extractedPackages); + properties.put(BaseXmiToModelFileWriter.PROP_RESOLVER, resolver); + + // launch writers in incoming order of dicovering of them + for (ModelFileWriter writer : plan) { + int size = writer.getEntries().size(); + if (size == 1) { + getLog().info("Process phase [" + writer.getInputProtocol() + "] for one entry."); + } else { + getLog().info("Process phase [" + writer.getInputProtocol() + "] for " + size + " entries."); + } + if (dryRun || isVerbose()) { + for (ModelFileWriterUtil.ModelFileWriterEntry entry : writer.getEntries()) { + getLog().info(" entry : " + entry.getInputDirectory() + " - " + entry.getIncludePattern()); + } + if (dryRun) { + continue; + } + } + if (getLog().isDebugEnabled()) { + getLog().debug("Generating files and copying resources..."); + } + + writer.generate(this); + + } + } finally { + // always clear everything to avoid side-effects in goal is invoked more than once + properties.clear(); + for (ModelFileWriter writer : plan) { + writer.clear(); + } + plan.clear(); + } + } + + @Override + public File getOutputDirectory() { + return outputDirectory; + } + + @Override + public Map<String, Object> getProperties() { + return properties; + } + + @Override + public Set<ModelFileWriter> getAvailableWriters() { + return availableWriters; + } + + @Override + public Class<? extends Model> getModelClass() { + return modelClass; + } + + @Override + public File getBasedir() { + return getProject().getBasedir(); + } + + /** + * Prepare le classLoader a utiliser dans le generateur. + * <p/> + * Si un {@link #extraClassPathDirectory} a été renseigné, il est rajouté. + * <p/> + * Si des références à des sibling modules, ils seront rajoutés aussi. + * + * @return le class loader modifie + * @throws MojoExecutionException if any pb + */ + protected ClassLoader fixClassLoader() throws MojoExecutionException { + Set<String> urlsAsString = new HashSet<String>(); + List<URL> urls = new ArrayList<URL>(); + try { + ClassLoader loader; + if (extraClassPathDirectory != null) { + if (verbose) { + getLog().info("Add extra directory in generator's classLoader : " + extraClassPathDirectory); + } + addDirectoryToUrlsList(extraClassPathDirectory, urls, urlsAsString); + } + if (project.getProjectReferences() != null) { + // this case is for multi-module when calling from a parent module + for (Object o : project.getProjectReferences().entrySet()) { + Map.Entry<?, ?> entry = (Map.Entry<?, ?>) o; + MavenProject relatedProject = (MavenProject) entry.getValue(); + if (verbose) { + getLog().info("Add project reference in generator's classLoader : '" + relatedProject.getArtifact() + "'"); + } + //TODO il faudrait peut-etre aussi ajouter les dependances ? + addDirectoryToUrlsList(relatedProject.getArtifact().getFile(), urls, urlsAsString); + } + } + if (!project.getArtifacts().isEmpty()) { + // this is a special case when artifacts were resolved (for example in site phase) + if (verbose) { + getLog().info("Use resolved artifacts to build class-path"); + } + for (Object o : project.getArtifacts()) { + Artifact a = (Artifact) o; + if (!a.getScope().equals("provided")) { + addDirectoryToUrlsList(a.getFile(), urls, urlsAsString); + } + } + } + // we ask to add the directory in classloader + loader = getClass().getClassLoader(); + if (getLog().isDebugEnabled()) { + getLog().info("original classloader " + loader); + } + if (loader instanceof URLClassLoader) { + // on reinjecte les urls de loader de base + // car sinon on risque de ne pas retrouver les resources... + for (URL u : ((URLClassLoader) loader).getURLs()) { + addUrlToUrlsList(u, urls, urlsAsString); + if (getLog().isDebugEnabled()) { + getLog().debug("original cp entry: " + u); + } + } + // et on force l'utilisation du classloader parent + // s'il existe + if (loader.getParent() != null) { + loader = loader.getParent(); + } + } + if (!urls.isEmpty()) { + loader = new URLClassLoader(urls.toArray(new URL[urls.size()]), + loader); + } + if (getLog().isDebugEnabled()) { + for (URL u : urls) { + getLog().debug("cp entry: " + u); + } + } + return loader; + } catch (MalformedURLException e) { + throw new MojoExecutionException(e.getMessage()); + } finally { + urls.clear(); + urlsAsString.clear(); + } + + } +} Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/GeneratateModelFilesMojo.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-11-27 10:00:00 UTC (rev 730) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/Xmi2Model.java 2009-11-27 11:29:08 UTC (rev 731) @@ -293,7 +293,7 @@ URIResolver result = null; try { - Class<?> clazz = (Class<?>) Class.forName(resolver, true, cl); + Class<?> clazz = Class.forName(resolver, true, cl); // Try to set the base using the constructor try { @@ -345,7 +345,7 @@ Set<String> urlsAsString = new HashSet<String>(); List<URL> urls = new ArrayList<URL>(); try { - ClassLoader loader = null; + ClassLoader loader; if (extraClassPathDirectory != null) { if (verbose) { getLog().info("Add extra directory in generator's classLoader : " + extraClassPathDirectory); Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseModelFileWriter.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseModelFileWriter.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,38 @@ +package org.nuiton.eugene.plugin.writer; + +import org.apache.maven.plugin.logging.Log; +import org.apache.maven.plugin.logging.SystemStreamLog; +import org.nuiton.eugene.AbstractModelFileWriter; + +/** + * Surcharge de l'implentation abstraite pour avoir le logger de la console maven. + * + * @author tchemit + * @since 2.0.0 + */ +public abstract class BaseModelFileWriter extends AbstractModelFileWriter { + + /** + * Logger + */ + private Log log; + public static final String PROP_CLASS_LOADER = "classLoader"; + + public void setLog(Log log) { + this.log = log; + } + + public Log getLog() { + if (log == null) { + log = new SystemStreamLog(); + } + + return log; + } + + public ClassLoader getClassLoader() { + return getProperty(PROP_CLASS_LOADER, ClassLoader.class); + } + + +} \ No newline at end of file Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseXmiToModelFileWriter.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseXmiToModelFileWriter.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseXmiToModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,226 @@ +package org.nuiton.eugene.plugin.writer; + +import org.nuiton.eugene.models.Model; +import org.nuiton.plugin.PluginHelper; +import org.nuiton.plugin.PluginIOContext; +import org.nuiton.util.FasterCachedResourceResolver; +import org.nuiton.util.FileUtil; +import org.nuiton.util.Resource; +import org.nuiton.util.ResourceResolver; + +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.URIResolver; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.Constructor; +import java.net.URL; +import java.util.List; + +/** + * Implentation pour les writer to type xmi (qui transforme du xmi via xsl). + * + * @author tchemit + * @since 2.0.0 + */ +public abstract class BaseXmiToModelFileWriter extends BaseModelFileWriter { + public static final String PROP_RESOLVER = "resolver"; + public static final String PROP_EXTRACTED_PACKAGES = "extractedPackages"; + public static final String PROP_FULL_PACKAGE_PATH = "fullPackagePath"; + + /** + * Get style sheet. + * + * @param model the model file used to determine the stylesheet to use + * @return the stylesheet name + */ + protected abstract String getStyleSheet(File model); + + /** + * Get extension. + * + * @return the extension + */ + protected abstract String getExtension(); + + @Override + public String getInputProtocol() { + return "xmi"; + } + + @Override + public <M extends Model> String getOutputProtocol(Class<M> modelType) { + // no next writer : write model files + return null; + } + + @Override + public boolean acceptInclude(String include) { + return include.startsWith("xmi:") || include.endsWith(".xmi") || include.endsWith(".uml"); + } + + @Override + public String getDefaultIncludes() { + return "**/*.xmi"; + } + + @Override + public String getDefaultInputDirectory() { + return "src/main/xmi"; + } + + @Override + public String getDefaultOutputDirectory() { + return "models"; + } + + protected TransformerFactory transformerFactory; + + protected TransformerFactory getTransformerFactory() { + if (transformerFactory == null) { + transformerFactory = TransformerFactory.newInstance(); + } + return transformerFactory; + } + + public String getFullPackagePath() { + return getProperty(PROP_FULL_PACKAGE_PATH, String.class); + } + + public String getExtractedPackages() { + return getProperty(PROP_EXTRACTED_PACKAGES, String.class); + } + + public String getResolver() { + return getProperty(PROP_RESOLVER, String.class); + } + + + @Override + public void generate(File outputDir, File inputDirectory, String includePattern, boolean overwrite) throws IOException { + long t0 = System.nanoTime(); + try { + getLog().info("Processing XSL tranformation on " + inputDirectory + " for " + includePattern); + + getLog().info(" with fullPackagePath : " + getFullPackagePath()); + getLog().info(" with extractedPackages : " + getExtractedPackages()); +// getLog().info(" with acceptedXmiTypes : " + getFullPackagePath()); + getLog().info(" with resolver : " + getResolver()); + + // recuperation des fichiers a traiter + List<File> files = PluginHelper.getIncludedFiles(inputDirectory, new String[]{includePattern}, null); + + // lancement des traitements xsl sur les fichiers trouvés + // dans le repertoire + actionXsl(outputDir, inputDirectory, files, getClassLoader(), overwrite); + } finally { + getLog().info("xsl done in " + PluginHelper.convertTime(System.nanoTime() - t0)); + } + + getLog().info("Copy resources files"); + + PluginIOContext ioContext = new PluginIOContext(); + ioContext.setInput(inputDirectory); + ioContext.setOutput(outputDir); +// String[] excludes = getSuffixPattern("**/*"); + PluginHelper.copyFiles(ioContext, null, new String[]{includePattern}, overwrite); + } + + + protected void actionXsl(File outputDir, File dir, List<File> files, ClassLoader fixedClassLoader, boolean overwrite) throws IOException { + + for (File file : files) { + try { + if (getLog().isDebugEnabled()) { + getLog().debug("treate file : " + file); + } + // Prepare resolver, stylesheet + URIResolver fileResolver = getUriResolver(file, fixedClassLoader); + String styleSheet = getStyleSheet(file); + URL xsl = Resource.getURL(styleSheet); + + //TC-20090820 : using recursive for xmi +// File result = new File(destDirModel, FileUtil.basename(file, +// acceptedSuffixes).concat(".").concat(getExtension())); + + String extension = "." + FileUtil.extension(file); + String filename = FileUtil.basename(file, extension).concat(".").concat(getExtension()); + String relatifPath = file.getParentFile().getAbsolutePath().substring(dir.getAbsolutePath().length()); + File dstDir = outputDir; + if (!relatifPath.isEmpty()) { + dstDir = new File(dstDir, relatifPath); + dstDir.mkdirs(); + } + File result = new File(dstDir, filename); + if (!overwrite && file.lastModified() < result.lastModified()) { + getLog().info("file up-to-date : " + result); + continue; + } + if (getLog().isDebugEnabled()) { + getLog().debug("generate " + result); + } + + // Create the xsl transformer and set parameters + Transformer transformer = getTransformerFactory().newTransformer(new StreamSource(xsl.openStream())); + + transformer.setParameter(PROP_FULL_PACKAGE_PATH, getFullPackagePath()); + //transformer.setParameter("extraPackages", getExtractedPackages()); + + transformer.setURIResolver(fileResolver); + transformer.transform(new StreamSource(file), new StreamResult( + new FileOutputStream(result))); + + } catch (Exception e) { + throw new IOException(e.getMessage(), e); + } + } + } + + + protected URIResolver getUriResolver(File model, ClassLoader cl) { + URIResolver result = null; + + try { + Class<?> clazz = Class.forName(getResolver(), true, cl); + + // Try to set the base using the constructor + try { + // Look for a constructor with a String parameter (base) + Constructor<?> withBaseConstructor = clazz.getConstructor(String.class); + // Set the xmi folder as the base + String base = model.getParentFile().getAbsolutePath(); + // Instantiate + result = (URIResolver) withBaseConstructor.newInstance(base); + } catch (Exception eee) { + getLog().warn("Unable to instantiate resolver with String parameter", + eee); + } + + // If resolver is still not created, create it using the default + // constructor + if (result == null) { + result = (URIResolver) clazz.newInstance(); + } + + if (result instanceof ResourceResolver) { + ((ResourceResolver) result).setVerbose(getConfiguration().isVerbose()); + ((ResourceResolver) result).setCl(cl); + if (result instanceof FasterCachedResourceResolver) { + boolean offline = getConfiguration().isOffline(); + getLog().debug("using offline mode ? : " + offline); + ((FasterCachedResourceResolver) result).setOffline(offline); + } + } + + } catch (Exception eee) { + getLog().warn("Unable to instantiate resolver using the default constructor", eee); + } + + return result; + } + + +} \ No newline at end of file Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseXmiToModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToObjectModelFileWriter.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToObjectModelFileWriter.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToObjectModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,116 @@ +package org.nuiton.eugene.plugin.writer; + +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.object.ObjectModel; +import org.xml.sax.Attributes; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import java.io.File; +import java.io.IOException; + +/** + * This {@link org.nuiton.eugene.ModelFileWriter} transform xmi files to object model file. + * + * @author tchemit + * @plexus.component role="org.nuiton.eugene.ModelFileWriter" role-hint="xmi2objectmodel" description="xmi to object model" + * @since 2.0.0 + */ +public class XmiToObjectModelFileWriter extends BaseXmiToModelFileWriter { + + + public static final String[] XMI_FILE_FILTER = new String[]{"*.xmi", "**/*.xmi"}; + + @Override + public <M extends Model> boolean acceptModel(Class<M> modelType) { + // accept only state models + return ObjectModel.class.isAssignableFrom(modelType); + } + + @Override + public String getExtension() { + return "objectmodel"; + } + + @Override + protected String getStyleSheet(File model) { + String styleSheet = null; + + String version = getXmiVersion(model); + if (version.startsWith("1.")) { + styleSheet = "xmi1.2ToObjectModel.xsl"; + } else if (version.startsWith("2.")) { + styleSheet = "xmi2.1ToObjectModel.xsl"; + } else { + getLog().error("Unsupported xmi version [" + version + "]"); + } + + return styleSheet; + } + + /** + * Try to find xmi version on a file. + * + * @param xmiFile file to inspect + * @return version or null if version can't have been found + */ + protected String getXmiVersion(File xmiFile) { + String version = null; + + SAXParserFactory factory = SAXParserFactory.newInstance(); + + try { + SAXParser parser = factory.newSAXParser(); + + XmiVersionHandler handler = new XmiVersionHandler(); + parser.parse(xmiFile, handler); + + version = handler.getVersion(); + } catch (ParserConfigurationException e) { + getLog().debug("Can't parse file as xmi", e); + } catch (SAXException e) { + getLog().debug("Can't parse file as xmi", e); + } catch (IOException e) { + getLog().debug("Can't parse file as xmi", e); + } + + return version; + } + + /** + * Sax handler to find xmi version into xmi document. + */ + protected class XmiVersionHandler extends DefaultHandler { + + public String version = null; + + public XmiVersionHandler() { + super(); + } + + public String getVersion() { + return version; + } + + @Override + public void startElement(String uri, String localName, String qName, + Attributes attributes) throws SAXException { + + if (qName.equals("XMI")) { + version = attributes.getValue("xmi.version"); + getLog().debug("XMI version found : " + version); + } + + if (version == null) { + version = attributes.getValue("xmi:version"); + getLog().debug("XMI version found : " + version); + } + + } + } + + +} \ No newline at end of file Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToObjectModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToStateModelFileWriter.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToStateModelFileWriter.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToStateModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,34 @@ +package org.nuiton.eugene.plugin.writer; + +import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.state.StateModel; +import org.nuiton.plugin.PluginIOContext; + +import java.io.File; +import java.io.IOException; +import java.util.Map; + +/** + * @author tchemit + * @plexus.component role="org.nuiton.eugene.ModelFileWriter" role-hint="xmi2statemodel" description="xmi to state model" + * @since 2.0.0 + */ +public class XmiToStateModelFileWriter extends BaseXmiToModelFileWriter { + + @Override + public <M extends Model> boolean acceptModel(Class<M> modelType) { + // accept only state models + return StateModel.class.isAssignableFrom(modelType); + } + + @Override + protected String getExtension() { + return "statemodel"; + } + + @Override + protected String getStyleSheet(File model) { + //TODO when StateModel will be supported in 2.1, compute the version to resolve the correct stylesheet + return "xmi1.2ToStateModel.xsl"; + } +} \ No newline at end of file Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/XmiToStateModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Added: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoModelFileWriter.java =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoModelFileWriter.java (rev 0) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoModelFileWriter.java 2009-11-27 11:29:08 UTC (rev 731) @@ -0,0 +1,69 @@ +package org.nuiton.eugene.plugin.writer; + +import org.nuiton.eugene.models.Model; +import org.nuiton.plugin.PluginHelper; +import org.nuiton.plugin.PluginIOContext; + +import java.io.File; +import java.io.IOException; + +/** + * @author tchemit + * @plexus.component role="org.nuiton.eugene.ModelFileWriter" role-hint="zargo2xmi" description="zargo to xmi model" + * @since 2.0.0 + */ +public class ZargoModelFileWriter extends BaseModelFileWriter { + + public static final String[] XMI_FILE_FILTER = new String[]{"*.xmi", "**/*.xmi"}; + + @Override + public String getInputProtocol() { + return "zargo"; + } + + @Override + public <M extends Model> String getOutputProtocol(Class<M> modelType) { + // next writer to use is a xmi to model one + return "xmi"; + } + + @Override + public <M extends Model> boolean acceptModel(Class<M> modelType) { + // accept all models + return true; + } + + @Override + public boolean acceptInclude(String include) { + return include.startsWith("zargo:") || include.endsWith(".zargo") || include.endsWith(".zuml"); + } + + @Override + public String getDefaultIncludes() { + return "**/*.zargo"; + } + + @Override + public String getDefaultInputDirectory() { + return "src/main/xmi"; + } + + @Override + public String getDefaultOutputDirectory() { + return "xmi"; + } + + @Override + public void generate(File outputDir, File inputDirectory, String includePattern, boolean overwrite) throws IOException { + + PluginIOContext ioContext = new PluginIOContext(); + ioContext.setInput(inputDirectory); + ioContext.setOutput(outputDir); + + getLog().info("Expanding xmi from " + inputDirectory + " : " + includePattern); + PluginHelper.expandFiles(ioContext, new String[]{includePattern}, null, XMI_FILE_FILTER, overwrite); + + getLog().info("Copying resources from " + inputDirectory + " : " + includePattern); + PluginHelper.copyFiles(ioContext, null, new String[]{includePattern}, overwrite); + } +} Property changes on: branches/eugene-2.0/maven-eugene-plugin/src/main/java/org/nuiton/eugene/plugin/writer/ZargoModelFileWriter.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL Modified: branches/eugene-2.0/maven-eugene-plugin/src/main/resources/log4j.properties =================================================================== --- branches/eugene-2.0/maven-eugene-plugin/src/main/resources/log4j.properties 2009-11-27 10:00:00 UTC (rev 730) +++ branches/eugene-2.0/maven-eugene-plugin/src/main/resources/log4j.properties 2009-11-27 11:29:08 UTC (rev 731) @@ -6,3 +6,4 @@ log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n # package level log4j.logger.org.nuiton=INFO +#log4j.logger.org.nuiton.eugene=DEBUG