org.wheatinitiative.vitro.webapp.ontology.update.OntologyChangeParser.java Source code

Java tutorial

Introduction

Here is the source code for org.wheatinitiative.vitro.webapp.ontology.update.OntologyChangeParser.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package org.wheatinitiative.vitro.webapp.ontology.update;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wheatinitiative.vitro.webapp.ontology.update.AtomicOntologyChange.AtomicChangeType;

/**
 * Performs parsing on Prompt output and provides change object list.
 * 
 * @author ass92
 *
 */

public class OntologyChangeParser {

    private final Log log = LogFactory.getLog(OntologyChangeParser.class);

    /**
     * @param args
     * @throws IOException 
     */

    @SuppressWarnings({ "unchecked", "null", "static-access" })
    public ArrayList<AtomicOntologyChange> parseFile(String diffPath) throws IOException {
        AtomicOntologyChange changeObj;
        ArrayList<AtomicOntologyChange> changeObjects = new ArrayList<AtomicOntologyChange>();
        int countColumns = 0;
        String URI = null;
        String rename = null;
        String sourceURI = null;
        String destinationURI = null;
        StringTokenizer stArr = null;
        InputStreamReader in = new InputStreamReader(this.getClass().getResourceAsStream(diffPath));

        Iterable<CSVRecord> records = CSVFormat.TDF.parse(in);
        Iterator<CSVRecord> rows = records.iterator();
        //CSVReader readFile = new SimpleReader();
        //readFile.setSeperator('\t');

        //List<String[]> rows = readFile.parse(in);

        int rowNum = 0;
        while (rows.hasNext()) {
            rowNum++;
            CSVRecord row = rows.next();
            if (row.size() != 5) {
                log.error("Invalid PromptDiff data at row " + (rowNum + 1) + ". Expected 5 columns; found "
                        + row.size());
            } else {
                changeObj = new AtomicOntologyChange();
                if (row.get(0) != null && row.get(0).length() > 0) {
                    changeObj.setSourceURI(row.get(0));
                }
                if (row.get(1) != null && row.get(1).length() > 0) {
                    changeObj.setDestinationURI(row.get(1));
                }
                if (row.get(4) != null && row.get(4).length() > 0) {
                    changeObj.setNotes(row.get(4));
                }
                if ("Yes".equals(row.get(2))) {
                    changeObj.setAtomicChangeType(AtomicChangeType.RENAME);
                } else if ("Delete".equals(row.get(3))) {
                    changeObj.setAtomicChangeType(AtomicChangeType.DELETE);
                } else if ("Add".equals(row.get(3))) {
                    changeObj.setAtomicChangeType(AtomicChangeType.ADD);
                } else {
                    log.error("Invalid rename or change type data: '" + row.get(2) + " " + row.get(3) + "'");
                }
                log.debug(changeObj);
                changeObjects.add(changeObj);
            }

        }
        if (changeObjects.size() == 0) {
            log.debug("No ABox updates are required.");
        }
        return changeObjects;
    }

}