Simone Giannecchini ha scritto: > Mmmh, > I do not manage to reproduce the failure for the moment.
Simone, it's the third day in a row I cannot build GeoTools trunk. Mind if I revert your change? It's this one: -------------------------------------------------------- Author: simonegiannecchini Date: 2010-02-14 17:20:29 -0500 (Sun, 14 Feb 2010) New Revision: 34890 Modified: trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/WarpTransform2D.java Log: trying to achieve more robustness against GEOT-1601 Modified: trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/WarpTransform2D.java =================================================================== --- trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/WarpTransform2D.java 2010-02-14 15:39:01 UTC (rev 34889) +++ trunk/modules/library/referencing/src/main/java/org/geotools/referencing/operation/transform/WarpTransform2D.java 2010-02-14 22:20:29 UTC (rev 34890) @@ -19,36 +19,42 @@ import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.io.Serializable; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import javax.media.jai.JAI; import javax.media.jai.Warp; import javax.media.jai.WarpAffine; -import javax.media.jai.WarpQuadratic; import javax.media.jai.WarpCubic; +import javax.media.jai.WarpGeneralPolynomial; import javax.media.jai.WarpPolynomial; -import javax.media.jai.WarpGeneralPolynomial; +import javax.media.jai.WarpQuadratic; -import org.opengis.parameter.ParameterValue; -import org.opengis.parameter.ParameterValueGroup; +import org.geotools.metadata.iso.citation.Citations; +import org.geotools.parameter.DefaultParameterDescriptor; +import org.geotools.parameter.Parameter; +import org.geotools.parameter.ParameterGroup; +import org.geotools.referencing.NamedIdentifier; +import org.geotools.referencing.operation.MathTransformProvider; +import org.geotools.resources.XArray; +import org.geotools.resources.i18n.Vocabulary; +import org.geotools.resources.i18n.VocabularyKeys; +import org.geotools.util.Utilities; import org.opengis.parameter.ParameterDescriptor; import org.opengis.parameter.ParameterDescriptorGroup; import org.opengis.parameter.ParameterNotFoundException; +import org.opengis.parameter.ParameterValue; +import org.opengis.parameter.ParameterValueGroup; import org.opengis.referencing.operation.MathTransform; import org.opengis.referencing.operation.MathTransform2D; import org.opengis.referencing.operation.NoninvertibleTransformException; import org.opengis.referencing.operation.Transformation; -import org.geotools.util.Utilities; -import org.geotools.referencing.NamedIdentifier; -import org.geotools.referencing.operation.MathTransformProvider; -import org.geotools.metadata.iso.citation.Citations; -import org.geotools.parameter.DefaultParameterDescriptor; -import org.geotools.parameter.ParameterGroup; -import org.geotools.parameter.Parameter; -import org.geotools.resources.XArray; -import org.geotools.resources.i18n.Vocabulary; -import org.geotools.resources.i18n.VocabularyKeys; - /** * Wraps an arbitrary {...@link Warp} object as a {...@linkplain MathTransform2D two-dimensional transform}. * Calls to {...@linkplain #transform(float[],int,float[],int,int) transform} methods are forwarded to @@ -84,6 +90,26 @@ * Serial number for interoperability with different versions. */ private static final long serialVersionUID = -7949539694656719923L; + + private final static boolean USE_HACK; + static{ + final String buildVersion=JAI.getBuildVersion(); + final SimpleDateFormat df= new SimpleDateFormat("yyyy-MM-dd' 'hh:mm:ss.SSSZ"); + final TimeZone tz= TimeZone.getTimeZone("UTC"); + df.setTimeZone(tz); + boolean hack=false; + try { + final Date date = buildVersion!=null?df.parse(buildVersion):new java.util.Date(); + final GregorianCalendar version113= new GregorianCalendar(tz); + version113.set(2006, 8, 12, 00, 23, 56); + version113.set(Calendar.MILLISECOND, 159); + + hack=!date.after(version113.getTime()); + } catch (ParseException e) { + hack=false; + } + USE_HACK=hack; + } /** * The maximal polynomial degree allowed. @@ -121,7 +147,7 @@ * </table> * * @param srcCoords Source coordinates. - * @param dstCoords Destination coordinates. + * @param dstCoords Desination coordinates. * @param degree The desired degree of the warp polynomials. */ public WarpTransform2D(final Point2D[] srcCoords, final Point2D[] dstCoords, final int degree) { @@ -218,21 +244,23 @@ * according the scale values, but the 'preScale' and 'postScale' are interchanged. * When JAI bug will be fixed, delete all the following block until the next comment. */ - final double scaleX = preScaleX / postScaleX; - final double scaleY = preScaleY / postScaleY; - if (scaleX!=1 || scaleY!=1) { - final int n = numCoords*2; - if (cloneCoords) { - float[] o; - o=srcCoords; srcCoords=new float[n]; System.arraycopy(o, srcOffset, srcCoords, 0, n); srcOffset=0; - o=dstCoords; dstCoords=new float[n]; System.arraycopy(o, dstOffset, dstCoords, 0, n); dstOffset=0; - } - for (int i=0; i<n;) { - srcCoords[srcOffset + i ] /= scaleX; - dstCoords[dstOffset + i++] *= scaleX; - srcCoords[srcOffset + i ] /= scaleY; - dstCoords[dstOffset + i++] *= scaleY; - } + if(USE_HACK){ + final double scaleX = preScaleX / postScaleX; + final double scaleY = preScaleY / postScaleY; + if (scaleX!=1 || scaleY!=1) { + final int n = numCoords*2; + if (cloneCoords) { + float[] o; + o=srcCoords; srcCoords=new float[n]; System.arraycopy(o, srcOffset, srcCoords, 0, n); srcOffset=0; + o=dstCoords; dstCoords=new float[n]; System.arraycopy(o, dstOffset, dstCoords, 0, n); dstOffset=0; + } + for (int i=0; i<n;) { + srcCoords[srcOffset + i ] /= scaleX; + dstCoords[dstOffset + i++] *= scaleX; + srcCoords[srcOffset + i ] /= scaleY; + dstCoords[dstOffset + i++] *= scaleY; + } + } } /* * Note: Warp semantic (transforms coordinates from destination to source) is the ---------------------------------------------------------------- Cheers Andrea -- Andrea Aime OpenGeo - http://opengeo.org Expert service straight from the developers. ------------------------------------------------------------------------------ SOLARIS 10 is the OS for Data Centers - provides features such as DTrace, Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW http://p.sf.net/sfu/solaris-dev2dev _______________________________________________ Geotools-devel mailing list Geotools-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel