KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > cruisecontrol > GenericPluginDetail


1 /********************************************************************************
2  * CruiseControl, a Continuous Integration Toolkit
3  * Copyright (c) 2005 ThoughtWorks, Inc.
4  * 651 W Washington Ave. Suite 600
5  * Chicago, IL 60661 USA
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * + Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * + Redistributions in binary form must reproduce the above
16  * copyright notice, this list of conditions and the following
17  * disclaimer in the documentation and/or other materials provided
18  * with the distribution.
19  *
20  * + Neither the name of ThoughtWorks, Inc., CruiseControl, nor the
21  * names of its contributors may be used to endorse or promote
22  * products derived from this software without specific prior
23  * written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
29  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36  ********************************************************************************/

37 package net.sourceforge.cruisecontrol;
38
39 import java.lang.reflect.Method JavaDoc;
40 import java.lang.reflect.Modifier JavaDoc;
41 import java.util.LinkedList JavaDoc;
42 import java.util.List JavaDoc;
43
44 /**
45  * Understands information common to all plugins.
46  */

47 public class GenericPluginDetail implements PluginDetail {
48     private final String JavaDoc name;
49     private final PluginType type;
50     private final Attribute[] requiredAttributes;
51
52     public GenericPluginDetail(String JavaDoc name, Class JavaDoc plugin) {
53         this.name = name;
54         this.requiredAttributes = lookupRequiredAttributes(plugin);
55         this.type = PluginType.find(plugin);
56     }
57
58     public String JavaDoc getName() {
59         return name;
60     }
61
62     public PluginType getType() {
63         return type;
64     }
65
66     public Attribute[] getRequiredAttributes() {
67         return requiredAttributes;
68     }
69     
70     public int compareTo(Object JavaDoc other) {
71         return this.getName().compareTo(((PluginDetail) other).getName());
72     }
73
74     private static Attribute[] lookupRequiredAttributes(Class JavaDoc plugin) {
75         List JavaDoc attrs = new LinkedList JavaDoc();
76         Method JavaDoc[] methods = plugin.getMethods();
77         for (int i = 0; i < methods.length; i++) {
78             Method JavaDoc method = methods[i];
79             if (isRequiredAttribute(method)) {
80                 String JavaDoc methodName = method.getName();
81                 String JavaDoc attributeName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);
82                 attrs.add(new Attribute(attributeName, method.getParameterTypes()[0]));
83             }
84         }
85         
86         return (Attribute[]) attrs.toArray(new Attribute[attrs.size()]);
87     }
88
89     private static boolean isRequiredAttribute(Method JavaDoc method) {
90         return method.getName().startsWith("set") && Modifier.isPublic(method.getModifiers());
91     }
92 }
93
Popular Tags