@Override
  public Model resolve(Type type) {
    if (processedTypes.contains(type)) {
      return modelByType.get(type);
    } else {
      processedTypes.add(type);
    }
    if (LOGGER.isDebugEnabled()) {
      LOGGER.debug(String.format("resolve %s", type));
    }
    Iterator<ModelConverter> converters = this.getConverters();
    Model resolved = null;
    if (converters.hasNext()) {
      ModelConverter converter = converters.next();
      LOGGER.debug("trying extension " + converter);
      resolved = converter.resolve(type, this, converters);
    }
    if (resolved != null) {
      modelByType.put(type, resolved);
      if (resolved instanceof ModelImpl) {
        ModelImpl impl = (ModelImpl) resolved;
        if (impl.getName() != null) {
          modelByName.put(impl.getName(), resolved);
        }
      }
    }

    return resolved;
  }
Esempio n. 2
0
  @Test
  /**
   * Reads from TRIG with Jena API into Dataset 1, transforms one named Model from that Dataset into
   * Signingframework's API GraphCollection with one NamedGraph, transforms (converts) that
   * NamedGraph into Jena's Model, and checks if the resulting Model is the same as original Model.
   */
  public void namedGraphToModelTest() throws Exception {

    for (String resourceFile : RESOURCE_FILES) {

      // prepare GraphCollection with NamedGraph to be converted:
      InputStream is = this.getClass().getResourceAsStream(resourceFile);
      Dataset dataset = DatasetFactory.createMem();
      RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang());
      is.close();
      String modelName = dataset.listNames().next();
      Model model1 = dataset.getNamedModel(modelName);
      // this method is not tested here and used just for input
      // generation and to make it easier Namedgraph<->Model comparison
      // (but it's tested in other method, see modelToGraphCollectionTest())
      GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset);
      LinkedList<NamedGraph> graphs = gc.getGraphs();
      String graphName = null;
      for (NamedGraph g : graphs) {
        if (!g.getName().isEmpty() && g.getName().contains(modelName)) {
          graphName = g.getName();
          break;
        }
      }
      // use this when debugging:
      // File outFile0 = File.createTempFile("won", ".trig");
      // System.out.println(outFile0);
      // OutputStream os0 = new FileOutputStream(outFile0);
      // TriGPlusWriter.writeFile(gc, outFile0.getAbsolutePath(), false);
      // os0.close();

      // test convert from NamedGraph of GraphCollection into Model
      Model model2 = ModelConverter.namedGraphToModel(graphName, gc);
      Dataset dataset2 = DatasetFactory.createMem();
      dataset2.addNamedModel(modelName, model2);
      // TODO maybe chng the API so that the prefix map is taken care of in the converter:
      // if it makes sense from the the usage of this in Assembler point of view
      dataset2.getDefaultModel().setNsPrefixes(dataset2.getNamedModel(modelName).getNsPrefixMap());

      File outFile = testFolder.newFile();
      // use this when debugging:
      // File outFile = File.createTempFile("won", ".trig");
      // System.out.println(outFile);
      OutputStream os = new FileOutputStream(outFile);
      RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang());
      os.close();

      // make sure that the original Model that was used to generate test input
      // GraphCollection with NamedGraph is isomorphic with the Model after
      // conversion is applied:
      Assert.assertTrue(model1.listStatements().hasNext() && model2.listStatements().hasNext());
      Assert.assertTrue(model1.isIsomorphicWith(model2));
    }
  }
 @Override
 public Property resolveProperty(Type type, Annotation[] annotations) {
   if (LOGGER.isDebugEnabled()) {
     LOGGER.debug(String.format("resolveProperty %s", type));
   }
   Iterator<ModelConverter> converters = this.getConverters();
   if (converters.hasNext()) {
     ModelConverter converter = converters.next();
     return converter.resolveProperty(type, this, annotations, converters);
   }
   return null;
 }
Esempio n. 4
0
  @Override
  public PMML encodePMML() {
    RGenericVector train = getObject();

    RExp finalModel = train.getValue("finalModel");
    RGenericVector preProcess = (RGenericVector) train.getValue("preProcess");

    ConverterFactory converterFactory = ConverterFactory.newInstance();

    ModelConverter<RExp> converter =
        (ModelConverter<RExp>) converterFactory.newConverter(finalModel);

    FeatureMapper featureMapper;

    if (preProcess != null) {
      featureMapper = new PreProcessFeatureMapper(preProcess);
    } else {
      featureMapper = new FeatureMapper();
    }

    return converter.encodePMML(featureMapper);
  }
Esempio n. 5
0
  public void testSimple() throws Exception {
    final ModelConverter mr = modelResolver();
    Model model = mr.resolve(ModelWithJodaDateTime.class, new ModelConverterContextImpl(mr), null);
    assertNotNull(model);

    Map<String, Property> props = model.getProperties();
    assertEquals(2, props.size());

    for (Map.Entry<String, Property> entry : props.entrySet()) {
      String name = entry.getKey();
      Property prop = entry.getValue();

      if ("name".equals(name)) {
        assertEquals("string", prop.getType());
      } else if ("createdAt".equals(name)) {
        assertEquals("string", prop.getType());
        assertEquals("date-time", prop.getFormat());
      } else {
        fail("Unknown property '" + name + "'");
      }
    }
  }
Esempio n. 6
0
  @Test
  /**
   * Reads from TRIG with Jena API into Dataset 1, transforms one named graph from that Dataset into
   * Signingframework's API GraphCollection and writes it with Signingframework's API, reads the
   * result with Jena API into Dataset 2, and checks if the specified named graph model from Dataset
   * 1 is isomorphic with the same named graph model from Dataset 2.
   */
  public void modelToGraphCollectionTest() throws Exception {

    for (String resourceFile : RESOURCE_FILES) {

      // prepare the input Dataset containg the Model to be converted
      InputStream is = this.getClass().getResourceAsStream(resourceFile);
      File outFile = testFolder.newFile();
      // use this when debugging:
      // File outFile = File.createTempFile("won", ".trig");
      // System.out.println(outFile);
      Dataset dataset = DatasetFactory.createMem();
      RDFDataMgr.read(dataset, is, RDFFormat.TRIG.getLang());
      is.close();

      // test the convertion from the Model to the NamedGraph
      String modelName = dataset.listNames().next();
      Model model = dataset.getNamedModel(modelName);
      // the method to be tested
      GraphCollection gc = ModelConverter.modelToGraphCollection(modelName, dataset);
      TriGPlusWriter.writeFile(gc, outFile.getAbsolutePath(), false);

      // check that the resulting graph collection is a representation
      // of the converted model. For this, read the resulting graph collection
      // as a Model with Jena API
      InputStream is2 = new FileInputStream(outFile);
      Dataset dataset2 = DatasetFactory.createMem();
      RDFDataMgr.read(dataset2, is2, RDFFormat.TRIG.getLang());
      is2.close();
      Model model2 = dataset2.getNamedModel(modelName);
      File outFile2 = testFolder.newFile();
      // use this when debugging:
      // File outFile2 = File.createTempFile("won", ".trig");
      // System.out.println(outFile2);
      OutputStream os = new FileOutputStream(outFile2);
      RDFDataMgr.write(os, dataset2, RDFFormat.TRIG.getLang());
      os.close();

      // check that the model obtained from resulting graph collection is
      // a representation of the original converted model.
      Assert.assertTrue(model.listStatements().hasNext() && model2.listStatements().hasNext());
      Assert.assertTrue(model.isIsomorphicWith(model2));
    }
  }