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

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

import java.util.Vector;

import org.qmul.eecs.c4dm.sia.exceptions.DimensionException;

public class NDimensionalObject implements Comparable {

	private Vector<DimensionValue> dimensionValues;

	public NDimensionalObject() {
		super();
	}

	/**
	 * @return the dimensionValue
	 */
	public Vector<DimensionValue> getDimensionValues() {
		return dimensionValues;
	}

	/**
	 * @param dimensionValue the dimensionValue to set
	 */
	public void setDimensionValues(Vector<DimensionValue> dimensionValues) {
		this.dimensionValues = dimensionValues;
	}

	public double getDimensionValue(int dimension) throws DimensionException {
		for (DimensionValue dv : this.getDimensionValues())
		{
			if (dv.getDimension() == dimension)
				return dv.getValue();
		}
		throw new DimensionException("No value for dimension " + dimension);
	}

	/* (non-Javadoc)
	 * @see java.lang.Comparable#compareTo(java.lang.Object)
	 */
	@Override
	public int compareTo(Object o2) {
		NDimensionalObject ndim2 = (NDimensionalObject)o2;
		
		Vector<DimensionValue> ndim2DimVals = ndim2.getDimensionValues();
		
		int ndim2DimSize = ndim2DimVals.size();
		
		if (ndim2DimSize != this.getDimensionValues().size())
			throw new ClassCastException("NDimensionalObjects have an unequal number of dimensions");
				
		for (int dimension = 1; dimension <= ndim2DimSize; dimension++)
		{
			double dimension1 = 0;
			try {
				dimension1 = this.getDimensionValue(dimension);
			} catch (DimensionException e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
				System.exit(-1);
			}
			double dimension2 = 0;
			try {
				dimension2 = ndim2.getDimensionValue(dimension);
			} catch (DimensionException e) {
				System.out.println(e.getMessage());
				e.printStackTrace();
				System.exit(-1);
			}
			
			if (dimension1 < dimension2)
			{
				return -1;
			}
			else if (dimension1 > dimension2)
			{
				return 1;
			}
		}
		
		return 0;
	}

}