1 package org.andromda.core.simpleuml;
2
3 import java.lang.reflect.Method;
4 import java.util.Collection;
5 import java.util.Iterator;
6 import java.util.Vector;
7
8 import org.andromda.core.uml14.UMLStaticHelper;
9 import org.omg.uml.UmlPackage;
10
11 /***
12 * dynamic proxy for a Model: dynamically supports the UMLModel,
13 * and org.omg.uml.UmlPackage interfaces.
14 *
15 * @author <A HREF="http://www.amowers.com">Anthony Mowers</A>
16 *.
17 */
18 public class PModel
19 implements
20 UMLModel,
21 java.lang.reflect.InvocationHandler
22 {
23
24 private UmlPackage model;
25 private UMLStaticHelper scriptHelper;
26
27 public Collection getPackages() {
28 Collection packages =
29 model.getModelManagement().getUmlPackage().refAllOfType();
30 Collection packageProxies = new Vector();
31
32 for (Iterator i= packages.iterator();i.hasNext();)
33 {
34 org.omg.uml.modelmanagement.UmlPackage o =
35 (org.omg.uml.modelmanagement.UmlPackage)i.next();
36 o = PPackage.newInstance(scriptHelper,o);
37 packageProxies.add(o);
38 }
39
40 return</strong> packageProxies;
41 }
42
43 public static UmlPackage newInstance(
44 UMLStaticHelper scriptHelper,
45 UmlPackage model)
46 {
47 Class[] interfaces = new Class[]
48 {
49 UMLModel.class,
50 UmlPackage.class
51 };
52
53 return (UmlPackage)java.lang.reflect.Proxy.newProxyInstance(
54 model.getClass().getClassLoader(),
55 interfaces,
56 new PModel(model, scriptHelper));
57 }
58
59
60
61 private PModel(
62 UmlPackage model,
63 UMLStaticHelper scriptHelper)
64 {
65 this.model = model;
66 this.scriptHelper = scriptHelper;
67 }
68
69 public Object invoke(Object proxy, Method m, Object[] args)
70 throws Throwable
71 {
72 if (m.getDeclaringClass().isAssignableFrom(this.getClass()))
73 {
74 return m.invoke(this, args);
75 }
76
77 return m.invoke(model, args);
78 }
79 }