Package org.geotools.parameter

Source Code of org.geotools.parameter.ImagingParametersTest

/*
*    GeoTools - The Open Source Java GIS Toolkit
*    http://geotools.org
*
*    (C) 2005-2008, Open Source Geospatial Foundation (OSGeo)
*
*    This library is free software; you can redistribute it and/or
*    modify it under the terms of the GNU Lesser General Public
*    License as published by the Free Software Foundation;
*    version 2.1 of the License.
*
*    This library is distributed in the hope that it will be useful,
*    but WITHOUT ANY WARRANTY; without even the implied warranty of
*    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*    Lesser General Public License for more details.
*/
package org.geotools.parameter;

import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import javax.media.jai.JAI;
import javax.media.jai.ParameterList;
import javax.media.jai.OperationDescriptor;
import javax.media.jai.OperationRegistry;
import javax.media.jai.RegistryElementDescriptor;
import javax.media.jai.registry.RenderedRegistryMode;

import org.opengis.util.GenericName;
import org.opengis.parameter.ParameterValue;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.parameter.ParameterDescriptor;

import org.geotools.TestData;
import org.geotools.metadata.iso.citation.Citations;

import org.junit.*;
import static org.junit.Assert.*;


/**
* Tests the wrapper for JAI's parameters.
*
*
*
* @source $URL$
* @version $Id$
* @author Martin Desruisseaux (IRD)
* @author Simone Giannecchini
*/
public final class ImagingParametersTest {
    /**
     * Tests {@link ImagingParameters}.
     */
    @Test
    public void testDescriptors() {
        final String author = Citations.JAI.getTitle().toString();
        final String vendor = "com.sun.media.jai";
        final String mode   = RenderedRegistryMode.MODE_NAME;
        final RegistryElementDescriptor   descriptor;
        final ImagingParameterDescriptors parameters;
        descriptor = JAI.getDefaultInstance().getOperationRegistry().getDescriptor(mode, "AddConst");
        parameters = new ImagingParameterDescriptors(descriptor);
        final GenericName alias = parameters.getAlias().iterator().next();
        /*
         * Tests the operation-wide properties.
         */
        assertEquals   ("Name""AddConst", parameters.getName().getCode());
        assertEquals   ("Authority", author, parameters.getName().getAuthority().getTitle().toString());
        assertEquals   ("Vendor",    vendor, alias     .scope().name().toString());
        assertNotNull  ("Version",           parameters.getName().getVersion());
        assertLocalized("Vendor",            alias     .scope().name().toInternationalString());
        assertLocalized("Remarks",           parameters.getRemarks());
        assertTrue     ("Remarks",           parameters.getRemarks().toString().trim().length() > 0);
        /*
         * Tests the properties for a specific parameter in the parameter group.
         */
        final ParameterDescriptor param = (ParameterDescriptor) parameters.descriptor("constants");
        assertEquals   ("Name",   "constants",    param.getName().getCode());
        assertEquals   ("Type",   double[].class, param.getValueClass());
        assertEquals   ("Default", 1, ((double[]) param.getDefaultValue()).length);
        assertNull     ("Minimum",                param.getMinimumValue());
        assertNull     ("Maximum",                param.getMaximumValue());
        assertNull     ("Valid values",           param.getValidValues());
        assertLocalized("Remarks",                param.getRemarks());
        assertFalse(parameters.getRemarks().toString().trim().equalsIgnoreCase(
                         param.getRemarks().toString().trim()));
        /*
         * Tests parameter values.
         */
        final ImagingParameters values = (ImagingParameters) parameters.createValue();
        for (int i=0; i<20; i++) {
            final ParameterValue before = values.parameter("constants");
            if ((i % 5)==0) {
                values.parameters.setParameter("constants", new double[]{i});
            } else {
                values.parameter("constants").setValue(new double[]{i});
            }
            assertTrue(Arrays.equals(values.parameter("constants").doubleValueList(),
                          (double[]) values.parameters.getObjectParameter("constants")));
            assertSame(before, values.parameter("constants"));
        }
        assertNotNull(values.toString());
        /*
         * Tests clone. Requires J2SE 1.5 or above.
         */
        final ImagingParameters copy = values.clone();
        assertNotSame("clone", values, copy);
        assertNotSame("clone", values.parameters, copy.parameters);
        if (false) {
            // NOTE: As of J2SE 1.5 and JAI 1.1, ParameterBlockJAI
            //       doesn't implements the 'equals' method.
            assertEquals("clone", values.parameters, copy.parameters);
            assertEquals("clone", values, copy);
        }
    }

    /**
     * Ensures that the specified character sequence created from JAI parameters preserve the
     * localization infos.
     */
    private static void assertLocalized(final String name, final CharSequence title) {
        assertTrue(name, title instanceof ImagingParameterDescription);
    }

    /**
     * Tests the wrapper with a parameter overriden.
     */
    @Test
    public void testExtensions() {
        /*
         * The parameter descriptor for the subsampling.
         */
        final ParameterDescriptor SPATIAL_SUBSAMPLING_X =
                new DefaultParameterDescriptor(Citations.OGC, "xPeriod",
                    Double.class,    // Value class (mandatory)
                    null,            // Array of valid values
                    null,            // Default value
                    0.0,             // Minimal value
                    null,            // Maximal value
                    null,            // Unit of measure
                    false);          // Parameter is optional

        // Gets the descriptors for extrema  JAI operation
        final OperationRegistry registry = JAI.getDefaultInstance().getOperationRegistry();
        final OperationDescriptor operation = (OperationDescriptor) registry
                        .getDescriptor(RenderedRegistryMode.MODE_NAME, "Extrema");

        // Gets the ImagingParameterDescriptors to replace xPeriod
        final List<ParameterDescriptor> replacingDescriptors = new ArrayList<ParameterDescriptor>(1);
        replacingDescriptors.add(SPATIAL_SUBSAMPLING_X);
        final ImagingParameterDescriptors ripd =
                new ImagingParameterDescriptors(operation, replacingDescriptors);

        // Sets the parameter we want to override
        final ParameterValueGroup rip = ripd.createValue();
        assertSame(ripd, rip.getDescriptor());
        final ParameterValue p = rip.parameter("xPeriod");
        assertSame(SPATIAL_SUBSAMPLING_X, p.getDescriptor());

        // Note that we are supposed to use spatial coordinates for this value we are seeting here.
        p.setValue(Double.valueOf(2.3));
        assertTrue(p.toString().startsWith("xPeriod = 2.3"));

        // Tests direct access to the parameter list.
        final ParameterList pl = ((ImagingParameters) rip).parameters;
        assertSame(pl, pl.setParameter("xPeriod", 2));
        assertSame(pl, pl.setParameter("yPeriod", 2));
        assertEquals(2, pl.getIntParameter("xPeriod"));
        assertEquals(2, pl.getIntParameter("yPeriod"));
        assertEquals("Setting 'xPeriod' on ParameterList should have no effect on ParameterValue.",
                     2.3, p.doubleValue(), 1E-6);
        assertEquals("'yPeriod' should still backed by the ParameterList.",
                     2, rip.parameter("yPeriod").intValue());
    }
}
TOP

Related Classes of org.geotools.parameter.ImagingParametersTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.