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

NeesControlMetadata.java

00001 /* 00002 * Created on Jun 16, 2004 00003 */ 00004 package org.nees.rbnb; 00005 00006 import java.io.IOException; 00007 import java.util.Vector; 00008 import java.util.Hashtable; 00009 import java.util.Enumeration; 00010 00011 import org.w3c.dom.Document; 00012 import org.w3c.dom.Element; 00013 import org.w3c.dom.NodeList; 00014 import org.w3c.dom.Node; 00015 00016 import javax.swing.tree.DefaultMutableTreeNode; 00017 import javax.swing.tree.MutableTreeNode; 00018 00022 public class NeesControlMetadata { 00023 00024 /* ----- 00025 * XML Tags used in this package for verious messages etc... 00026 * ----- 00027 */ 00028 public static final String XML_TAG_FOR_METADATA = "NEESMetadata"; 00029 public static final String XML_TAG_FOR_LINK_LIST = "links"; 00030 public static final String XML_TAG_FOR_LINK = "link"; 00031 public static final String XML_TAG_FOR_TEMPLATE_LIST = "templates"; 00032 public static final String XML_TAG_FOR_TEMPLATE = "template"; 00033 public static final String XML_TAG_FOR_TEMPLATE_NAME = "templateName"; 00034 public static final String XML_TAG_FOR_TEMPLATE_TYPE = "type"; 00035 public static final String XML_TAG_FOR_PARAMETER_LIST = "parameters"; 00036 public static final String XML_TAG_FOR_PARAMETER = "parameter"; 00037 public static final String XML_TAG_FOR_INSTANCE_LIST = "instances"; 00038 public static final String XML_TAG_FOR_INSTANCE = "instance"; 00039 public static final String XML_TAG_FOR_INSTANCE_NAME = "instanceName"; 00040 public static final String XML_TAG_FOR_INSATNCE_TEMPLATE_NAME = "instanceTemplateName"; 00041 public static final String XML_TAG_FOR_INSTANCE_RUNNING_FLAG = "instanceRunningFlag"; 00042 public static final String XML_TAG_FOR_ADDITIONAL_METADATA = "internalMetadata"; 00043 00044 public static final String XML_TAG_FOR_COMMAND = "Command"; 00045 00046 public static final String IMAGE_TYPE = "image"; 00047 public static final String MOVIE_TYPE = "movie"; 00048 public static final String DATA_TYPE = "data"; 00049 public static final String DAQ_TYPE = "DAQ"; 00050 00051 private Vector links = new Vector(); 00052 private Hashtable templates = new Hashtable(); 00053 private Hashtable instances = new Hashtable(); 00054 00055 public NeesControlMetadata() 00056 { 00057 } 00058 00059 public NeesControlMetadata(String xml) 00060 { 00061 setFromXml(xml); 00062 } 00063 00064 public String toXmlString() 00065 { 00066 Document doc = Xml.createDocument(); 00067 buildXmlDoc(doc); 00068 try { 00069 return Xml.writeDocumentToString(doc); 00070 } catch (IOException e) { 00071 return Xml.errorXml("Failed to generate Control Metadata" , e.toString()); 00072 } 00073 } 00074 00075 public void buildXmlDoc(Document doc) 00076 { 00077 Node root = doc.createElement(XML_TAG_FOR_METADATA); 00078 if (links.size() > 0) root.appendChild(linksToXml(doc)); 00079 if (templates.size() > 0) root.appendChild(templatesToXml(doc)); 00080 if (instances.size() > 0) root.appendChild(instancesToXml(doc)); 00081 doc.appendChild(root); 00082 } 00083 00088 private Node linksToXml(Document doc) { 00089 Node node, root = doc.createElement(XML_TAG_FOR_LINK_LIST); 00090 Enumeration e = links.elements(); 00091 while (e.hasMoreElements()) 00092 { 00093 node = doc.createElement(XML_TAG_FOR_LINK); 00094 String link = (String) e.nextElement(); 00095 node.appendChild(doc.createTextNode(link)); 00096 root.appendChild(node); 00097 } 00098 return root; 00099 } 00100 00105 private Node templatesToXml(Document doc) { 00106 Node root = doc.createElement(XML_TAG_FOR_TEMPLATE_LIST); 00107 Enumeration e = templates.elements(); 00108 while (e.hasMoreElements()) 00109 { 00110 TemplateDescription t = (TemplateDescription) e.nextElement(); 00111 if (t.valid()) 00112 root.appendChild(t.createXmlNode(doc)); 00113 } 00114 return root; 00115 } 00116 00121 private Node instancesToXml(Document doc) { 00122 Node root = doc.createElement(XML_TAG_FOR_INSTANCE_LIST); 00123 Enumeration e = instances.elements(); 00124 while (e.hasMoreElements()) 00125 { 00126 InstanceDescription i = (InstanceDescription) e.nextElement(); 00127 if (i.valid()) 00128 root.appendChild(i.createXmlNode(doc)); 00129 } 00130 return root; 00131 } 00132 00133 public TemplateDescription getTemplate(String name) 00134 { 00135 return (TemplateDescription)templates.get(name); 00136 } 00137 00138 public Enumeration getTemplatesEnumeration() 00139 { 00140 return templates.elements(); 00141 } 00142 00143 public Hashtable getTemplatesHashtable() 00144 { 00145 return templates; 00146 } 00147 00152 public void putTemplate(String templateName, TemplateDescription template) { 00153 templates.put(templateName,template); 00154 } 00155 00156 public InstanceDescription getInstance(String name) 00157 { 00158 return (InstanceDescription)instances.get(name); 00159 } 00160 00161 public boolean deleteInstance(String name) 00162 { 00163 if (name == null) return false; 00164 00165 InstanceDescription i = getInstance(name); 00166 if (i == null) return false; 00167 00168 // can not delete a running instance! 00169 if (i.isRunning()) return false; 00170 00171 instances.remove(name); 00172 00173 return (null == getInstance(name)); 00174 } 00175 00176 public Enumeration getInstancesEnumeration() 00177 { 00178 return instances.elements(); 00179 } 00180 00181 public Hashtable getInstancesHashtable() 00182 { 00183 return instances; 00184 } 00185 00189 public void setFromXml(String xml) throws IllegalArgumentException { 00190 // convert to doc 00191 Document doc = Xml.readDocumentFromString(xml); 00192 if (doc == null) 00193 throw new IllegalArgumentException("XML string unparsable: " + xml); 00194 00195 // get the root element 00196 Element root = doc.getDocumentElement(); 00197 if (!(root.getTagName().equals(XML_TAG_FOR_METADATA))) 00198 throw new IllegalArgumentException( 00199 "XML string does not have root tag with " + XML_TAG_FOR_METADATA 00200 + "; found " + root.getTagName() + " instead."); 00201 00202 links.clear(); 00203 templates.clear(); 00204 instances.clear(); 00205 00206 // process the children 00207 NodeList children = root.getChildNodes(); 00208 final int length = children.getLength(); 00209 for(int i = 0; i < length; i++) 00210 { 00211 Node child = children.item(i); 00212 if (child.getNodeType() == Node.ELEMENT_NODE) 00213 { 00214 Element element = (Element)child; 00215 String name = element.getTagName(); 00216 if (name.equals(XML_TAG_FOR_LINK_LIST)) 00217 addToLinkList(element); 00218 else 00219 if (name.equals(XML_TAG_FOR_TEMPLATE_LIST)) 00220 addToTemplateList(element); 00221 else 00222 if (name.equals(XML_TAG_FOR_INSTANCE_LIST)) 00223 addToInstanceList(element); 00224 else 00225 throw new IllegalArgumentException("unrecognized XML tag = " + name); 00226 } 00227 } 00228 } 00229 00233 private void addToLinkList(Node node) { 00234 // process the links 00235 NodeList children = node.getChildNodes(); 00236 final int length = children.getLength(); 00237 for(int i = 0; i < length; i++) 00238 { 00239 Node child = children.item(i); 00240 if (child.getNodeType() == Node.ELEMENT_NODE) 00241 { 00242 Element element = (Element)child; 00243 String tag = element.getTagName(); 00244 if (tag.equals(XML_TAG_FOR_LINK)) 00245 { 00246 // get string from textNode 00247 // <link>link-name</link> 00248 links.add(child.getChildNodes().item(0).getNodeValue()); 00249 } 00250 } 00251 } 00252 } 00253 00257 private void addToTemplateList(Node node) { 00258 NodeList children = node.getChildNodes(); 00259 final int length = children.getLength(); 00260 for(int i = 0; i < length; i++) 00261 { 00262 Node child = children.item(i); 00263 if (child.getNodeType() == Node.ELEMENT_NODE) 00264 { 00265 Element element = (Element)child; 00266 String tag = element.getTagName(); 00267 if (tag.equals(XML_TAG_FOR_TEMPLATE)) 00268 { 00269 TemplateDescription t = new TemplateDescription(this, child); 00270 if (t != null) templates.put(t.getName(), t); 00271 } 00272 } 00273 } 00274 } 00275 00279 private void addToInstanceList(Node node) { 00280 NodeList children = node.getChildNodes(); 00281 final int length = children.getLength(); 00282 for(int i = 0; i < length; i++) 00283 { 00284 Node child = children.item(i); 00285 if (child.getNodeType() == Node.ELEMENT_NODE) 00286 { 00287 Element element = (Element)child; 00288 String tag = element.getTagName(); 00289 if (tag.equals(XML_TAG_FOR_INSTANCE)) 00290 { 00291 InstanceDescription n = new InstanceDescription(this, child); 00292 if (n != null) instances.put(n.getName(), n); 00293 } 00294 } 00295 } 00296 } 00297 00298 public void addToTemplateList(String name, String type) 00299 { 00300 TemplateDescription t = new TemplateDescription(this, name, type); 00301 templates.put(name,t); 00302 } 00303 00304 public void insertParametersToTempateFromBase 00305 (String name, RBNBBase base) 00306 { 00307 TemplateDescription t = (TemplateDescription)templates.get(name); 00308 if (t != null) 00309 t.setParamters(base.getParamterTable()); 00310 } 00311 00312 public void addToInstanceList(String name, String templateName) 00313 { 00314 InstanceDescription i = new InstanceDescription(this, name, templateName); 00315 instances.put(name,i); 00316 } 00317 00318 public void addToInstanceList 00319 (String name, String templateName, RBNBBase actualInstance) 00320 { 00321 InstanceDescription i = 00322 new InstanceDescription(this, name, templateName, actualInstance); 00323 instances.put(name,i); 00324 } 00325 00326 public void addParameterToInstance 00327 (String instanceName, String parameterName, String parameterType, Object value) 00328 { 00329 InstanceDescription i = (InstanceDescription)instances.get(instanceName); 00330 if (i != null) 00331 i.addParameter(parameterName, parameterType, value); 00332 } 00333 00334 public DefaultMutableTreeNode insertIntoSwingTree(DefaultMutableTreeNode top) 00335 { 00336 DefaultMutableTreeNode root = new DefaultMutableTreeNode("NeesPOP MCP Metadata"); 00337 root.add(makeSwingTreeLinks()); 00338 root.add(makeSwingTreeTemplates()); 00339 root.add(makeSwingTreeInstances()); 00340 top.add(root); 00341 return top; 00342 } 00343 00347 private MutableTreeNode makeSwingTreeLinks() { 00348 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Links"); 00349 Enumeration e = links.elements(); 00350 while (e.hasMoreElements()) 00351 root.add(new DefaultMutableTreeNode(e.nextElement())); 00352 return root; 00353 } 00354 00358 protected MutableTreeNode makeSwingTreeTemplates() { 00359 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Templates"); 00360 Enumeration e = templates.elements(); 00361 while (e.hasMoreElements()) 00362 { 00363 TemplateDescription t = (TemplateDescription)e.nextElement(); 00364 root.add(t.makeSwingTreeNode()); 00365 } 00366 return root; 00367 } 00368 00372 private MutableTreeNode makeSwingTreeInstances() { 00373 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Instances"); 00374 Enumeration e = instances.elements(); 00375 while (e.hasMoreElements()) 00376 { 00377 InstanceDescription i = (InstanceDescription)e.nextElement(); 00378 root.add(i.makeSwingTreeNode()); 00379 } 00380 return root; 00381 } 00382 00383 }

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