public static ArrayList<String> getTextValue(Element ele, String tagName) {

    ArrayList<String> returnVal = new ArrayList<String>();
    //		NodeList nll = ele.getElementsByTagName("*");

    NodeList nl = ele.getElementsByTagName(tagName);
    if (nl != null && nl.getLength() > 0) {
      for (int i = 0; i < nl.getLength(); i++) {
        Element el = (Element) nl.item(i);
        returnVal.add(el.getFirstChild().getNodeValue());
      }
    }
    return returnVal;
  }
 static ArrayList<PVAR_INST_DEF> processXMLAction(DOMParser p, InputSource isrc, State state)
     throws Exception {
   try {
     // showInputSource(isrc); System.exit(1); // TODO
     p.parse(isrc);
     Element e = p.getDocument().getDocumentElement();
     if (SHOW_XML) {
       System.out.println("Received action msg:");
       printXMLNode(e);
     }
     if (!e.getNodeName().equals(ACTIONS)) {
       System.out.println("ERROR: NO ACTIONS NODE");
       System.exit(1);
       return null;
     }
     NodeList nl = e.getElementsByTagName(ACTION);
     //			System.out.println(nl);
     if (nl != null) { // && nl.getLength() > 0) { // TODO: Scott
       ArrayList<PVAR_INST_DEF> ds = new ArrayList<PVAR_INST_DEF>();
       for (int i = 0; i < nl.getLength(); i++) {
         Element el = (Element) nl.item(i);
         String name = getTextValue(el, ACTION_NAME).get(0);
         ArrayList<String> args = getTextValue(el, ACTION_ARG);
         ArrayList<LCONST> lcArgs = new ArrayList<LCONST>();
         for (String arg : args) {
           if (arg.startsWith("@")) lcArgs.add(new RDDL.ENUM_VAL(arg));
           else lcArgs.add(new RDDL.OBJECT_VAL(arg));
         }
         String pvalue = getTextValue(el, ACTION_VALUE).get(0);
         Object value = getValue(name, pvalue, state);
         PVAR_INST_DEF d = new PVAR_INST_DEF(name, value, lcArgs);
         ds.add(d);
       }
       return ds;
     } else return new ArrayList<PVAR_INST_DEF>(); // FYI: May be unreachable. -Scott
     // } else { // TODO: Removed by Scott, NOOP should not be handled differently
     //	nl = e.getElementsByTagName(NOOP);
     //	if ( nl != null && nl.getLength() > 0) {
     //		ArrayList<PVAR_INST_DEF> ds = new ArrayList<PVAR_INST_DEF>();
     //		return ds;
     //	}
     // }
   } catch (Exception e) {
     // TODO Auto-generated catch block
     System.out.println("FATAL SERVER ERROR:\n" + e);
     // t.printStackTrace();
     throw e;
     // System.exit(1);
   }
 }
 static void processXMLSessionRequest(DOMParser p, InputSource isrc, Server server) {
   try {
     p.parse(isrc);
     Element e = p.getDocument().getDocumentElement();
     if (e.getNodeName().equals(SESSION_REQUEST)) {
       server.requestedInstance = getTextValue(e, PROBLEM_NAME).get(0);
       server.clientName = getTextValue(e, CLIENT_NAME).get(0);
       NodeList nl = e.getElementsByTagName(NO_XML_HEADER);
       if (nl.getLength() > 0) {
         NO_XML_HEADING = true;
       }
     }
     return;
   } catch (SAXException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
   } catch (IOException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
   }
   return;
 }