/*
* @(#)LongTransform.java
*
* Copyright 2002 EGANTT LLP. All rights reserved.
* PROPRIETARY/QPL. Use is subject to license terms.
*/
package com.egantt.model.drawing.transform;
import java.math.BigDecimal;
import java.math.MathContext;
import com.egantt.model.drawing.DrawingTransform;
public class LongTransform implements DrawingTransform
{
private static final BigDecimal MAX_VALUE = new BigDecimal(Integer.toString(Integer.MAX_VALUE));
private static final BigDecimal MIN_VALUE = new BigDecimal(Integer.toString(Integer.MIN_VALUE));
protected long offset;
protected long range;
public LongTransform(long offset, long range)
{
this.offset = offset;
this.range = range;
}
// __________________________________________________________________________
public int transform(Object v, long pixels)
{
BigDecimal ppm = new BigDecimal(Long.toString(pixels), MathContext.DECIMAL128);
ppm = ppm.divide(new BigDecimal(Long.toString(range), MathContext.DECIMAL128), MathContext.DECIMAL128);
BigDecimal value = new BigDecimal(((Long) v).toString(), MathContext.DECIMAL128); // an assert
value = value.subtract(new BigDecimal(Long.toString(offset), MathContext.DECIMAL128), MathContext.DECIMAL128);
value = value.multiply(ppm, MathContext.DECIMAL128);
if (value.compareTo(LongTransform.MIN_VALUE) < 0)
return Integer.MIN_VALUE;
if (value.compareTo(LongTransform.MAX_VALUE) > 0)
return Integer.MAX_VALUE;
return value.intValue();
}
public Object inverseTransform(long pixel, long pixels)
{
BigDecimal ppm = new BigDecimal(Long.toString(pixels), MathContext.DECIMAL128);
ppm = ppm.divide(new BigDecimal(Long.toString(range), MathContext.DECIMAL128), MathContext.DECIMAL128);
BigDecimal value = new BigDecimal(Long.toString(pixel), MathContext.DECIMAL128);
value = value.divide(ppm, MathContext.DECIMAL128);
value = value.add(new BigDecimal(Long.toString(offset), MathContext.DECIMAL128), MathContext.DECIMAL128);
return new Long(value.longValue());
}
}