1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.jetspeed.components.portletregistry;
18
19 import java.lang.reflect.InvocationHandler;
20 import java.lang.reflect.InvocationTargetException;
21 import java.lang.reflect.Method;
22 import java.lang.reflect.Proxy;
23
24 import org.apache.jetspeed.om.common.portlet.MutablePortletApplication;
25
26 public class MutablePortletApplicationProxy implements InvocationHandler, PortletApplicationProxy
27 {
28 private MutablePortletApplication app = null;
29 private static PortletRegistry registry;
30 private String name;
31
32 public MutablePortletApplicationProxy(MutablePortletApplication app)
33 {
34 this.app = app;
35 this.name = app.getName();
36 }
37
38 public static void setRegistry(PortletRegistry r)
39 {
40 registry = r;
41 }
42
43 public static MutablePortletApplication createProxy(
44 MutablePortletApplication app)
45 {
46 Class[] proxyInterfaces = new Class[]
47 { MutablePortletApplication.class, PortletApplicationProxy.class};
48 MutablePortletApplication proxy = (MutablePortletApplication) Proxy
49 .newProxyInstance(MutablePortletApplication.class
50 .getClassLoader(), proxyInterfaces,
51 new MutablePortletApplicationProxy(app));
52 return proxy;
53 }
54
55 protected void invalidate()
56 {
57 this.app = null;
58 }
59
60 public void setRealApplication(MutablePortletApplication app)
61 {
62 this.app = app;
63 }
64
65 public MutablePortletApplication getRealApplication()
66 {
67 return app;
68 }
69
70 public Object invoke(Object proxy, Method m, Object[] args)
71 throws Throwable
72 {
73 try
74 {
75 if (m.getName().equals("getRealApplication"))
76 {
77 return getRealApplication();
78 }
79 else if (m.getName().equals("setRealApplication"))
80 {
81 setRealApplication((MutablePortletApplication)args[0]);
82 return null;
83 }
84 else
85 {
86 if (app == null)
87 {
88 app = registry.getPortletApplication(name);
89 }
90 return m.invoke(app, args);
91 }
92 }
93 catch (InvocationTargetException e)
94 {
95 throw e.getTargetException();
96 }
97 }
98
99 }