Main Page | Class Hierarchy | Class List | File List | Class Members | Related Pages

InstanceDescription.java

00001 /* 00002 * Created on Jun 25, 2004 00003 * 00004 * To change the template for this generated file go to 00005 * Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments 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 // get string from instance name 00048 // <instanceName>name</instanceName> 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 // get string from templage name 00056 // <instanceTemplateName>name</instanceTemplateName> 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 // get string for the value of the state of the instance 00064 // <instanceTemplateName>name</instanceTemplateName> 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 } // if (child.getNodeType() == Node.ELEMENT_NODE) 00099 } // for 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 // reset the parameter values to set then in the instance 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 // note, use key to account for instance parameters 00192 // see, getParameter() 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 // defered 00226 templateName = name; 00227 } 00228 00229 public TemplateDescription getTemplate() 00230 { 00231 TemplateDescription it = itsTemplate; 00232 00233 // attempt to get the template by name 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 // update actuall parameter value for real instrances 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 // if this description is coupled to an actual instance... 00342 // then update the flag... else assume that it is set for elsewhere 00343 // (as in fatch of metadata) 00344 if (instance != null) 00345 running = instance.isRunning(); 00346 return running; 00347 } 00348 00349 } // InstanceDescription

Generated on Tue Aug 24 11:12:25 2004 for Data turbine for NEESGrid by doxygen 1.3.7