1
2
3
4
5
6
7
8
9
10
11 package org.astrogrid.applications.javaclass;
12
13 import org.astrogrid.applications.description.BaseApplicationDescriptionLibrary;
14 import org.astrogrid.applications.description.base.ApplicationDescriptionEnvironment;
15 import org.astrogrid.applications.manager.idgen.IdGen;
16 import org.astrogrid.component.descriptor.ComponentDescriptor;
17
18 import org.apache.commons.logging.Log;
19 import org.apache.commons.logging.LogFactory;
20
21 import java.lang.reflect.Method;
22 import java.lang.reflect.Modifier;
23
24 /*** A library of java class application descriptions.
25 * <p>
26 * This class constructs {@link org.astrogrid.applications.javaclass.JavaClassApplicationDescription} for each static method in its parameter class,
27 * and then collects them as an {@link org.astrogrid.applications.description.ApplicationDescriptionLibrary}
28 * @author Noel Winstanley nw@jb.man.ac.uk 08-Jun-2004
29 * @author Paul Harrison (pah@jb.man.ac.uk)
30 * @see org.astrogrid.applications.javaclass.JavaClassApplicationDescription
31 * @see org.astrogrid.applications.description.ApplicationDescriptionLibrary
32 *
33 */
34 public class JavaClassApplicationDescriptionLibrary extends BaseApplicationDescriptionLibrary implements ComponentDescriptor{
35 /***
36 * Commons Logger for this class
37 */
38 private static final Log logger = LogFactory.getLog(JavaClassApplicationDescriptionLibrary.class);
39
40
41
42 /*** Construct a new JavaClassApplicationDescriptionLibrary, based on static methods of parameter class
43 * @param implClass - class of static methods, each of which will provide an application for the library.
44 * @param authidResolver configuration object specifiying under which community (authority?) the applications are to be placed
45 * @param env standard container object for helper code.
46 *
47 */
48 public JavaClassApplicationDescriptionLibrary(Class implClass, ApplicationDescriptionEnvironment env) {
49 super(env);
50 this.implClass= implClass;
51 populate(implClass,env.getIdGen(), env.getAuthIDResolver());
52 }
53 protected final Class implClass;
54 /*** populates the library using reflection on the methods of the parameter class
55 * @param imp
56 * @param authidresolver
57 */
58 protected final void populate(Class imp,IdGen idgen, BaseApplicationDescriptionLibrary.AppAuthorityIDResolver authidresolver) {
59 String communityName = authidresolver.getAuthorityID();
60 Method[] methods = imp.getDeclaredMethods();
61 for (int i = 0; i < methods.length; i++) {
62 Method m = methods[i];
63 int code = m.getModifiers();
64 if (Modifier.isStatic(code) && Modifier.isPublic(code)) {
65 super.addApplicationDescription(new JavaClassApplicationDescription(m,communityName,env));
66 }
67 }
68 }
69
70 /***
71 * @see org.astrogrid.component.descriptor.ComponentDescriptor#getDescription()
72 */
73 public String getDescription() {
74 return "Implementation class: " + implClass.getName() + "\n" + super.getDescription();
75 }
76
77 /***
78 * @see org.astrogrid.component.descriptor.ComponentDescriptor#getName()
79 */
80 public String getName() {
81 return "Java Class Application Library";
82 }
83
84 }
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117