/*
 * @(#)EnumProperty.java
 *
 * $Date: 2014-04-27 21:08:51 -0700 (Sun, 27 Apr 2014) $
 *
 * Copyright (c) 2011 by Jeremy Wood.
 * All rights reserved.
 *
 * The copyright of this software is owned by Jeremy Wood. 
 * You may not use, copy or modify this software, except in  
 * accordance with the license agreement you entered into with  
 * Jeremy Wood. For details see accompanying license terms.
 * 
 * This software is probably, but not necessarily, discussed here:
 * https://javagraphics.java.net/
 * 
 * That site should also contain the most recent official version
 * of this software.  (See the SVN repository for more details.)
 */
package com.bric.util;

public class EnumProperty<T> extends Property<T> {
	T[] values;
	public EnumProperty(String name,T[] values,T defaultValue) {
		super(name);
		this.values = values;
		for(int a = 0; a<values.length; a++) {
			if(values[a]==null)
				throw new NullPointerException("none of the enum values may be null");
		}
		if(values.length==0)
			throw new IllegalArgumentException("there were no values");
		setValue(defaultValue);
	}
	
	public T[] getValues() {
		return values;
	}
	
	@Override
	protected void validateValue(Object obj) {
		if(obj==null)
			throw new NullPointerException("the value must not be null");
		for(int a = 0; a<values.length; a++) {
			if(values[a].equals(obj))
				return;
		}
		throw new IllegalArgumentException("the value (\""+obj+"\") did not match any of the allowed values ("+listValues()+")");
	}
	
	protected String listValues() {
		if(values.length==1)
			return values[0].toString();
		
		StringBuffer sb = new StringBuffer();
		for(int a = 0; a<values.length; a++) {
			if(a>0) {
				if(a==values.length-1) {
					sb.append(" and ");
				} else {
					sb.append(", ");
				}
			}
			sb.append(values[a]);
		}
		return sb.toString();
	}
}
