Search in sources :

Example 1 with Manifest

use of org.openrefine.wikidata.manifests.Manifest in project OpenRefine by OpenRefine.

the class PreviewWikibaseSchemaCommand method doPost.

/**
 * This command uses POST but is left CSRF-unprotected since it does not
 * incur a side effect or state change in the backend.
 * The reason why it uses POST is to make sure large schemas and engines
 * can be passed as parameters.
 */
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        Project project = getProject(request);
        response.setCharacterEncoding("UTF-8");
        response.setHeader("Content-Type", "application/json");
        String schemaJson = request.getParameter("schema");
        WikibaseSchema schema = null;
        if (schemaJson != null) {
            try {
                schema = WikibaseSchema.reconstruct(schemaJson);
            } catch (IOException e) {
                respondError(response, "Wikibase schema could not be parsed. Error message: " + e.getMessage());
                return;
            }
        } else {
            schema = (WikibaseSchema) project.overlayModels.get("wikibaseSchema");
        }
        if (schema == null) {
            respondError(response, "No Wikibase schema provided.");
            return;
        }
        Manifest manifest = null;
        String manifestJson = request.getParameter("manifest");
        if (manifestJson != null) {
            try {
                manifest = ManifestParser.parse(manifestJson);
            } catch (ManifestException e) {
                respondError(response, "Wikibase manifest could not be parsed. Error message: " + e.getMessage());
                return;
            }
        }
        if (manifest == null) {
            respondError(response, "No Wikibase manifest provided.");
            return;
        }
        QAWarningStore warningStore = new QAWarningStore();
        // Evaluate project
        Engine engine = getEngine(request, project);
        List<TermedStatementEntityEdit> editBatch = schema.evaluate(project, engine, warningStore);
        // Inspect the edits and generate warnings
        EditInspector inspector = new EditInspector(warningStore, manifest);
        inspector.inspect(editBatch, schema);
        // Dump the first 10 edits, scheduled with the default scheduler
        WikibaseAPIUpdateScheduler scheduler = new WikibaseAPIUpdateScheduler();
        List<TermedStatementEntityEdit> nonNullEdits = scheduler.schedule(editBatch).stream().filter(e -> !e.isNull()).collect(Collectors.toList());
        List<TermedStatementEntityEdit> firstEdits = nonNullEdits.stream().limit(10).collect(Collectors.toList());
        PreviewResults previewResults = new PreviewResults(warningStore.getWarnings(), warningStore.getMaxSeverity(), warningStore.getNbWarnings(), nonNullEdits.size(), firstEdits);
        respondJSON(response, previewResults);
    } catch (Exception e) {
        respondException(response, e);
    }
}
Also used : Project(com.google.refine.model.Project) ServletException(javax.servlet.ServletException) ManifestException(org.openrefine.wikidata.manifests.ManifestException) TermedStatementEntityEdit(org.openrefine.wikidata.updates.TermedStatementEntityEdit) HttpServletResponse(javax.servlet.http.HttpServletResponse) IOException(java.io.IOException) EditInspector(org.openrefine.wikidata.qa.EditInspector) Collectors(java.util.stream.Collectors) ManifestParser(org.openrefine.wikidata.manifests.ManifestParser) List(java.util.List) HttpServletRequest(javax.servlet.http.HttpServletRequest) WikibaseSchema(org.openrefine.wikidata.schema.WikibaseSchema) WikibaseAPIUpdateScheduler(org.openrefine.wikidata.updates.scheduler.WikibaseAPIUpdateScheduler) CommandUtilities.respondError(org.openrefine.wikidata.commands.CommandUtilities.respondError) QAWarningStore(org.openrefine.wikidata.qa.QAWarningStore) Command(com.google.refine.commands.Command) Engine(com.google.refine.browsing.Engine) Manifest(org.openrefine.wikidata.manifests.Manifest) IOException(java.io.IOException) Manifest(org.openrefine.wikidata.manifests.Manifest) ManifestException(org.openrefine.wikidata.manifests.ManifestException) ServletException(javax.servlet.ServletException) ManifestException(org.openrefine.wikidata.manifests.ManifestException) IOException(java.io.IOException) Project(com.google.refine.model.Project) EditInspector(org.openrefine.wikidata.qa.EditInspector) WikibaseAPIUpdateScheduler(org.openrefine.wikidata.updates.scheduler.WikibaseAPIUpdateScheduler) TermedStatementEntityEdit(org.openrefine.wikidata.updates.TermedStatementEntityEdit) WikibaseSchema(org.openrefine.wikidata.schema.WikibaseSchema) QAWarningStore(org.openrefine.wikidata.qa.QAWarningStore) Engine(com.google.refine.browsing.Engine)

Example 2 with Manifest

use of org.openrefine.wikidata.manifests.Manifest in project OpenRefine by OpenRefine.

the class EditInspectorTest method toSkipScrutinizerDependingOnConstraintPropertyPid1.

@Test
public void toSkipScrutinizerDependingOnConstraintPropertyPid1() throws Exception {
    String manifestJson = TestingData.jsonFromFile("manifest/wikidata-manifest-v1.0-without-constraints.json");
    Manifest manifest = ManifestParser.parse(manifestJson);
    EditInspector editInspector = new EditInspector(new QAWarningStore(), manifest);
    assertEquals(editInspector.scrutinizers.size(), scrutinizerNotDependingOnPropertyConstraintCount);
}
Also used : Manifest(org.openrefine.wikidata.manifests.Manifest) Test(org.testng.annotations.Test)

Example 3 with Manifest

use of org.openrefine.wikidata.manifests.Manifest in project OpenRefine by OpenRefine.

the class EditInspectorTest method toSkipScrutinizerDependingOnConstraintPropertyPid2.

@Test
public void toSkipScrutinizerDependingOnConstraintPropertyPid2() throws Exception {
    String manifestJson = TestingData.jsonFromFile("manifest/wikidata-manifest-v1.0-missing-property-constraint-pid.json");
    Manifest manifest = ManifestParser.parse(manifestJson);
    EditInspector editInspector = new EditInspector(new QAWarningStore(), manifest);
    assertEquals(editInspector.scrutinizers.size(), scrutinizerNotDependingOnPropertyConstraintCount);
}
Also used : Manifest(org.openrefine.wikidata.manifests.Manifest) Test(org.testng.annotations.Test)

Example 4 with Manifest

use of org.openrefine.wikidata.manifests.Manifest in project OpenRefine by OpenRefine.

the class EditInspectorTest method testNoScrutinizerSkipped.

@Test
public void testNoScrutinizerSkipped() throws Exception {
    String manifestJson = TestingData.jsonFromFile("manifest/wikidata-manifest-v1.0.json");
    Manifest manifest = ManifestParser.parse(manifestJson);
    EditInspector editInspector = new EditInspector(new QAWarningStore(), manifest);
    assertEquals(editInspector.scrutinizers.size(), scrutinizerCount);
}
Also used : Manifest(org.openrefine.wikidata.manifests.Manifest) Test(org.testng.annotations.Test)

Aggregations

Manifest (org.openrefine.wikidata.manifests.Manifest)4 Test (org.testng.annotations.Test)3 Engine (com.google.refine.browsing.Engine)1 Command (com.google.refine.commands.Command)1 Project (com.google.refine.model.Project)1 IOException (java.io.IOException)1 List (java.util.List)1 Collectors (java.util.stream.Collectors)1 ServletException (javax.servlet.ServletException)1 HttpServletRequest (javax.servlet.http.HttpServletRequest)1 HttpServletResponse (javax.servlet.http.HttpServletResponse)1 CommandUtilities.respondError (org.openrefine.wikidata.commands.CommandUtilities.respondError)1 ManifestException (org.openrefine.wikidata.manifests.ManifestException)1 ManifestParser (org.openrefine.wikidata.manifests.ManifestParser)1 EditInspector (org.openrefine.wikidata.qa.EditInspector)1 QAWarningStore (org.openrefine.wikidata.qa.QAWarningStore)1 WikibaseSchema (org.openrefine.wikidata.schema.WikibaseSchema)1 TermedStatementEntityEdit (org.openrefine.wikidata.updates.TermedStatementEntityEdit)1 WikibaseAPIUpdateScheduler (org.openrefine.wikidata.updates.scheduler.WikibaseAPIUpdateScheduler)1