private static OperatorSpi createSourcelessOp1Op2GraphSpi() throws GraphException {
    String graphOpXml =
        "<graph id=\"SourcelessOp1Op2Graph\">\n"
            + "  <version>1.0</version>\n"
            + "  <header>\n"
            + "    <target refid=\"node2\" />\n"
            + "    <parameter name=\"THR\" defaultValue=\"42.0\" type=\"double\"/>\n"
            + "  </header>\n"
            + "  <node id=\"node1\">\n"
            + "    <operator>Op1</operator>\n"
            + "  </node>\n"
            + "  <node id=\"node2\">\n"
            + "    <operator>Op2</operator>\n"
            + "    <sources>\n"
            + "      <input refid=\"node1\"/>\n"
            + "    </sources>\n"
            + "    <parameters>\n"
            + "       <threshold refid=\"THR\"/>\n"
            + "    </parameters>\n"
            + "  </node>\n"
            + "</graph>";
    StringReader reader = new StringReader(graphOpXml);
    Graph graph = GraphIO.read(reader);

    return new GraphOp.Spi(graph) {};
  }
  private static OperatorSpi createUsesOtherGraphSpi() throws GraphException {
    String graphOpXml =
        "<graph id=\"UsesOtherGraph\">\n"
            + "  <version>1.0</version>\n"
            + "  <node id=\"node1\">\n"
            + "    <operator>SourcelessOp1Op2Graph</operator>\n"
            + "    <parameters>\n"
            + "       <THR>33</THR>\n"
            + "    </parameters>\n"
            + "  </node>\n"
            + "</graph>";
    StringReader reader = new StringReader(graphOpXml);
    Graph graph = GraphIO.read(reader);

    return new GraphOp.Spi(graph) {};
  }