TunableVariable.java

package eu.javaexperience.settings;

import java.util.LinkedList;

import eu.javaexperience.asserts.AssertArgument;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.interfaces.simple.publish.SimplePublish2;

public class TunableVariable<T>
{
	protected T innerValue;
	
	protected final GetBy1<T, Object> caster;
	protected final GetBy1<Boolean, T> valiadtor;
	
	private String description;
	protected String symbol;
	protected final T initialValue;

	public TunableVariable(GetBy1<T, Object> caster, GetBy1<Boolean, T> validator, T initialValue)
	{
		AssertArgument.assertNotNull(this.caster = caster, "caster");
		AssertArgument.assertNotNull(this.valiadtor = validator, "validator");
		this.initialValue = initialValue;
	}
	
	public String getDescription()
	{
		return description;
	}
	
	public void setDescription(String description)
	{
		this.description = description;
	}
	
	public void setValue(Object o)
	{
		//TODO later
		
		
	}
	
	public T getValue()
	{
		return innerValue;
	}

	public String getSymbol()
	{
		return symbol;
	}

	public void setSymbol(String symbol)
	{
		this.symbol = symbol;
	}
	
	protected LinkedList<SimplePublish2<T, T>> modifyListeners =
			new LinkedList<>();
	
	
	public boolean addModifyListener(SimplePublish2<T, T> listener)
	{
		return modifyListeners.add(listener);
	}
	
	public boolean removeModifyListener(SimplePublish2<T, T> listener)
	{
		return modifyListeners.remove(listener);
	}
	
	public boolean isModifyListenerRegistered(SimplePublish2<T, T> listener)
	{
		return modifyListeners.contains(listener);
	}
	
}