KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jerpa > component > ComponentManager


1 package org.jerpa.component;
2
3 /*
4  * JERPA - Java Enterprise Resource Planning Architecture
5  * Copyright (c) 2002 JERPA-Team <info@jerpa.org>
6  * This is GNU software. Look at COPYING for details.
7  */

8
9 import org.w3c.dom.*;
10 import org.apache.xerces.parsers.*;
11 import org.jerpa.component.configuration.*;
12 import java.util.Vector JavaDoc;
13
14 public class ComponentManager
15 {
16     Vector JavaDoc availableComponents = new Vector JavaDoc();
17     Vector JavaDoc runningComponents = new Vector JavaDoc();
18
19     public ComponentManager(Configuration config)
20     {
21         // Read list of available components from config
22
// add them to availableComponents using addAvailable.
23

24         String JavaDoc confpath = System.getProperty("user.dir") + "/conf/jerpa.conf";
25         DOMParser parser = new DOMParser();
26         try
27         {
28             parser.parse(confpath);
29             Element root = parser.getDocument().getDocumentElement();
30             NodeList componentList = root.getElementsByTagName("component");
31             for (int j=0; j<componentList.getLength(); j++)
32             {
33                 if (componentList.item(j).getNodeType()==Node.ELEMENT_NODE)
34                 {
35                     Element componentElement = (Element)componentList.item(j);
36                     String JavaDoc componentRole = componentElement.getElementsByTagName("role").item(0).getFirstChild().getNodeValue();
37                     String JavaDoc componentClass = componentElement.getElementsByTagName("class").item(0).getFirstChild().getNodeValue();
38                     Element configurationElement = (Element)componentElement.getElementsByTagName("config").item(0);
39                     //System.out.println("FOUND COMPONENT: " + componentRole);
40
ComponentModel cmodel = new ComponentModel(componentRole,componentClass,configurationElement);
41                     addAvailable(cmodel);
42                 };
43             };
44         }
45         catch (java.io.IOException JavaDoc e)
46         {
47             System.out.println(e.getMessage());
48         }
49         catch (org.xml.sax.SAXException JavaDoc e)
50         {
51             System.out.println(e.getMessage());
52         };
53     };
54
55     public void finalize()
56     {
57         runningComponents.removeAllElements();
58     };
59
60     public boolean hasComponent(java.lang.String JavaDoc role)
61     {
62         for (int i=0;i<availableComponents.size();i++)
63         {
64             ComponentModel temp = (ComponentModel)availableComponents.get(i);
65             if (temp.getRole().equals(role))
66             {
67                 return true;
68             };
69         };
70         return false;
71     };
72
73     public Component lookup(java.lang.String JavaDoc role)
74         throws ComponentException
75     {
76         // search for a component in availableComponents.
77
// get a new instance of it.
78
// insert it into runningComponents using addRunning.
79
// return the component.
80
Component out = null;
81         for (int i=0;i<availableComponents.size();i++)
82         {
83             ComponentModel temp = (ComponentModel)availableComponents.get(i);
84             if (temp.getRole().equals(role))
85             {
86                 try
87                 {
88                     out = (Component)(Class.forName(temp.getClassname()).newInstance());
89                 }
90                 catch (InstantiationException JavaDoc e)
91                 {
92                     System.out.println("FATAL ERROR (ComponentManager): Instatiation Error.");
93                     System.out.println(e.getMessage());
94                     return null;
95                 }
96                 catch (IllegalAccessException JavaDoc e)
97                 {
98                     System.out.println("FATAL ERROR (ComponentManager): Illegal Access.");
99                     System.out.println(e.getMessage());
100                     return null;
101                 }
102                 catch (ClassNotFoundException JavaDoc e)
103                 {
104                     System.out.println("FATAL ERROR (ComponentManager): Class Not Found.");
105                     System.out.println(e.getMessage());
106                     return null;
107                 };
108                 // configure it
109
Configuration defaultConfig = out.getConfiguration();
110                 NodeList configItems = temp.getConfig().getElementsByTagName("item");
111                 for (int j=0; j<configItems.getLength(); j++)
112                 {
113                     NamedNodeMap attribs = configItems.item(j).getAttributes();
114                     String JavaDoc configType = attribs.getNamedItem("type").getNodeValue();
115                     String JavaDoc configName = attribs.getNamedItem("name").getNodeValue();
116                     String JavaDoc configValue = attribs.getNamedItem("value").getNodeValue();
117                     //System.out.println("CONFIG: type=" + configType + " name=" + configName + " value=" + configValue);
118
try
119                     {
120                         if (configType.equals("string"))
121                             out.getConfiguration().getStringItem(configName).setValue(configValue);
122                         if (configType.equals("integer"))
123                             out.getConfiguration().getIntegerItem(configName).setValue(new Integer JavaDoc(configValue));
124                     }
125                     catch (ConfigurationException e)
126                     {
127                         System.out.println("FATAL ERROR (ComponentManager): Configuration Name Mismatch.");
128                         System.out.println(e.getMessage());
129                         return null;
130                     }
131                     catch (NumberFormatException JavaDoc e)
132                     {
133                         System.out.println("FATAL ERROR (ComponentManager): Configuration Value Wrong.");
134                         System.out.println(e.getMessage());
135                         return null;
136                     }
137                 };
138                 // init it and make the componentmanager known to the component
139
out.init(this);
140                 // add it to the running components
141
addRunning(out);
142                 return out;
143             };
144         };
145         return null;
146     };
147
148     public void release(Component component)
149     {
150         for (int i=0;i<runningComponents.size();i++)
151         {
152             if (((Component)(runningComponents.get(i))).getRole().equals(component.getRole()))
153             {
154                 runningComponents.remove(i);
155             };
156         };
157     };
158
159     private void addRunning(Component _in)
160     {
161         runningComponents.add(_in);
162     };
163
164     private void addAvailable(ComponentModel _in)
165     {
166         availableComponents.add(_in);
167     };
168 };
169
170
Popular Tags