InstanceDescription.java
00001
00002
00003
00004
00005
00006
00007 package org.nees.rbnb;
00008
00009 import java.util.Enumeration;
00010 import java.util.Hashtable;
00011
00012 import javax.swing.tree.DefaultMutableTreeNode;
00013 import javax.swing.tree.MutableTreeNode;
00014
00015 import org.w3c.dom.Document;
00016 import org.w3c.dom.Element;
00017 import org.w3c.dom.Node;
00018 import org.w3c.dom.NodeList;
00019
00020
00021 class InstanceDescription
00022 {
00023 private final NeesControlMetadata metadata;
00024 private String instanceName;
00025 private String templateName;
00026 private TemplateDescription itsTemplate;
00027 Hashtable parameters = new Hashtable();
00028 private RBNBBase instance;
00029 private boolean running = false;
00030
00034 public InstanceDescription(NeesControlMetadata metadata, Node node) {
00035 NodeList children = node.getChildNodes();
00036 this.metadata = metadata;
00037 final int length = children.getLength();
00038 for(int i = 0; i < length; i++)
00039 {
00040 Node child = children.item(i);
00041 if (child.getNodeType() == Node.ELEMENT_NODE)
00042 {
00043 Element element = (Element)child;
00044 String tag = element.getTagName();
00045 if (tag.equals(NeesControlMetadata.XML_TAG_FOR_INSTANCE_NAME))
00046 {
00047
00048
00049 String name = child.getChildNodes().item(0).getNodeValue();
00050 setName(name);
00051 }
00052 else
00053 if (tag.equals(NeesControlMetadata.XML_TAG_FOR_INSATNCE_TEMPLATE_NAME))
00054 {
00055
00056
00057 String name = child.getChildNodes().item(0).getNodeValue();
00058 setTemplate(name);
00059 }
00060 else
00061 if (tag.equals(NeesControlMetadata.XML_TAG_FOR_INSTANCE_RUNNING_FLAG))
00062 {
00063
00064
00065 String value = child.getChildNodes().item(0).getNodeValue();
00066 if (value.equals("true")) running = true;
00067 else running = false;
00068 }
00069 else
00070 if (tag.equals(NeesControlMetadata.XML_TAG_FOR_PARAMETER_LIST))
00071 {
00072 NodeList param_children = child.getChildNodes();
00073 final int l = param_children.getLength();
00074 for(int j = 0; j < l; j++)
00075 {
00076 Node param_child = param_children.item(j);
00077 if (param_child.getNodeType() == Node.ELEMENT_NODE)
00078 {
00079 Element e = (Element)param_child;
00080 String tg = e.getTagName();
00081 if (tg.equals(NeesControlMetadata.XML_TAG_FOR_PARAMETER))
00082 {
00083 RBNBBaseParameterHolder h =
00084 new RBNBBaseParameterHolder(param_child);
00085 TemplateDescription t = getTemplate();
00086 if (t != null)
00087 {
00088 RBNBBaseParameterHolder d =
00089 t.getParameterTemplate(h.getName());
00090 if (d != null)
00091 h.setDefaultFromTemplate(d);
00092 }
00093 parameters.put(h.getName(),h);
00094 }
00095 }
00096 }
00097 }
00098 }
00099 }
00100 }
00101
00102 public InstanceDescription(NeesControlMetadata metadata, String instanceName, String templateName)
00103 {
00104 setName(instanceName);
00105 this.metadata = metadata;
00106 setTemplate(templateName);
00107 itsTemplate = metadata.getTemplate(templateName);
00108 if (itsTemplate != null)
00109 {
00110 Enumeration e = itsTemplate.getParameterEnumeration();
00111 while (e.hasMoreElements())
00112 {
00113 RBNBBaseParameterHolder t =
00114 (RBNBBaseParameterHolder) e.nextElement();
00115 try {
00116 RBNBBaseParameterHolder p =
00117 new RBNBBaseParameterHolder(t);
00118 if (t.getDefaultValue() != null)
00119 p.setValue(t.getDefaultValue());
00120 parameters.put(t.getName(),p);
00121 } catch (Exception skip) {}
00122 }
00123 }
00124 }
00125
00126 public InstanceDescription
00127 (NeesControlMetadata metadata, String instanceName,
00128 String templateName, RBNBBase actualInstance)
00129 {
00130 this(metadata, instanceName, templateName);
00131 instance = actualInstance;
00132
00133 Enumeration e = parameters.elements();
00134 while (e.hasMoreElements())
00135 {
00136 RBNBBaseParameterHolder p =
00137 (RBNBBaseParameterHolder)e.nextElement();
00138 setParameter(p.getName(),p.getValue());
00139 }
00140 }
00141
00145 public MutableTreeNode makeSwingTreeNode() {
00146 DefaultMutableTreeNode root = new DefaultMutableTreeNode(this);
00147 DefaultMutableTreeNode node = new DefaultMutableTreeNode("Template: " + templateName);
00148 root.add(node);
00149 String value = "false";
00150 if (isRunning()) value = "true";
00151 node = new DefaultMutableTreeNode("Running flag: " + value);
00152 root.add(node);
00153 root.add(RBNBBaseParameterHolder.makeParamersSwingTreeNode(parameters));
00154 return root;
00155 }
00156
00161 public Node createXmlNode(Document doc) {
00162 Node node, root = doc.createElement(NeesControlMetadata.XML_TAG_FOR_INSTANCE);
00163 if (valid())
00164 {
00165 node = doc.createElement(NeesControlMetadata.XML_TAG_FOR_INSTANCE_NAME);
00166 node.appendChild(doc.createTextNode(instanceName));
00167 root.appendChild(node);
00168
00169 node = doc.createElement(NeesControlMetadata.XML_TAG_FOR_INSATNCE_TEMPLATE_NAME);
00170 node.appendChild(doc.createTextNode(getTemplateName()));
00171 root.appendChild(node);
00172
00173 node = doc.createElement(NeesControlMetadata.XML_TAG_FOR_INSTANCE_RUNNING_FLAG);
00174 String value = "false";
00175 if (isRunning()) value = "true";
00176 node.appendChild(doc.createTextNode(value));
00177 root.appendChild(node);
00178
00179 if ((parameters != null) && (parameters.size() > 0))
00180 root.appendChild(createParameterListNode(doc));
00181 }
00182 return root;
00183 }
00184
00185 private Node createParameterListNode(Document doc)
00186 {
00187 Node node, root = doc.createElement(NeesControlMetadata.XML_TAG_FOR_PARAMETER_LIST);
00188 Enumeration e = parameters.keys();
00189 while (e.hasMoreElements())
00190 {
00191
00192
00193 String key = (String)e.nextElement();
00194 RBNBBaseParameterHolder p = getParameter(key);
00195 root.appendChild(p.createXmlNode(doc));
00196 }
00197 return root;
00198 }
00199
00203 public boolean valid() {
00204 String t = this.getTemplateName();
00205 return
00206 ( (instanceName != null)
00207 && (!instanceName.equals(""))
00208 && (t != null)
00209 && (!t.equals(""))
00210 );
00211 }
00212
00213 public void setTemplate(TemplateDescription template)
00214 {
00215 itsTemplate = template;
00216 templateName = template.getName();
00217 if (metadata.getTemplate(templateName) == null)
00218 metadata.putTemplate(templateName,template);
00219 }
00220
00221 public void setTemplate(String name)
00222 {
00223 TemplateDescription probe = metadata.getTemplate(name);
00224 if (probe != null) setTemplate(probe);
00225 else
00226 templateName = name;
00227 }
00228
00229 public TemplateDescription getTemplate()
00230 {
00231 TemplateDescription it = itsTemplate;
00232
00233
00234 if (it == null)
00235 {
00236 if (templateName != null)
00237 {
00238 TemplateDescription td =
00239 metadata.getTemplate(templateName);
00240 if (td != null)
00241 {
00242 it = td;
00243 itsTemplate = td;
00244 }
00245 }
00246 }
00247 return it;
00248 }
00249
00250 public String getTemplateName()
00251 {
00252 if (templateName == null)
00253 {
00254 if (itsTemplate != null)
00255 templateName = itsTemplate.getName();
00256 }
00257 return templateName;
00258 }
00259
00260 public void setName(String name)
00261 {
00262 instanceName = name;
00263 }
00264
00265 public String getName()
00266 {
00267 return instanceName;
00268 }
00269
00270 public String toString()
00271 {
00272 return getName();
00273 }
00274
00275 public void addParameter(String name, String type, Object value)
00276 {
00277 TemplateDescription t = getTemplate();
00278 Object d = null;
00279 if (t != null)
00280 {
00281 RBNBBaseParameterHolder template = t.getParameterTemplate(name);
00282 if (template != null)
00283 {
00284 d = template.getDefaultValue();
00285 }
00286 }
00287
00288 RBNBBaseParameterHolder p = new RBNBBaseParameterHolder(name, type, d);
00289 p.setValue(value);
00290
00291
00292 parameters.put(name,p);
00293 if (instance != null)
00294 {
00295 if (instance.getParameter(name) != null)
00296 instance.setParameterValue(name,value);
00297 else
00298 instance.setNewParameter(name,type,value);
00299 }
00300
00301 }
00302
00303 public RBNBBaseParameterHolder getParameter(String name)
00304 {
00305 RBNBBaseParameterHolder p = null;
00306
00307 if (instance != null)
00308 {
00309 p = instance.getParameter(name);
00310 }
00311 else
00312 p = (RBNBBaseParameterHolder)parameters.get(name);
00313 return p;
00314 }
00315
00316 public void setParameter(String name, Object value)
00317 {
00318 RBNBBaseParameterHolder p = getParameter(name);
00319
00320 if (p != null)
00321 p.setValue(value);
00322 if (instance != null) instance.setParameterValue(name,value);
00323 }
00324
00328 public boolean startInstance() {
00329 return instance.start();
00330 }
00331
00335 public boolean stopInstance() {
00336 return instance.stop();
00337 }
00338
00339 public boolean isRunning()
00340 {
00341
00342
00343
00344 if (instance != null)
00345 running = instance.isRunning();
00346 return running;
00347 }
00348
00349 }
Generated on Tue Aug 24 11:12:25 2004 for Data turbine for NEESGrid by
1.3.7