package org.openprovenance.prov.json;
import java.io.IOException;
import org.openprovenance.prov.model.Document;
import org.openprovenance.prov.xml.UncheckedTestException;
import com.fasterxml.jackson.databind.JsonNode;
import com.github.fge.jackson.JsonLoader;
import com.github.fge.jsonschema.exceptions.ProcessingException;
import com.github.fge.jsonschema.main.JsonSchema;
import com.github.fge.jsonschema.main.JsonSchemaFactory;
import com.github.fge.jsonschema.report.ProcessingReport;
/**
* Round trip testing JavaBean -> PROV-JSON -> JavaBean
*/
public class RoundTripFromJavaTest extends org.openprovenance.prov.xml.RoundTripFromJavaTest
{
final Converter convert=new Converter(pFactory);
final JsonSchema schema;
public RoundTripFromJavaTest(String testName) throws IOException, ProcessingException {
super(testName);
final JsonNode schemaJSON = JsonLoader.fromPath("schema/prov-json-schema-v4.js");
final JsonSchemaFactory factory = JsonSchemaFactory.byDefault();
this.schema = factory.getJsonSchema(schemaJSON);
}
@Override
public String extension() {
return ".json";
}
@Override
public Document readDocument(String file) {
try {
return convert.readDocument(file);
} catch (Exception e) {
throw new UncheckedTestException(e);
}
}
@Override
public void writeDocument(Document doc, String file) {
try {
convert.writeDocument(doc, file);
} catch (Exception e) {
throw new UncheckedTestException(e);
}
}
@Override
public boolean checkSchema(String name) {
if (name.endsWith("association2" + extension())
|| name.endsWith("end1" + extension())
|| name.endsWith("end4" + extension())
|| name.endsWith("delegation1" + extension())
|| name.endsWith("delegation2" + extension())
|| name.endsWith("dictionaryRemoval1-S" + extension())
|| name.endsWith("dictionaryRemoval1-M" + extension())
|| name.endsWith("dictionaryRemoval2-S" + extension())
|| name.endsWith("dictionaryRemoval2-M" + extension())
|| name.endsWith("attribution1" + extension())
|| name.endsWith("attribution2" + extension())
|| name.endsWith("mention1" + extension())
|| name.endsWith("derivation1" + extension())
|| name.endsWith("derivation2" + extension())
|| name.endsWith("derivation9" + extension())
|| name.endsWith("communication1" + extension())
|| name.endsWith("communication2" + extension())
|| name.endsWith("influence1" + extension())
|| name.endsWith("influence2" + extension())
|| name.endsWith("start1" + extension())
|| name.endsWith("start4" + extension())
|| name.endsWith("usage1" + extension())
|| name.endsWith("dictionaryInsertion1-S" + extension())
|| name.endsWith("dictionaryInsertion1-M" + extension())
|| name.endsWith("dictionaryInsertion2-S" + extension())
|| name.endsWith("dictionaryInsertion2-M" + extension())
|| name.contains("scruffy")
) {
return false;
}
return true;
}
@Override
public void doCheckSchema1(String file) {
try {
final JsonNode fileJSON = JsonLoader.fromPath(file);
ProcessingReport report = schema.validate(fileJSON);
if (!report.isSuccess()) {
System.err.println("Cannot validate " + file + " against the PROV-JSON schema.");
System.err.println(report);
}
assertTrue(report.isSuccess());
} catch (IOException e) {
System.err.println("Cannot load file: " + e.getMessage());
} catch (ProcessingException e) {
System.err.println("Parsing failed: " + e.getMessage());
}
}
}