1 // license-header java merge-point
2 //
3 // Attention: generated code (by MetafacadeLogic.vsl) - do not modify!
4 //
5 package org.andromda.metafacades.uml14;
6
7 import java.util.Collection;
8 import java.util.List;
9 import org.andromda.core.metafacade.ModelValidationMessage;
10 import org.andromda.metafacades.uml.ClassifierFacade;
11 import org.andromda.metafacades.uml.ModelElementFacade;
12 import org.andromda.metafacades.uml.PackageFacade;
13 import org.apache.log4j.Logger;
14 import org.omg.uml.modelmanagement.UmlPackage;
15
16 /**
17 * Used to group elements, and provides a namespace for the grouped elements. A package can have one
18 * or more profile applications to indicate which profiles have been applied. Because a profile is a
19 * package, it is possible to apply a profile not only to packages, but also to profiles. Package
20 * specializes TemplateableElement and PackageableElement specializes ParameterableElement to
21 * specify that a package can be used as a template and a PackageableElement as a template
22 * parameter.
23 * MetafacadeLogic for PackageFacade
24 *
25 * @see PackageFacade
26 */
27 public abstract class PackageFacadeLogic
28 extends ModelElementFacadeLogicImpl
29 implements PackageFacade
30 {
31 /**
32 * The underlying UML object
33 * @see UmlPackage
34 */
35 protected UmlPackage metaObject;
36
37 /** Create Metafacade implementation instance using the MetafacadeFactory from the context
38 * @param metaObjectIn
39 * @param context
40 */
41 protected PackageFacadeLogic(UmlPackage metaObjectIn, String context)
42 {
43 super(metaObjectIn, getContext(context));
44 this.metaObject = metaObjectIn;
45 }
46
47 /**
48 * The logger instance.
49 */
50 private static final Logger logger = Logger.getLogger(PackageFacadeLogic.class);
51
52 /**
53 * Gets the context for this metafacade logic instance.
54 * @param context String. Set to PackageFacade if null
55 * @return context String
56 */
57 private static String getContext(String context)
58 {
59 if (context == null)
60 {
61 context = "org.andromda.metafacades.uml.PackageFacade";
62 }
63 return context;
64 }
65
66 /** Reset context only for non-root metafacades
67 * @param context
68 */
69 @Override
70 public void resetMetafacadeContext(String context)
71 {
72 if (!this.contextRoot) // reset context only for non-root metafacades
73 {
74 context = getContext(context); // to have same value as in original constructor call
75 setMetafacadeContext (context);
76 }
77 }
78
79 /**
80 * @return boolean true always
81 * @see PackageFacade
82 */
83 public boolean isPackageFacadeMetaType()
84 {
85 return true;
86 }
87
88 // --------------- attributes ---------------------
89
90 /**
91 * @see PackageFacade#getTablePrefix()
92 * @return String
93 */
94 protected abstract String handleGetTablePrefix();
95
96 private String __tablePrefix1a;
97 private boolean __tablePrefix1aSet = false;
98
99 /**
100 * The Entity table prefix to be used for this package.
101 * @return (String)handleGetTablePrefix()
102 */
103 public final String getTablePrefix()
104 {
105 String tablePrefix1a = this.__tablePrefix1a;
106 if (!this.__tablePrefix1aSet)
107 {
108 // tablePrefix has no pre constraints
109 tablePrefix1a = handleGetTablePrefix();
110 // tablePrefix has no post constraints
111 this.__tablePrefix1a = tablePrefix1a;
112 if (isMetafacadePropertyCachingEnabled())
113 {
114 this.__tablePrefix1aSet = true;
115 }
116 }
117 return tablePrefix1a;
118 }
119
120 // ---------------- business methods ----------------------
121
122 /**
123 * Method to be implemented in descendants
124 * Finds the model element with the given 'fullyQualifiedName', or returns null if one can't be
125 * found with that name.
126 * @param fullyQualifiedName
127 * @return ModelElementFacade
128 */
129 protected abstract ModelElementFacade handleFindModelElement(String fullyQualifiedName);
130
131 /**
132 * Finds the model element with the given 'fullyQualifiedName', or returns null if one can't be
133 * found with that name.
134 * @param fullyQualifiedName String
135 * The fully qualified name of the model element to find.
136 * @return handleFindModelElement(fullyQualifiedName)
137 */
138 public ModelElementFacade findModelElement(String fullyQualifiedName)
139 {
140 // findModelElement has no pre constraints
141 ModelElementFacade returnValue = handleFindModelElement(fullyQualifiedName);
142 // findModelElement has no post constraints
143 return returnValue;
144 }
145
146 // ------------- associations ------------------
147
148 /**
149 * Used to group elements, and provides a namespace for the grouped elements. A package can have
150 * one or
151 * more profile applications to indicate which profiles have been applied. Because a profile is
152 * a
153 * package, it is possible to apply a profile not only to packages, but also to profiles.
154 * Package
155 * specializes TemplateableElement and PackageableElement specializes ParameterableElement to
156 * specify
157 * that a package can be used as a template and a PackageableElement as a template parameter.
158 * @return (Collection<ClassifierFacade>)handleGetClasses()
159 */
160 public final Collection<ClassifierFacade> getClasses()
161 {
162 Collection<ClassifierFacade> getClasses1r = null;
163 // packageFacade has no pre constraints
164 Collection result = handleGetClasses();
165 List shieldedResult = this.shieldedElements(result);
166 try
167 {
168 getClasses1r = (Collection<ClassifierFacade>)shieldedResult;
169 }
170 catch (ClassCastException ex)
171 {
172 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
173 PackageFacadeLogic.logger.warn("incorrect metafacade cast for PackageFacadeLogic.getClasses Collection<ClassifierFacade> " + result + ": " + shieldedResult);
174 }
175 // packageFacade has no post constraints
176 return getClasses1r;
177 }
178
179 /**
180 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
181 * @return Collection
182 */
183 protected abstract Collection handleGetClasses();
184
185 /**
186 * Gets the root package for the model element.
187 * @return (Collection<ModelElementFacade>)handleGetModelElements()
188 */
189 public final Collection<ModelElementFacade> getModelElements()
190 {
191 Collection<ModelElementFacade> getModelElements2r = null;
192 // rootPackage has no pre constraints
193 Collection result = handleGetModelElements();
194 List shieldedResult = this.shieldedElements(result);
195 try
196 {
197 getModelElements2r = (Collection<ModelElementFacade>)shieldedResult;
198 }
199 catch (ClassCastException ex)
200 {
201 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
202 PackageFacadeLogic.logger.warn("incorrect metafacade cast for PackageFacadeLogic.getModelElements Collection<ModelElementFacade> " + result + ": " + shieldedResult);
203 }
204 // rootPackage has no post constraints
205 return getModelElements2r;
206 }
207
208 /**
209 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
210 * @return Collection
211 */
212 protected abstract Collection handleGetModelElements();
213
214 /**
215 * Used to group elements, and provides a namespace for the grouped elements. A package can have
216 * one or
217 * more profile applications to indicate which profiles have been applied. Because a profile is
218 * a
219 * package, it is possible to apply a profile not only to packages, but also to profiles.
220 * Package
221 * specializes TemplateableElement and PackageableElement specializes ParameterableElement to
222 * specify
223 * that a package can be used as a template and a PackageableElement as a template parameter.
224 * @return (Collection<PackageFacade>)handleGetSubPackages()
225 */
226 public final Collection<PackageFacade> getSubPackages()
227 {
228 Collection<PackageFacade> getSubPackages3r = null;
229 // packageFacade has no pre constraints
230 Collection result = handleGetSubPackages();
231 List shieldedResult = this.shieldedElements(result);
232 try
233 {
234 getSubPackages3r = (Collection<PackageFacade>)shieldedResult;
235 }
236 catch (ClassCastException ex)
237 {
238 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
239 PackageFacadeLogic.logger.warn("incorrect metafacade cast for PackageFacadeLogic.getSubPackages Collection<PackageFacade> " + result + ": " + shieldedResult);
240 }
241 // packageFacade has no post constraints
242 return getSubPackages3r;
243 }
244
245 /**
246 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
247 * @return Collection
248 */
249 protected abstract Collection handleGetSubPackages();
250
251 /**
252 * Used to group elements, and provides a namespace for the grouped elements. A package can have
253 * one or
254 * more profile applications to indicate which profiles have been applied. Because a profile is
255 * a
256 * package, it is possible to apply a profile not only to packages, but also to profiles.
257 * Package
258 * specializes TemplateableElement and PackageableElement specializes ParameterableElement to
259 * specify
260 * that a package can be used as a template and a PackageableElement as a template parameter.
261 * @return (Collection<ModelElementFacade>)handleGetOwnedElements()
262 */
263 public final Collection<ModelElementFacade> getOwnedElements()
264 {
265 Collection<ModelElementFacade> getOwnedElements4r = null;
266 // packageFacade has no pre constraints
267 Collection result = handleGetOwnedElements();
268 List shieldedResult = this.shieldedElements(result);
269 try
270 {
271 getOwnedElements4r = (Collection<ModelElementFacade>)shieldedResult;
272 }
273 catch (ClassCastException ex)
274 {
275 // Bad things happen if the metafacade type mapping in metafacades.xml is wrong - Warn
276 PackageFacadeLogic.logger.warn("incorrect metafacade cast for PackageFacadeLogic.getOwnedElements Collection<ModelElementFacade> " + result + ": " + shieldedResult);
277 }
278 // packageFacade has no post constraints
279 return getOwnedElements4r;
280 }
281
282 /**
283 * UML Specific type is returned in Collection, transformed by shieldedElements to AndroMDA Metafacade type
284 * @return Collection
285 */
286 protected abstract Collection handleGetOwnedElements();
287
288 /**
289 * @param validationMessages Collection<ModelValidationMessage>
290 * @see ModelElementFacadeLogicImpl#validateInvariants(Collection validationMessages)
291 */
292 @Override
293 public void validateInvariants(Collection<ModelValidationMessage> validationMessages)
294 {
295 super.validateInvariants(validationMessages);
296 }
297 }