com.oreilly.rdf.tenuki.TestChangeLoader.java Source code

Java tutorial

Introduction

Here is the source code for com.oreilly.rdf.tenuki.TestChangeLoader.java

Source

/*   
 * Copyright 2009 O'Reilly Media, Inc
 *
 *  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.
 */
package com.oreilly.rdf.tenuki;

import java.util.ArrayList;

import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;

import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.rdf.model.ModelMaker;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.vocabulary.DC;
import com.oreilly.rdf.tenuki.Changeset;
import com.oreilly.rdf.tenuki.ChangesetHandler;
import com.oreilly.rdf.tenuki.InputStreamChangeset;

public class TestChangeLoader {
    public static final String TESTING_RESOURCE_URI = "http://example.com/res#thing";
    public static final String BEFORE_TITLE = "Original Title";
    public static final String AFTER_TITLE = "New Title";

    private class MockChangeSet implements Changeset {

        @Override
        public Statement[] toAdd() {
            Model model = ModelFactory.createDefaultModel();
            Resource testingResource = model.createResource(TESTING_RESOURCE_URI);
            testingResource.addProperty(DC.title, AFTER_TITLE);
            return allProperties(testingResource);
        }

        @Override
        public Statement[] toRemove() {

            Model model = ModelFactory.createDefaultModel();
            Resource testingResource = model.createResource(TESTING_RESOURCE_URI);
            testingResource.addProperty(DC.title, BEFORE_TITLE);
            return allProperties(testingResource);
        }

        private Statement[] allProperties(Resource testingResource) {
            ArrayList<Statement> statements = new ArrayList<Statement>();
            StmtIterator iter = testingResource.listProperties();
            while (iter.hasNext()) {
                statements.add(iter.nextStatement());
            }
            return statements.toArray(new Statement[1]);
        }

        @Override
        public Resource getSubjectOfChange() {
            return null;
        }

    }

    private Model model;
    private DBConnection conn;

    @Before
    public void setUp() throws Exception {
        String className = "org.hsqldb.jdbcDriver"; // path of driver class
        Class.forName(className); // Load the Driver
        String DB_URL = "jdbc:hsqldb:mem:testing"; // URL of database 
        String DB_USER = "sa"; // database user id
        String DB_PASSWD = ""; // database password
        String DB = "HSQL"; // database type
        // Create database connection
        conn = new DBConnection(DB_URL, DB_USER, DB_PASSWD, DB);
        ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
        model = maker.createDefaultModel();
        Resource testingResource = model.createResource(TESTING_RESOURCE_URI);
        testingResource.addProperty(DC.title, BEFORE_TITLE);
        model.commit();

    }

    @After
    public void tearDown() throws Exception {
        this.model.close();
        this.conn.cleanDB();
    }

    @Test
    public void testApplyChangeset() {
        ChangesetHandler handler = new ChangesetHandler(model);
        Changeset changeset = new MockChangeSet();
        handler.applyChangeset(changeset);
        Resource testingResource = model.createResource(TESTING_RESOURCE_URI);
        Statement result = testingResource.getProperty(DC.title);
        Literal title = result.getLiteral();
        Assert.assertEquals(AFTER_TITLE, title.getLexicalForm());
    }

    @Test
    public void testApplyChangesetFile() throws Exception {
        ClassPathResource changesetResource = new ClassPathResource("changeset.xml");
        Changeset changeset = new InputStreamChangeset(changesetResource.getInputStream());

        ChangesetHandler handler = new ChangesetHandler(model);
        handler.applyChangeset(changeset);
        Resource testingResource = model.createResource(TESTING_RESOURCE_URI);
        Statement result = testingResource.getProperty(DC.title);
        Literal title = result.getLiteral();
        Assert.assertEquals(AFTER_TITLE, title.getLexicalForm());

    }
}