All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.purl.sword.base.QualityValue Maven / Gradle / Ivy

There is a newer version: 1.8.3
Show newest version
/**
 * Copyright (c) 2008-2009, Aberystwyth University
 *
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without 
 * modification, are permitted provided that the following conditions 
 * are met:
 * 
 *  - Redistributions of source code must retain the above 
 *    copyright notice, this list of conditions and the 
 *    following disclaimer.
 *  
 *  - Redistributions in binary form must reproduce the above copyright 
 *    notice, this list of conditions and the following disclaimer in 
 *    the documentation and/or other materials provided with the 
 *    distribution.
 *    
 *  - Neither the name of the Centre for Advanced Software and 
 *    Intelligent Systems (CASIS) nor the names of its 
 *    contributors may be used to endorse or promote products derived 
 *    from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 
 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
 * SUCH DAMAGE.
 */
package org.purl.sword.base;


/**
 * A representation of a quality value.
 * 
 * The quality value must be between 0 and 1, with no more than three digits
 * after the decimal place.
 * 
 * @author Stuart Lewis
 */
public class QualityValue {
	
	/** The quality value. */
	private float quality;
	
	/**
	 * Create a quality value defaulting to 1
	 * 
	 * @throws NumberFormatException thrown if the quality value is invalid according to the SWORD specification
	 */
	public QualityValue() throws NumberFormatException
	{
		// As per the spec, default to value 1
		setQualityValue(1f);
	}
	
	/**
	 * Create a quality value
	 * 
	 * @param q The quality value
	 * @throws NumberFormatException thrown if the quality value is invalid according to the SWORD specification
	 */
	public QualityValue(float q) throws NumberFormatException
	{
		setQualityValue(q);
	}
	
	/**
	 * Set the quality value.
	 * 
	 * @param q The quality value
	 * @throws NumberFormatException thrown if the quality value is invalid according to the SWORD specification
	 */
	public void setQualityValue(float q) throws NumberFormatException
	{
		// Check the float is in range
		if ((q < 0) || (q > 1))
		{
			throw new NumberFormatException("Invalid value - must be between 0 and 1");
		}
		
		// Check there are no more than three digits after the decimal point
		String qStr = "" + q;
        int pos = qStr.indexOf(".");
        if (qStr.substring(pos + 1).length() > 3)
		{
			throw new NumberFormatException("Invalid value - no more than three digits after the decimal point: " + qStr);
		}
		quality = q;
	}
	
	/**
	 * Get the quality value
	 * 
	 * @return the quality value
	 */
	public float getQualityValue()
	{
		return quality;
	}
	
	/**
	 * Get a String representation of this quality value
	 * 
	 * @return The String representation of the quality value
	 */
	public String toString()
	{
		return Float.toString(quality);
	}
	
	/**
	 * A main method with rudimentary tests to check the class
	 */
	/*public static void main(String[] args)
	{
		// Test the class
		
		// Fail - under 0
		try
		{
			QualityValue qv1 = new QualityValue(-0.01f);
			System.out.println("1) Fail: -0.01 passed unexpectedly");
		}
		catch (NumberFormatException nfe)
		{
			System.out.print("1) Pass: -0.01 failed as expected ");
			System.out.println(nfe);
		}
		
		// Fail - over 1
		try
		{
			QualityValue qv2 = new QualityValue(1.01f);
			System.out.println("2) Fail: 1.01 passed unexpectedly");
		}
		catch (NumberFormatException nfe)
		{
			System.out.print("2) Pass: 1.01 failed as expected ");
			System.out.println(nfe);
		}
		
		// Fail - to many decimal points
		try
		{
			QualityValue qv3 = new QualityValue(0.1234f);
			System.out.println("3) Fail: 0.1234 passed unexpectedly");
		}
		catch (NumberFormatException nfe)
		{
			System.out.print("3) Pass: 0.1234 failed as expected ");
			System.out.println(nfe);
		}
		
		// Pass - no decimal places 0
		try
		{
			QualityValue qv4 = new QualityValue(0f);
			System.out.println("4) Pass: 0 passed as expected");
		}
		catch (NumberFormatException nfe)
		{
			System.out.println("4) Fail: 0 failed unexpectedly");
		}
		
		// Pass - no decimal places 1
		try
		{
			QualityValue qv5 = new QualityValue(1f);
			System.out.println("5) Pass: 1 passed as expected");
		}
		catch (NumberFormatException nfe)
		{
			System.out.println("5) Fail: 1 failed unexpectedly");
		}

		// Pass - 3 decimal places
		try
		{
			QualityValue qv6 = new QualityValue(0.123f);
			System.out.print("6) Pass: 0.123 passed as expected - ");
			System.out.println(qv6);
		}
		catch (NumberFormatException nfe)
		{
			System.out.println("6) Fail: 0.123 failed unexpectedly");
		}
		
		// Pass - No value given
		try
		{
			QualityValue qv6 = new QualityValue();
			System.out.print("7) Pass: no value passed as expected - ");
			System.out.println(qv6);
		}
		catch (NumberFormatException nfe)
		{
			System.out.println("7) Fail: no value failed unexpectedly");
		}
	}
     */
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy