01: package org.andromda.core.metafacade;
02:
03: import java.util.Collection;
04:
05: import org.andromda.core.configuration.Filters;
06:
07: /**
08: * <p/>
09: * Provides access to a model loaded by a Repository and made available to be used to retrieve information about
10: * model elements and metafacades. </p>
11: * <p/>
12: * Models can be instances of any metamodel. The most common models will be UML models. This interface is an
13: * abstraction. Any model that implements this interface can be used with AndroMDA. </p>
14: * <p/>
15: * Design goal: This class should only contain the <b>minimum amount of methods </b> that will be needed such that the
16: * AndroMDA core can deal with it. All other stuff should be done in cartridge-specific classes!!! So, please don't make
17: * this class grow! </p>
18: *
19: * @author <a href="http://www.mbohlen.de">Matthias Bohlen </a>
20: * @author Chad Brandon
21: */
22: public interface ModelAccessFacade {
23: /**
24: * Sets the object that represents the entire model.
25: *
26: * @param model the model to set.
27: */
28: public void setModel(Object model);
29:
30: /**
31: * Returns an object that represents the entire model. Data type is defined by the implementor of this interface.
32: *
33: * @return the metaclass model.
34: */
35: public Object getModel();
36:
37: /**
38: * Returns the name of a metafacade (whatever that means for a concrete model).
39: *
40: * @param metafacade the metafacade from which to retrieve the name.
41: * @return String containing the name
42: */
43: public String getName(Object metafacade);
44:
45: /**
46: * Returns the package name of a model element (whatever that means for a concrete model).
47: *
48: * @param modelElement the model element
49: * @return String containing the name
50: */
51: public String getPackageName(Object modelElement);
52:
53: /**
54: * Sets the model packages instance which contains the information about what
55: * packages should and should not be filtered out. The model access facade
56: * instance then uses this information to provide any filtering by package when
57: * calling {@link #getModelElements()} and {@link #findByStereotype(String)}.
58: *
59: * @param modelPackages the model packages by which to filter.
60: */
61: public void setPackageFilter(Filters modelPackages);
62:
63: /**
64: * Returns a collection of stereotype names for a modelElement (whatever that means for a concrete model).
65: *
66: * @param modelElement the modelElement
67: * @return Collection of Strings with stereotype names
68: */
69: public Collection getStereotypeNames(Object modelElement);
70:
71: /**
72: * Finds all the model elements that have the specified <code>stereotype</code> (with any filtering
73: * applied from the information provided by {@link #setPackageFilter(ModelPackages)}).
74: *
75: * @param stereotype the name of the stereotype, they are matched without regard to case.
76: * @return Collection of model elements having the given stereotype
77: */
78: public Collection findByStereotype(String stereotype);
79:
80: /**
81: * Returns all elements from the model (with any filtering
82: * applied from the information provided by {@link #setPackageFilter(ModelPackages)}).
83: *
84: * @return Collection of all metafacades
85: */
86: public Collection getModelElements();
87: }
|