view src/org/qmul/eecs/c4dm/sia/SiaDimensionValueFactory.java @ 94:fedf516f6a78 tip

test file
author stevenh
date Mon, 29 Dec 2014 15:16:22 +0000
parents 7f3a6cf478bc
children
line wrap: on
line source
package org.qmul.eecs.c4dm.sia;

import java.util.Vector;

import org.qmul.eecs.c4dm.sia.exceptions.DimensionException;
import org.qmul.eecs.c4dm.sia.model.Datapoint;
import org.qmul.eecs.c4dm.sia.model.DimensionValue;
import org.qmul.eecs.c4dm.sia.model.VectorTableElement;

import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;

public class SiaDimensionValueFactory {

	public static Vector<DimensionValue> getDimensionValuesForVectorTableElement(VectorTableElement vte) throws DimensionException
	{
		Datapoint fromDatapoint = vte.getFromDatapoint();
		Datapoint toDatapoint = vte.getToDatapoint();

		int dimensionality = fromDatapoint.getDimensionValues().size();
		Vector<DimensionValue> dimVals = new Vector<DimensionValue>();
		
		for (int dim = 1; dim <= dimensionality; dim++)
		{
			double val = toDatapoint.getDimensionValue(dim) - fromDatapoint.getDimensionValue(dim);
			DimensionValue dimVal = new DimensionValue();
			dimVal.setDimension(dim);
			dimVal.setValue(val);
			dimVals.add(dimVal);
		}

		return dimVals;
	}
	
	public static Vector<DimensionValue> getDimensionValuesForResource(
			OntModel ontModel, Resource subject) {
		DimensionValue dimVal;
		StmtIterator dimValStmtIter;
		Property dimValProperty = ontModel.getOntProperty(DimensionValue.PROPERTY_URI);
		Property dimensionProperty = ontModel.getOntProperty(DimensionValue.DIMENSION_URI);
		Property valueProperty = ontModel.getOntProperty(DimensionValue.VALUE_URI);
		dimValStmtIter = ontModel.listStatements(subject, dimValProperty, (RDFNode)null);
		
		Vector<DimensionValue> dimValsList = new Vector<DimensionValue>();
		StmtIterator dimValDimensionStmtIter;
		StmtIterator dimValValueStmtIter;

		while (dimValStmtIter.hasNext())
		{
			Statement dimValStmt = dimValStmtIter.next();			
			Resource dimValResource = dimValStmt.getResource();
			
			dimValDimensionStmtIter = ontModel.listStatements(dimValResource, dimensionProperty, (RDFNode)null);
			dimValValueStmtIter = ontModel.listStatements(dimValResource, valueProperty, (RDFNode)null);
			dimVal = new DimensionValue();
			dimVal.setResource(dimValResource);

			// There should only be one statment here - if not, application behaviour is undefined
			while (dimValDimensionStmtIter.hasNext())
			{
				Statement dimValDimensionStmt = dimValDimensionStmtIter.next();
				Literal dimension = dimValDimensionStmt.getLiteral();
				dimVal.setDimension(dimension.getInt());
			}

			// There should only be one statment here - if not, application behaviour is undefined
			while (dimValValueStmtIter.hasNext())
			{
				Statement dimValValueStmt = dimValValueStmtIter.next();	
				Literal value = dimValValueStmt.getLiteral();
				dimVal.setValue(value.getDouble());
			}
			
			dimValsList.add(dimVal);			
		}
		return dimValsList;
	}

}