Package org.apache.clerezza.templating.seedsnipe

Source Code of org.apache.clerezza.templating.seedsnipe.GraphNodeTest

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.clerezza.templating.seedsnipe;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Assert;
import org.junit.Test;
import org.apache.clerezza.rdf.core.BNode;
import org.apache.clerezza.rdf.core.Graph;
import org.apache.clerezza.rdf.core.NonLiteral;
import org.apache.clerezza.rdf.core.PlainLiteral;
import org.apache.clerezza.rdf.core.Resource;
import org.apache.clerezza.rdf.core.TripleCollection;
import org.apache.clerezza.rdf.core.UriRef;
import org.apache.clerezza.rdf.core.impl.PlainLiteralImpl;
import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
import org.apache.clerezza.rdf.core.impl.TripleImpl;
import org.apache.clerezza.rdf.core.serializedform.Parser;
import org.apache.clerezza.rdf.core.serializedform.UnsupportedFormatException;
import org.apache.clerezza.rdf.ontologies.RDF;
import org.apache.clerezza.rdf.ontologies.RDFS;
import org.apache.clerezza.rdf.utils.GraphNode;
import org.apache.clerezza.rdf.utils.RdfList;
import org.apache.clerezza.templating.RenderingFunction;
import org.apache.clerezza.templating.RenderingFunctions;
import org.apache.clerezza.templating.seedsnipe.datastructure.DataFieldResolver;
import org.apache.clerezza.templating.seedsnipe.graphnodeadapter.GraphNodeDataFieldResolver;
import org.apache.clerezza.templating.seedsnipe.simpleparser.DefaultParser;

/**
* Unit Test for RDF Templating.
*
* @author reto, daniel
*/
public class GraphNodeTest {

  private RenderingFunctions simpleFunctions = new RenderingFunctions() {

    @Override
    public RenderingFunction<Object, String> getDefaultFunction() {
      return new RenderingFunction<Object, String>() {

        @Override
        public String process(Object... values) {
          return values[0].toString();
        }
      };
    }

    @Override
    public Map<String, RenderingFunction> getNamedFunctions() {
      Map<String, RenderingFunction> result = new HashMap<String, RenderingFunction>();
      result.put("noop", new RenderingFunction() {

        @Override
        public Object process(Object... value) {
          return value[0];
        }
      });
      result.put("getAudio", new RenderingFunction() {

        @Override
        public Object process(Object... value) {
          return "audio";
        }
      });
      result.put("uppercase", new RenderingFunction() {

        @Override
        public Object process(Object... value) {
          return value[0].toString().toUpperCase();
        }
      });
      return result;
    }
  };

  @Test
  public void simple() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${rdfs:comment}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"a resource\"", writer.toString());
  }

  @Test
  public void inverse() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral subject = new UriRef("http://example.org/subject");
    UriRef object = new UriRef("http://example.org/object");
    mGraph.add(new TripleImpl(subject, RDFS.comment, object));
    GraphNode node = new GraphNode(object, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${-rdfs:comment}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("<http://example.org/subject>", writer.toString());
  }

  @Test
  public void defaultFunction() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, new RenderingFunctions() {

      @Override
      public RenderingFunction<Object, String> getDefaultFunction() {
        return new RenderingFunction() {

          @Override
          public Object process(Object... value) {
            return "VALUE:" + value[0].toString();
          }
        };
      }

      @Override
      public Map<String, RenderingFunction> getNamedFunctions() {
        throw new UnsupportedOperationException("Not supported yet.");
      }
    });

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${rdfs:comment}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("VALUE:\"a resource\"", writer.toString());
  }

  @Test
  public void simpleUriRefRoot() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new UriRef("http://example.org/");
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${.}${rdfs:comment}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("<http://example.org/>\"a resource\"", writer.toString());
  }

  @Test
  public void simpleWithNoOp() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${noop(rdfs:comment)}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"a resource\"", writer.toString());
  }

  @Test
  public void simpleWithUppercase() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${uppercase(rdfs:comment)}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"A RESOURCE\"", writer.toString());
  }

  @Test
  public void simpleWithLiteralUppercase() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${uppercase(\"a string\")}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("A STRING", writer.toString());
  }

  @Test
  public void simpleWithCombinedFunctions() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${noop(uppercase(noop(rdfs:comment)))}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"A RESOURCE\"", writer.toString());
  }

  @Test
  public void multiple() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("another resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("Multiple\n${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#} ${loop}\t${rdfs:comment}\n${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertTrue(writer.toString().contains("\"a resource\"") && writer.toString().contains("\"another resource\""));
  }

  @Test
  public void fieldTest() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${if rdfs:comment}yes${/if} and ${if rdfs:label}yes${else}no${/if}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("yes and no", writer.toString());
  }

  @Test
  public void fieldTest2() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    /* without the final access to field it does not work,
    field access in if-conditins does not count for loops*/
    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}${loop}${if rdfs:comment}${rdfs:comment}${/if} and ${if rdfs:label}yes${else}no${/if}${rdfs:comment}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"a resource\" and no\"a resource\"", writer.toString());
  }

  @Test
  public void foaf() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    final Parser parser = Parser.getInstance();

    try {
      Graph deserializedGraph = parser.parse(getClass().getResourceAsStream("libby-foaf.rdf"), "application/rdf+xml");
      mGraph.addAll(deserializedGraph);
      UriRef document = new UriRef("http://swordfish.rdfweb.org/people/libby/rdfweb/webwho.xrdf");

      Assert.assertTrue((mGraph.size() > 0));

      GraphNode node = new GraphNode(document, mGraph);
      DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

      String templateString =
          "FOAF: ${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}" +
          "${ns:foaf=http://xmlns.com/foaf/0.1/}" +
          "${foaf:maker/foaf:name}" +
          "${loop}" +
          "${loop}" +
          "${foaf:maker/foaf:knows/foaf:name}" +
          "${/loop}" +
          "${/loop}";
      StringReader reader = new StringReader(templateString);
      StringWriter writer = new StringWriter();

      new DefaultParser(reader, writer).perform(dataFieldResolver);

      Assert.assertTrue(writer.toString().contains("Martin Poulter") && writer.toString().contains("Kal Ahmed") && writer.toString().contains("Libby Miller"));

    } catch (UnsupportedFormatException e) {
      e.printStackTrace();
    }
  }

  @Test
  public void foafSorted() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    final Parser parser = Parser.getInstance();

    try {
      Graph deserializedGraph = parser.parse(getClass().getResourceAsStream("libby-foaf.rdf"), "application/rdf+xml");
      mGraph.addAll(deserializedGraph);
      UriRef document = new UriRef("http://swordfish.rdfweb.org/people/libby/rdfweb/webwho.xrdf");

      Assert.assertTrue((mGraph.size() > 0));

      GraphNode node = new GraphNode(document, mGraph);
      DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

      String templateString =
          "FOAF: ${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}" +
          "${ns:foaf=http://xmlns.com/foaf/0.1/}" +
          "${loop}" +
          "${loop sort asc foaf:maker/foaf:knows/foaf:name}" +
          "${foaf:maker/foaf:knows/foaf:name}" +
          "${/loop}" +
          "${/loop}";
      StringReader reader = new StringReader(templateString);
      StringWriter writer = new StringWriter();

      new DefaultParser(reader, writer).perform(dataFieldResolver);


      final String templateResult = writer.toString();
      Assert.assertTrue(templateResult.contains("Martin Poulter"));
      Assert.assertTrue(templateResult.indexOf("Martin Poulter") < templateResult.indexOf("Sarah Miller"));
      Assert.assertTrue(templateResult.indexOf("Sarah Miller") < templateResult.indexOf("Wendy Chisholm"));


    } catch (UnsupportedFormatException e) {
      e.printStackTrace();
    }
  }

  @Test
  public void rdfListAsPropertyValue() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    NonLiteral listNode = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDF.value, listNode));
    List<Resource> list = new RdfList(listNode, mGraph);
    list.add(new PlainLiteralImpl("first"));
    list.add(new PlainLiteralImpl("second"));
    list.add(new PlainLiteralImpl("third"));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    StringReader reader = new StringReader(
        "${ns:rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#}" +
        "${loop}${loop}${rdf:value/contains}${/loop}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"first\"\"second\"\"third\"", writer.toString());
  }

  @Test
  public void rdfListAsRoot() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    List<Resource> list = new RdfList(resource, mGraph);
    list.add(new PlainLiteralImpl("first"));
    list.add(new PlainLiteralImpl("second"));
    list.add(new PlainLiteralImpl("third"));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    StringReader reader = new StringReader(
        "${loop}${./contains}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"first\"\"second\"\"third\"", writer.toString());
  }

  @Test
  public void rdfListAsRootElementProperties() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    List<Resource> list = new RdfList(resource, mGraph);
    list.add(createLabeledRes("first", mGraph));
    list.add(createLabeledRes("second", mGraph));
    list.add(createLabeledRes("third", mGraph));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    StringReader reader = new StringReader(
        "${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}" +
        "${loop}${loop}${contains/rdfs:label}${/loop}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"first\"\"second\"\"third\"", writer.toString());
  }

  @Test
  public void rdfListAsRootElementPropertiesWithPresenceTest() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };
    List<Resource> list = new RdfList(resource, mGraph);
    list.add(createLabeledRes("first", mGraph));
    list.add(createLabeledRes("second", mGraph));
    list.add(createLabeledRes("third", mGraph));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    StringReader reader = new StringReader(
        "${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}" +
        "${loop}${if contains/rdfs:label}${contains/rdfs:label}${/if}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"first\"\"second\"\"third\"", writer.toString());
  }

  @Test
  public void compareFunctionResultInIf() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode();
    mGraph.add(new TripleImpl(resource, RDFS.comment, new PlainLiteralImpl("a resource")));
    GraphNode node = new GraphNode(resource, mGraph);
    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);

    StringReader reader = new StringReader("${ns:rdfs=http://www.w3.org/2000/01/rdf-schema#}" +
        "${if getAudio(\"foo/bar\") = \"audio\"}noproblem${/if}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("noproblem", writer.toString());
  }

  @Test
  public void loopWithEmptyList() throws IOException {
    TripleCollection mGraph = new SimpleMGraph();
    NonLiteral resource = new BNode() {
    };

    NonLiteral listNode1 = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDF.value, listNode1));
    List<Resource> list1 = new RdfList(listNode1, mGraph);
    list1.add(new PlainLiteralImpl("first"));
    list1.add(new PlainLiteralImpl("second"));
    list1.add(new PlainLiteralImpl("third"));

    NonLiteral listNode2 = new BNode() {
    };
    mGraph.add(new TripleImpl(resource, RDF.value, listNode2));
    RdfList.createEmptyList(listNode2, mGraph);

    GraphNode node = new GraphNode(resource, mGraph);

    DataFieldResolver dataFieldResolver = new GraphNodeDataFieldResolver(node, simpleFunctions);
    StringReader reader = new StringReader(
        "${ns:rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#}" +
        "${loop}${loop}${rdf:value/contains}${/loop}${/loop}");
    StringWriter writer = new StringWriter();

    new DefaultParser(reader, writer).perform(dataFieldResolver);

    Assert.assertEquals("\"first\"\"second\"\"third\"", writer.toString());
  }

  private NonLiteral createLabeledRes(String label, TripleCollection mGraph) {
    BNode bNode = new BNode();
    PlainLiteral lit = new PlainLiteralImpl(label);
    mGraph.add(new TripleImpl(bNode, RDFS.label, lit));
    return bNode;
  }
}
TOP

Related Classes of org.apache.clerezza.templating.seedsnipe.GraphNodeTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.