/*
Copyright (c) 2003-2008 ITerative Consulting Pty Ltd. All Rights Reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
o Redistributions of source code must retain the above copyright notice, this list of conditions and
the following disclaimer.
o 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.
o This jcTOOL Helper Class software, whether in binary or source form may not be used within,
or to derive, any other product without the specific prior written permission of the copyright holder
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS "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 DisplayProject.binding;
import org.apache.log4j.Logger;
import DisplayProject.binding.value.AbstractConverter;
import DisplayProject.binding.value.ValueModel;
import Framework.IntegerData;
import Framework.IntegerNullable;
import Framework.NumericData;
/**
* This class maps from a numeric type value model including Integer, IntegerData, etc to an
* integer, so it can be used with swing controls that expect an integer, eg a scroll bar.
* @author tfaulkes
*
*/
@SuppressWarnings("serial")
public class IntegerValueModelConverter extends AbstractConverter {
protected Class<?> subjectType;
private static Logger _log = Logger.getLogger(IntegerValueModelConverter.class);
public IntegerValueModelConverter(ValueModel pSubject, Class<?> pClassType) {
super(pSubject);
this.subjectType = pClassType;
}
public Object convertFromSubject(Object subjectValue) {
_log.debug("Converting " + subjectValue + " to an integer");
if (subjectValue == null) {
return null;
}
else if (subjectValue instanceof Integer) {
return subjectValue;
}
else if (subjectValue instanceof Number) {
return new Integer(((Number)subjectValue).intValue());
}
else if (subjectValue instanceof NumericData) {
return new Integer(((NumericData)subjectValue).intValue());
}
else {
return Integer.valueOf(subjectValue.toString());
}
}
public void setValue(Object newValue) {
Integer i = (Integer)newValue;
_log.debug("Setting bound value to " + i);
if (Integer.class.equals(subjectType) || Integer.TYPE.equals(subjectType)) {
subject.setValue(newValue);
}
else if (Number.class.isAssignableFrom(subjectType)) {
subject.setValue(newValue);
}
else if (IntegerData.class.equals(subjectType))
subject.setValue(new IntegerData(i));
else if (IntegerNullable.class.equals(subjectType))
subject.setValue(new IntegerNullable(i));
else if (NumericData.class.isAssignableFrom(subjectType)) {
try {
IntegerData anIntData = (IntegerData)subjectType.newInstance();
anIntData.setValue(i);
}
catch (Exception e) {
// No default constructor
_log.debug("Could not instantiate class " + subjectType.getName(), e);
}
}
else
subject.setValue(newValue.toString());
}
}