org.wikidata.wdtk.client.JsonSerializationActionTest.java Source code

Java tutorial

Introduction

Here is the source code for org.wikidata.wdtk.client.JsonSerializationActionTest.java

Source

package org.wikidata.wdtk.client;

/*
 * #%L
 * Wikidata Toolkit Command-line Tool
 * %%
 * Copyright (C) 2014 Wikidata Toolkit Developers
 * %%
 * Licensed 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.
 * #L%
 */

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.junit.Test;
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
import org.wikidata.wdtk.datamodel.interfaces.DatatypeIdValue;
import org.wikidata.wdtk.datamodel.interfaces.EntityDocument;
import org.wikidata.wdtk.datamodel.interfaces.ItemDocument;
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
import org.wikidata.wdtk.datamodel.interfaces.MonolingualTextValue;
import org.wikidata.wdtk.datamodel.interfaces.PropertyDocument;
import org.wikidata.wdtk.datamodel.interfaces.SiteLink;
import org.wikidata.wdtk.datamodel.interfaces.StatementGroup;
import org.wikidata.wdtk.datamodel.json.jackson.JacksonTermedStatementDocument;
import org.wikidata.wdtk.testing.MockDirectoryManager;
import org.wikidata.wdtk.util.CompressionType;
import org.wikidata.wdtk.util.DirectoryManagerFactory;

import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;

public class JsonSerializationActionTest {

    @Test
    public void testDefaults() {
        String[] args = new String[] { "-a", "json" };
        DumpProcessingOutputAction action = DumpProcessingOutputActionTest.getActionFromArgs(args);

        assertTrue(action instanceof JsonSerializationAction);
        assertFalse(action.needsSites());
        assertTrue(action.isReady());
        assertEquals(action.getActionName(), "JsonSerializationAction");
    }

    @Test
    public void testJsonOutput() throws IOException {
        String[] args = new String[] { "-a", "json", "-o", "/path/to/output.json" };

        DirectoryManagerFactory.setDirectoryManagerClass(MockDirectoryManager.class);

        ClientConfiguration config = new ClientConfiguration(args);
        JsonSerializationAction jsa = (JsonSerializationAction) config.getActions().get(0);

        ItemIdValue subject1 = Datamodel.makeWikidataItemIdValue("Q42");
        ItemIdValue subject2 = Datamodel.makeWikidataItemIdValue("Q43");
        MonolingualTextValue mtv1 = Datamodel.makeMonolingualTextValue("Test1", "en");
        MonolingualTextValue mtv2 = Datamodel.makeMonolingualTextValue("Test2", "fr");

        ItemDocument id1 = Datamodel.makeItemDocument(subject1, Arrays.asList(mtv1, mtv2), Arrays.asList(mtv1),
                Collections.<MonolingualTextValue>emptyList(), Collections.<StatementGroup>emptyList(),
                Collections.<String, SiteLink>emptyMap());

        ItemDocument id2 = Datamodel.makeItemDocument(subject2, Collections.<MonolingualTextValue>emptyList(),
                Arrays.asList(mtv2), Collections.<MonolingualTextValue>emptyList(),
                Collections.<StatementGroup>emptyList(), Collections.<String, SiteLink>emptyMap());

        PropertyDocument pd1 = Datamodel.makePropertyDocument(Datamodel.makeWikidataPropertyIdValue("P31"),
                Arrays.asList(mtv1), Collections.<MonolingualTextValue>emptyList(), Arrays.asList(mtv1),
                Datamodel.makeDatatypeIdValue(DatatypeIdValue.DT_MONOLINGUAL_TEXT));

        jsa.open();
        jsa.processItemDocument(id1);
        jsa.processPropertyDocument(pd1);
        jsa.processItemDocument(id2);
        jsa.close();

        MockDirectoryManager mdm = new MockDirectoryManager(Paths.get("/path/to/"), false);

        ObjectMapper mapper = new ObjectMapper();
        ObjectReader documentReader = mapper.reader(JacksonTermedStatementDocument.class);
        MappingIterator<JacksonTermedStatementDocument> documentIterator = documentReader
                .readValues(mdm.getInputStreamForFile("output.json", CompressionType.NONE));

        List<EntityDocument> results = new ArrayList<>();
        while (documentIterator.hasNextValue()) {
            JacksonTermedStatementDocument document = documentIterator.nextValue();
            document.setSiteIri(Datamodel.SITE_WIKIDATA);
            results.add(document);
        }
        documentIterator.close();

        assertEquals(3, results.size());
        assertEquals(id1, results.get(0));
        assertEquals(pd1, results.get(1));
        assertEquals(id2, results.get(2));

    }

    @Test
    public void testJsonGzipOutput() throws IOException {
        String[] args = new String[] { "-a", "json", "-o", "/path/to/output.json", "-z", "gz" };

        DirectoryManagerFactory.setDirectoryManagerClass(MockDirectoryManager.class);

        ClientConfiguration config = new ClientConfiguration(args);
        JsonSerializationAction jsa = (JsonSerializationAction) config.getActions().get(0);

        ItemIdValue subject1 = Datamodel.makeWikidataItemIdValue("Q42");
        MonolingualTextValue mtv1 = Datamodel.makeMonolingualTextValue("Test1", "en");
        MonolingualTextValue mtv2 = Datamodel.makeMonolingualTextValue("Test2", "fr");

        ItemDocument id1 = Datamodel.makeItemDocument(subject1, Arrays.asList(mtv1, mtv2), Arrays.asList(mtv1),
                Collections.<MonolingualTextValue>emptyList(), Collections.<StatementGroup>emptyList(),
                Collections.<String, SiteLink>emptyMap());

        jsa.open();
        jsa.processItemDocument(id1);
        jsa.close();

        MockDirectoryManager mdm = new MockDirectoryManager(Paths.get("/path/to/"), false);

        ObjectMapper mapper = new ObjectMapper();
        ObjectReader documentReader = mapper.reader(JacksonTermedStatementDocument.class);
        MappingIterator<JacksonTermedStatementDocument> documentIterator = documentReader
                .readValues(mdm.getInputStreamForFile("output.json.gz", CompressionType.GZIP));

        List<EntityDocument> results = new ArrayList<>();
        while (documentIterator.hasNextValue()) {
            JacksonTermedStatementDocument document = documentIterator.nextValue();
            document.setSiteIri(Datamodel.SITE_WIKIDATA);
            results.add(document);
        }
        documentIterator.close();

        assertEquals(1, results.size());
        assertEquals(id1, results.get(0));
    }

    @Test
    public void testJsonBz2Output() throws IOException {
        String[] args = new String[] { "-a", "json", "-o", "output.json", "-z", "bz2" };

        DirectoryManagerFactory.setDirectoryManagerClass(MockDirectoryManager.class);

        ClientConfiguration config = new ClientConfiguration(args);
        JsonSerializationAction jsa = (JsonSerializationAction) config.getActions().get(0);

        ItemIdValue subject1 = Datamodel.makeWikidataItemIdValue("Q42");
        MonolingualTextValue mtv1 = Datamodel.makeMonolingualTextValue("Test1", "en");
        MonolingualTextValue mtv2 = Datamodel.makeMonolingualTextValue("Test2", "fr");

        ItemDocument id1 = Datamodel.makeItemDocument(subject1, Arrays.asList(mtv1, mtv2), Arrays.asList(mtv1),
                Collections.<MonolingualTextValue>emptyList(), Collections.<StatementGroup>emptyList(),
                Collections.<String, SiteLink>emptyMap());

        jsa.open();
        jsa.processItemDocument(id1);
        jsa.close();

        MockDirectoryManager mdm = new MockDirectoryManager(Paths.get("."), false);

        ObjectMapper mapper = new ObjectMapper();
        ObjectReader documentReader = mapper.reader(JacksonTermedStatementDocument.class);
        MappingIterator<JacksonTermedStatementDocument> documentIterator = documentReader
                .readValues(mdm.getInputStreamForFile("output.json.bz2", CompressionType.BZ2));

        List<EntityDocument> results = new ArrayList<>();
        while (documentIterator.hasNextValue()) {
            JacksonTermedStatementDocument document = documentIterator.nextValue();
            document.setSiteIri(Datamodel.SITE_WIKIDATA);
            results.add(document);
        }
        documentIterator.close();

        assertEquals(1, results.size());
        assertEquals(id1, results.get(0));
    }
}