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