Exemple #1
0
 public String printTextualRepresentation() {
   String description = QueryManager.addColouring("the negation of ");
   ArrayList children = getChildNodes();
   if (children != null) {
     Iterator<PerformanceTreeNode> i = children.iterator();
     while (i.hasNext()) {
       PerformanceTreeNode child = i.next();
       // print out child's textual representation
       QueryManager.colourUp();
       description += child.printTextualRepresentation();
       QueryManager.colourDown();
     }
   } else {
     description +=
         QueryManager.addColouring("a boolean expression that has not been specified yet");
   }
   return description + QueryManager.addColouring(" holds");
 }
  public String printTextualRepresentation() {
    String description = "";
    String op = " and / or ";

    if (getOperation().equals("and")) op = " and ";
    else if (getOperation().equals("or")) op = " or ";

    ArrayList children = getChildNodes();
    if (children != null) {
      Iterator<PerformanceTreeNode> i = children.iterator();
      while (i.hasNext()) {
        PerformanceTreeNode child = i.next();
        QueryManager.colourUp();
        description += child.printTextualRepresentation();
        QueryManager.colourDown();
        if (i.hasNext()) description += QueryManager.addColouring(op);
        else {
          if (children.size() == 1) {
            description += QueryManager.addColouring(op);
            QueryManager.colourUp();
            description +=
                QueryManager.addColouring("another boolean value that has not been specified yet ");
            QueryManager.colourDown();
          }
        }
      }
    } else {
      QueryManager.colourUp();
      description += QueryManager.addColouring("a boolean value that has not been specified yet ");
      QueryManager.colourDown();
      description += QueryManager.addColouring(op);
      QueryManager.colourUp();
      description +=
          QueryManager.addColouring("another boolean value that has also not been specified yet ");
      QueryManager.colourDown();
    }
    return description + QueryManager.addColouring("holds ");
  }
  /**
   * This method is responsible for saving a macro as an XML document. The document follows the
   * structure of the macro tree.
   */
  public static void saveMacro(final MacroDefinition macroDef, final String saveLocation)
      throws NullPointerException, IOException, ParserConfigurationException, DOMException,
          TransformerConfigurationException, TransformerException {

    MacroWriter.macro = macroDef;
    File macroFile = null;

    if (saveLocation.equals("")) {
      // test if macro save location exists
      File macroSaveLocation = new File(MacroManager.macroSaveLocation);
      if (!macroSaveLocation.exists()) macroSaveLocation.mkdir();

      String macroPath = MacroManager.macroSaveLocation + MacroWriter.macro.getName() + ".xml";
      macroFile = new File(macroPath);
    } else {
      macroFile = new File(saveLocation);
    }

    Document ptDOM = null;
    StreamSource xsltSource = null;
    Transformer transformer = null;

    try {
      // Build a PTML Document
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = builderFactory.newDocumentBuilder();
      ptDOM = builder.newDocument();

      // PTML Element
      Element ptmlElement = ptDOM.createElement("ptml");
      ptDOM.appendChild(ptmlElement);

      // Macro Element
      Element macroElement = ptDOM.createElement("macro");
      macroElement.setAttribute("name", MacroWriter.macro.getName());
      macroElement.setAttribute("description", MacroWriter.macro.getDescription());
      macroElement.setAttribute("returntype", MacroWriter.macro.getReturnType());
      ptmlElement.appendChild(macroElement);

      // put nodes into HashMap, so that we can check whether they have
      // been processed already
      // (in case of recursion when child nodes are processed)
      ArrayList<PerformanceTreeNode> nodesArray = MacroWriter.macro.getMacroNodes();
      Iterator<PerformanceTreeNode> i = nodesArray.iterator();
      while (i.hasNext()) {
        PerformanceTreeNode nodeNotProcessedYet = i.next();
        String nodeID = nodeNotProcessedYet.getId();
        MacroWriter.nodesProcessed.put(nodeID, "false");
      }

      // serialise node and their arcs
      i = nodesArray.iterator();
      while (i.hasNext()) {
        PerformanceTreeNode nodeToSerialise = i.next();
        String nodeToSerialiseID = nodeToSerialise.getId();
        boolean nodeProcessedAlready = false;
        if ((MacroWriter.nodesProcessed.get(nodeToSerialiseID)).equals("true")) {
          nodeProcessedAlready = true;
        } else if ((MacroWriter.nodesProcessed.get(nodeToSerialiseID)).equals("false")) {
          nodeProcessedAlready = false;
        }

        if (!nodeProcessedAlready)
          MacroWriter.createNodeElement(nodeToSerialise, macroElement, ptDOM);
      }

      // serialise state and action labels
      MacroWriter.serialiseStateAndActionLabels(macroElement, ptDOM);

      ptDOM.normalize();

      // Create Transformer with XSL Source File
      xsltSource =
          new StreamSource(
              Thread.currentThread()
                  .getContextClassLoader()
                  .getResourceAsStream(
                      "pipe"
                          + System.getProperty("file.separator")
                          + "modules"
                          + System.getProperty("file.separator")
                          + "queryeditor"
                          + System.getProperty("file.separator")
                          + "io"
                          + System.getProperty("file.separator")
                          + "WriteMacroXML.xsl"));
      transformer = TransformerFactory.newInstance().newTransformer(xsltSource);

      // Write file and do XSLT transformation to generate correct PTML
      File outputObjectArrayList = macroFile;
      DOMSource source = new DOMSource(ptDOM);
      StreamResult result = new StreamResult(outputObjectArrayList);
      transformer.transform(source, result);
    } catch (DOMException e) {
      System.out.println(
          "DOMException thrown in saveMacro()"
              + " : MacroWriter Class : modules.queryeditor.io Package"
              + " : filename=\""
              + macroFile.getCanonicalPath()
              + "\" xslt=\""
              + xsltSource.getSystemId()
              + "\" transformer=\""
              + transformer.getURIResolver()
              + "\"");
    } catch (ParserConfigurationException e) {
      System.out.println(
          "ParserConfigurationException thrown in saveMacro()"
              + " : MacroWriter Class : modules.queryeditor.io Package"
              + " : filename=\""
              + macroFile.getCanonicalPath()
              + "\" xslt=\""
              + "\" transformer=\""
              + "\"");
    } catch (TransformerConfigurationException e) {
      System.out.println(
          "TransformerConfigurationException thrown in saveMacro()"
              + " : MacroWriter Class : modules.queryeditor.io Package"
              + " : filename=\""
              + macroFile.getCanonicalPath()
              + "\" xslt=\""
              + xsltSource.getSystemId()
              + "\" transformer=\""
              + transformer.getURIResolver()
              + "\"");
    } catch (TransformerException e) {
      System.out.println(
          "TransformerException thrown in saveMacro()"
              + " : MacroWriter Class : modules.queryeditor.io Package"
              + " : filename=\""
              + macroFile.getCanonicalPath()
              + "\" xslt=\""
              + xsltSource.getSystemId()
              + "\" transformer=\""
              + transformer.getURIResolver()
              + "\"");
    }
  }
  /**
   * This method serialises the information contained within a PerformanceTreeNode and recurses down
   * to serialise info about its arcs
   */
  private static void createNodeElement(
      final PerformanceTreeNode inputNode, final Element parentElement, final Document document) {

    Element nodeElement = document.createElement("node");

    // common data to serialise for all PT nodes
    String nodeID = inputNode.getId();
    Double nodePositionX = inputNode.getPositionXObject();
    Double nodePositionY = inputNode.getPositionYObject();
    PTNode nodeType = inputNode.getNodeType();
    String nodeIncomingArcID = inputNode.getIncomingArcID();
    nodeElement.setAttribute("id", nodeID);
    nodeElement.setAttribute("type", nodeType.toString());
    nodeElement.setAttribute("x", String.valueOf(nodePositionX));
    nodeElement.setAttribute("y", String.valueOf(nodePositionY));
    nodeElement.setAttribute("incomingArc", nodeIncomingArcID);

    // indicate that this node has been processed already
    MacroWriter.nodesProcessed.put(nodeID, "true");

    if (nodeIncomingArcID == null || nodeIncomingArcID.equals("")) {
      Element tree = document.createElement("tree");
      parentElement.appendChild(tree);
      tree.appendChild(nodeElement);
    } else {
      parentElement.appendChild(nodeElement);
    }

    // special cases
    if (inputNode instanceof ValueNode) {
      String nodeLabel;
      if (((ValueNode) inputNode).getNodeLabelObject() != null)
        nodeLabel = ((ValueNode) inputNode).getNodeLabel();
      else nodeLabel = "";
      nodeElement.setAttribute("label", nodeLabel);
    } else if (inputNode instanceof OperationNode) {
      String nodeOperation = ((OperationNode) inputNode).getOperation();
      nodeElement.setAttribute("operation", nodeOperation);
      Element outgoingArcsElement = document.createElement("outgoingArcs");
      nodeElement.appendChild(outgoingArcsElement);
      Collection nodeOutgoingArcIDs = ((OperationNode) inputNode).getOutgoingArcIDs();
      Iterator i = nodeOutgoingArcIDs.iterator();
      while (i.hasNext()) {
        String outgoingArcID = (String) i.next();
        PerformanceTreeArc nodeArc = MacroWriter.macro.getMacroArc(outgoingArcID);
        MacroWriter.createArcElement(nodeArc, outgoingArcsElement, document);
      }

      Element childNodesElement = document.createElement("childNodes");
      nodeElement.appendChild(childNodesElement);
      i = nodeOutgoingArcIDs.iterator();
      while (i.hasNext()) {
        String outgoingArcID = (String) i.next();
        PerformanceTreeArc nodeArc = MacroWriter.macro.getMacroArc(outgoingArcID);
        if (nodeArc.getTarget() != null) {
          PerformanceTreeNode childNode = nodeArc.getTarget();
          boolean nodeProcessedAlready = false;
          if ((MacroWriter.nodesProcessed.get(childNode.getId())).equals("true")) {
            nodeProcessedAlready = true;
          } else if ((MacroWriter.nodesProcessed.get(childNode.getId())).equals("false")) {
            nodeProcessedAlready = false;
          }
          if (!nodeProcessedAlready)
            MacroWriter.createNodeElement(childNode, childNodesElement, document);
        }
      }
    }
  }