Author: desruisseaux
Date: Tue Apr 10 08:08:31 2018
New Revision: 1828795

URL: http://svn.apache.org/viewvc?rev=1828795&view=rev
Log:
Replace the use of Java2D by SIS matrix.

Modified:
    
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
    
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java

Modified: 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java?rev=1828795&r1=1828794&r2=1828795&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/iso/MarshallingTest.java
 [UTF-8] Tue Apr 10 08:08:31 2018
@@ -51,6 +51,7 @@ import org.apache.sis.metadata.iso.maint
 import org.apache.sis.metadata.iso.spatial.*;
 import org.apache.sis.util.iso.DefaultRecordSchema;
 import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.util.iso.DefaultInternationalString;
 import org.apache.sis.util.logging.WarningListener;
 import org.apache.sis.measure.Units;
 import org.apache.sis.xml.XML;
@@ -68,6 +69,7 @@ import static org.junit.Assert.*;
  * This class is used to test the ISO 19115-3 metadata standard implementation.
  *
  * @author  Cullen Rombach (Image Matters)
+ * @author  Martin Desruisseaux (Geomatys)
  * @version 1.0
  *
  * @see <a href="https://issues.apache.org/jira/browse/SIS-400";>SIS-400</a>
@@ -110,81 +112,141 @@ public final class MarshallingTest exten
     @SuppressWarnings("deprecation")
     private DefaultMetadata metadata() throws URISyntaxException {
         /*
+         * Metadata
+         *   ├─Metadata identifier…… dummy-metadata
+         *   │   └─Code space………………… sis.test
+         *   ├─Parent metadata……………… A parent metadata
+         *   │   └─Identifier………………… dummy-parent-metadata
+         *   │       └─Code space……… sis.test
+         *   ├─Language (1 de 2)………… English
+         *   ├─Language (2 de 2)………… French (Canada)
+         *   ├─Character set…………………… ISO-8859-1
+         *   └─Metadata scope
+         *       ├─Resource scope……… Dataset
+         *       └─Name………………………………… Metadata for an (imaginary) data set
+         *
          * Some code are indented for readability and more local variable 
scopes.
          */
         final DefaultMetadata md = new DefaultMetadata();
         {
             // Metadata identifier
-            final DefaultIdentifier id = new 
DefaultIdentifier("fileIdentifier");
-            id.setCodeSpace("fileIdentifierNamespace");
+            final DefaultIdentifier id = new 
DefaultIdentifier("dummy-metadata");
+            id.setCodeSpace("sis.test");
             md.setMetadataIdentifier(id);
         }
-        // Languages
-        final Collection<Locale> languages = Arrays.asList(Locale.US, 
Locale.GERMANY);
+        // Languages — one language only, and one (country, language) tupple.
+        final Collection<Locale> languages = Arrays.asList(Locale.ENGLISH, 
Locale.CANADA_FRENCH);
         md.setLanguages(languages);
 
         // Character Sets (character encoding)
-        final Collection<Charset> charSets = 
Collections.singleton(StandardCharsets.UTF_8);
+        final Collection<Charset> charSets = 
Collections.singleton(StandardCharsets.ISO_8859_1);
         md.setCharacterSets(charSets);
         {
             // Parent metadata
-            final DefaultCitation parent = new 
DefaultCitation("parentMetadata");
-            final DefaultIdentifier parentId = new 
DefaultIdentifier("parentMetadata");
-            parentId.setCodeSpace("parentMetadataCodeSpace");
+            final DefaultCitation parent = new DefaultCitation("A parent 
metadata");
+            final DefaultIdentifier parentId = new 
DefaultIdentifier("dummy-parent-metadata");
+            parentId.setCodeSpace("sis.test");
             parent.getIdentifiers().add(parentId);
             md.setParentMetadata(parent);
         }
         // mdb:metadataScope (hierarchyLevel and hierarchyLevelName in legacy 
ISO 19115:2003 model)
-        md.getMetadataScopes().add(new DefaultMetadataScope(ScopeCode.DATASET, 
"hierarchyLevelName"));
+        md.getMetadataScopes().add(new DefaultMetadataScope(ScopeCode.DATASET, 
"Metadata for an (imaginary) data set"));
         final DefaultOnlineResource onlineResource;
         {
-            // Contact information for the parties.
+            /*
+             * Contact information for the parties.
+             *
+             * Organisation………………………………………………………………… Plato Republic
+             *   ├─Contact info
+             *   │   ├─Phone (1 de 2)
+             *   │   │   ├─Number………………………………………………… 555-444-3333
+             *   │   │   └─Number type…………………………………… Voice
+             *   │   ├─Phone (2 de 2)
+             *   │   │   ├─Number………………………………………………… 555-555-5555
+             *   │   │   └─Number type…………………………………… Facsimile
+             *   │   ├─Address
+             *   │   │   ├─Delivery point…………………………… At the desk
+             *   │   │   ├─City……………………………………………………… Metropolis city
+             *   │   │   ├─Administrative area……………… Utopia area
+             *   │   │   ├─Postal code…………………………………… A1A 2C2
+             *   │   │   ├─Country……………………………………………… Atlantis island
+             *   │   │   └─Electronic mail address…… t...@example.com
+             *   │   ├─Online resource
+             *   │   │   ├─Linkage……………………………………………… http://example.com
+             *   │   │   ├─Protocol…………………………………………… Hyper-text
+             *   │   │   ├─Application profile……………… Test only
+             *   │   │   ├─Name……………………………………………………… Timaeus & Critias
+             *   │   │   ├─Description…………………………………… A dialog between 
philosophers.
+             *   │   │   └─Function…………………………………………… Search
+             *   │   ├─Hours of service………………………………… Weekdays 9:00 AM - 5:00 PM
+             *   │   ├─Contact instructions……………………… Knock at the door
+             *   │   └─Contact type…………………………………………… Imaginary
+             *   └─Individual…………………………………………………………… Socrates
+             *       └─Position name………………………………………… Philosopher
+             */
             final DefaultContact contact = new DefaultContact();
-            contact.setPhones(Arrays.asList(new 
DefaultTelephone("555-867-5309", TelephoneType.VOICE),
+            contact.setPhones(Arrays.asList(new 
DefaultTelephone("555-444-3333", TelephoneType.VOICE),
                                             new 
DefaultTelephone("555-555-5555", TelephoneType.FACSIMILE)));
             {
                 {
                     // Address information
                     final DefaultAddress address = new DefaultAddress();
-                    address.setDeliveryPoints(Collections.singleton(new 
SimpleInternationalString("deliveryPoint")));
+                    address.setDeliveryPoints(Collections.singleton(new 
SimpleInternationalString("At the desk")));
                     
address.getElectronicMailAddresses().add("t...@example.com");
-                    address.setCity(new SimpleInternationalString("city"));
-                    address.setAdministrativeArea(new 
SimpleInternationalString("administrativeArea"));
-                    address.setPostalCode("postalCode");
-                    address.setCountry(new 
SimpleInternationalString("country"));
+                    address.setCity(new SimpleInternationalString("Metropolis 
city"));
+                    address.setAdministrativeArea(new 
SimpleInternationalString("Utopia area"));
+                    address.setPostalCode("A1A 2C2");
+                    address.setCountry(new SimpleInternationalString("Atlantis 
island"));
                     contact.getAddresses().add(address);
                 }
                 // Online resources
-                onlineResource = new DefaultOnlineResource();
-                onlineResource.setLinkage(new URI("http://example.com";));
-                onlineResource.setProtocol("protocol");
-                onlineResource.setApplicationProfile("applicationProfile");
-                onlineResource.setName(new SimpleInternationalString("name"));
-                onlineResource.setDescription(new 
SimpleInternationalString("description"));
-                onlineResource.setFunction(OnLineFunction.DOWNLOAD);
+                final DefaultInternationalString description = new 
DefaultInternationalString();
+                description.add(Locale.ENGLISH, "A dialog between 
philosophers.");
+                description.add(Locale.FRENCH,  "Un dialogue entre 
philosophes.");
+                onlineResource = new DefaultOnlineResource(new 
URI("http://example.com";));
+                onlineResource.setName(new SimpleInternationalString("Timaeus 
& Critias"));
+                onlineResource.setDescription(description);
+                onlineResource.setProtocol("Submarine HTTP");
+                onlineResource.setApplicationProfile("Test only");
+                onlineResource.setFunction(OnLineFunction.SEARCH);
                 contact.getOnlineResources().add(onlineResource);
                 contact.setHoursOfService(Collections.singleton(new 
SimpleInternationalString("Weekdays 9:00 AM - 5:00 PM")));
-                contact.setContactInstructions(new 
SimpleInternationalString("contactInstructions"));
-                contact.setContactType(new 
SimpleInternationalString("contactType"));
+                contact.setContactInstructions(new 
SimpleInternationalString("Knock at the door"));
+                contact.setContactType(new 
SimpleInternationalString("Imaginary"));
             }
-            // Create some DefaultIndividuals
-            final DefaultIndividual individual  = new 
DefaultIndividual("individualName", "positionName", null);
-            final DefaultIndividual individual2 = new 
DefaultIndividual("individualName2", "positionName2", contact);
-            final DefaultOrganisation org = new 
DefaultOrganisation("organisationName", null, individual, contact);
+            // Create some individuals
+            final DefaultIndividual individual  = new 
DefaultIndividual("Socrates", "Philosopher", null);
+            final DefaultIndividual individual2 = new 
DefaultIndividual("Hermocrates", "Politician", contact);
+            final DefaultOrganisation org = new DefaultOrganisation("Plato 
Republic", null, individual, contact);
             md.setContacts(Arrays.asList(new 
DefaultResponsibility(Role.POINT_OF_CONTACT, null, org),
                                          new 
DefaultResponsibility(Role.POINT_OF_CONTACT, null, individual2)));
         }
         // Date info (date stamp in legacy ISO 19115:2003 model)
-        final Collection<CitationDate> dateInfo = Collections.singleton(new 
DefaultCitationDate(new Date(), DateType.CREATION));
+        final Collection<CitationDate> dateInfo = Collections.singleton(new 
DefaultCitationDate(new Date(1260961229580L), DateType.CREATION));
         md.setDateInfo(dateInfo);
         {
             // Metadata standard
-            final DefaultCitation standard = new 
DefaultCitation("metadataStandardName");
-            standard.setEdition(new 
SimpleInternationalString("metadataStandardVersion"));
+            final DefaultCitation standard = new DefaultCitation("ISO 
19115-1");
+            standard.setEdition(new SimpleInternationalString("2014"));
             md.getMetadataStandards().add(standard);
         }
         {
-            // Spatial Representation Info
+            /*
+             * Spatial Representation Info
+             *
+             * Georectified
+             *   ├─Number of dimensions………………………………………………… 2
+             *   ├─Axis dimension properties (1 de 2)…………… Row
+             *   │   ├─Dimension size……………………………………………………… 7 777
+             *   │   └─Resolution………………………………………………………………… 10
+             *   ├─Axis dimension properties (2 de 2)…………… Column
+             *   │   ├─Dimension size……………………………………………………… 2 233
+             *   │   └─Resolution………………………………………………………………… 5
+             *   ├─Cell geometry…………………………………………………………………… Area
+             *   ├─Transformation parameter availability…… false
+             *   ├─Check point availability……………………………………… false
+             *   └─Point in pixel………………………………………………………………… Upper right
+             */
             final DefaultGeorectified georectified = new DefaultGeorectified();
             georectified.setNumberOfDimensions(2);
             final DefaultDimension dim1 = new 
DefaultDimension(DimensionNameType.ROW,    7777);
@@ -199,20 +261,20 @@ public final class MarshallingTest exten
         {
             // Reference System Information
             final ReferenceSystemMetadata refSystem = new 
ReferenceSystemMetadata();
-            final DefaultCitation cit = new 
DefaultCitation("refSystemCitationTitle");
+            final DefaultCitation cit = new DefaultCitation("Atlantis grid");
             cit.setDates(dateInfo);
             {
                 //  Responsibilities
                 final DefaultOrganisation org = new DefaultOrganisation();
-                org.setName(new SimpleInternationalString("orgName"));
+                org.setName(new SimpleInternationalString("Atlantis national 
mapping agency"));
                 cit.getCitedResponsibleParties().add(new 
DefaultResponsibility(Role.PUBLISHER, null, org));
             }
             // Identifier
-            final DefaultIdentifier id = new 
DefaultIdentifier("refSystemCode");
+            final DefaultIdentifier id = new DefaultIdentifier("AG9000");
             id.setAuthority(cit);
-            id.setCodeSpace("refSystemCodeSpace");
+            id.setCodeSpace("sis.test");
             id.setVersion("1.0");
-            id.setDescription(new 
SimpleInternationalString("refSystemDescription"));
+            id.setDescription(new SimpleInternationalString("An imaginary 
reference system."));
             refSystem.setName(id);
             md.getReferenceSystemInfo().add(refSystem);
         }
@@ -238,21 +300,26 @@ public final class MarshallingTest exten
         }
         // Data identification info
         final DefaultDataIdentification dataId = new 
DefaultDataIdentification();
-        dataId.setAbstract(new SimpleInternationalString("abstract"));
-        dataId.setPurpose(new SimpleInternationalString("purpose"));
+        {
+            final DefaultInternationalString description = new 
DefaultInternationalString();
+            description.add(Locale.ENGLISH, "Metadata for an imaginary map.");
+            description.add(Locale.FRENCH,  "Méta-données pour une carte 
imaginaire.");
+            dataId.setAbstract(description);
+            dataId.setPurpose(new SimpleInternationalString("For XML 
(un)marshalling tests."));
+        }
         final Collection<Extent> extents;
         {
             // Extents
             final DefaultExtent extent = new DefaultExtent();
-            extent.setDescription(new 
SimpleInternationalString("description"));
+            extent.setDescription(new SimpleInternationalString("Azores"));
             {
                 // Bounding box
                 final DefaultGeographicBoundingBox boundingBox = new 
DefaultGeographicBoundingBox();
                 boundingBox.setInclusion(true);
-                boundingBox.setNorthBoundLatitude(11.11);
-                boundingBox.setEastBoundLongitude(11.11);
-                boundingBox.setSouthBoundLatitude(11.11);
-                boundingBox.setWestBoundLongitude(11.11);
+                boundingBox.setNorthBoundLatitude( 39);
+                boundingBox.setEastBoundLongitude(-28);
+                boundingBox.setSouthBoundLatitude( 35);
+                boundingBox.setWestBoundLongitude(-22);
                 extent.getGeographicElements().add(boundingBox);
             }
             final DefaultTemporalExtent tempExtent = new 
DefaultTemporalExtent();
@@ -267,19 +334,19 @@ public final class MarshallingTest exten
             DefaultConstraints constraint = new DefaultConstraints();
             constraint.getResponsibleParties().add(new 
DefaultResponsibility());
             constraint.setReferences(emptyCitations);
-            final DefaultBrowseGraphic graphic = new DefaultBrowseGraphic(new 
URI("filename.png"));
-            graphic.setFileDescription(new 
SimpleInternationalString("description"));
-            graphic.setFileType("fileType");
+            final DefaultBrowseGraphic graphic = new DefaultBrowseGraphic(new 
URI("ocean.png"));
+            graphic.setFileDescription(new 
SimpleInternationalString("Somewhere in the Atlantic ocean"));
+            graphic.setFileType("PNG image");
             graphic.getImageConstraints().add(new DefaultConstraints());
             graphic.getLinkages().add(new DefaultOnlineResource());
             constraint.getGraphics().add(graphic);
-            constraint.setUseLimitations(Collections.singleton(new 
SimpleInternationalString("useLimitation")));
+            constraint.setUseLimitations(Collections.singleton(new 
SimpleInternationalString("Not for navigation.")));
 
             // Releasability
             final DefaultReleasability releasability = new 
DefaultReleasability();
-            releasability.setStatement(new 
SimpleInternationalString("statement"));
+            releasability.setStatement(new SimpleInternationalString("Public 
domain"));
             constraint.setReleasability(releasability);
-            constraint.setConstraintApplicationScope(new 
DefaultScope(ScopeCode.APPLICATION));
+            constraint.setConstraintApplicationScope(new 
DefaultScope(ScopeCode.DOCUMENT));
             resourceConstraints = Collections.singleton(constraint);
             dataId.setResourceConstraints(resourceConstraints);
         }
@@ -293,32 +360,32 @@ public final class MarshallingTest exten
             resolution.setDistance(56777.0);
             dataId.getSpatialResolutions().add(resolution);
         }
-        dataId.setTopicCategories(Arrays.asList(TopicCategory.OCEANS, 
TopicCategory.FARMING));
-        dataId.getStatus().add(Progress.ACCEPTED);
+        dataId.setTopicCategories(Arrays.asList(TopicCategory.OCEANS, 
TopicCategory.SOCIETY));
+        dataId.getStatus().add(Progress.HISTORICAL_ARCHIVE);
 
         // Citation
         final DefaultCitation cit = new DefaultCitation();
-        cit.setTitle(new SimpleInternationalString("citationTitle"));
-        cit.setEdition(new SimpleInternationalString("edition"));
-        cit.setEditionDate(new Date());
-        cit.setCollectiveTitle(new 
SimpleInternationalString("collectiveTitle"));
-        cit.setAlternateTitles(Arrays.asList(new 
SimpleInternationalString("alternateTitle"),
-                                             new Anchor(new 
URI("http://example.com";), "alternateTitle")));
-        cit.getDates().add(new DefaultCitationDate(new Date(), 
DateType.CREATION));
+        cit.setTitle(new SimpleInternationalString("A lost island"));
+        cit.setEdition(new SimpleInternationalString("First edition"));
+        cit.setEditionDate(new Date(1523311200000L));
+        cit.setCollectiveTitle(new SimpleInternationalString("Popular 
legends"));
+        cit.setAlternateTitles(Arrays.asList(new 
SimpleInternationalString("Island lost again"),
+                                             new Anchor(new 
URI("http://map-example.com";), "Map example")));
+        cit.getDates().add(new DefaultCitationDate(new Date(1523224800000L), 
DateType.CREATION));
         dataId.setCitation(cit);
         dataId.setTemporalResolutions(Collections.emptySet());              // 
TODO: depends on sis-temporal
         final Collection<MaintenanceInformation> resourceMaintenances;
         {
             // Resource maintenance
             DefaultMaintenanceInformation maintenanceInfo = new 
DefaultMaintenanceInformation();
-            
maintenanceInfo.setMaintenanceAndUpdateFrequency(MaintenanceFrequency.ANNUALLY);
-            maintenanceInfo.getMaintenanceDates().add(new 
DefaultCitationDate(new Date(), DateType.NEXT_UPDATE));
+            
maintenanceInfo.setMaintenanceAndUpdateFrequency(MaintenanceFrequency.NOT_PLANNED);
+            maintenanceInfo.getMaintenanceDates().add(new 
DefaultCitationDate(new Date(32503676400000L), DateType.REVISION));
             final DefaultScope maintenanceScope = new DefaultScope();
-            maintenanceScope.setLevel(ScopeCode.APPLICATION);
+            maintenanceScope.setLevel(ScopeCode.MODEL);
             {
                 // Scope level descriptions
                 final DefaultScopeDescription scopeDescription = new 
DefaultScopeDescription();
-                scopeDescription.setDataset("dataset");
+                scopeDescription.setDataset("Imaginary map");
                 maintenanceScope.getLevelDescription().add(scopeDescription);
             }
             maintenanceInfo.getMaintenanceScopes().add(maintenanceScope);

Modified: 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
URL: 
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java?rev=1828795&r1=1828794&r2=1828795&view=diff
==============================================================================
--- 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
 [UTF-8] (original)
+++ 
sis/branches/JDK8/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ObliqueMercator.java
 [UTF-8] Tue Apr 10 08:08:31 2018
@@ -17,7 +17,6 @@
 package org.apache.sis.referencing.operation.projection;
 
 import java.util.EnumMap;
-import java.awt.geom.AffineTransform;
 import org.opengis.parameter.ParameterDescriptor;
 import org.opengis.parameter.InvalidParameterValueException;
 import org.opengis.referencing.operation.OperationMethod;
@@ -25,8 +24,8 @@ import org.opengis.referencing.operation
 import org.apache.sis.measure.Angle;
 import org.apache.sis.parameter.Parameters;
 import org.apache.sis.referencing.operation.matrix.Matrix2;
+import org.apache.sis.referencing.operation.matrix.Matrix3;
 import org.apache.sis.referencing.operation.matrix.MatrixSIS;
-import org.apache.sis.referencing.operation.matrix.AffineTransforms2D;
 import 
org.apache.sis.referencing.operation.transform.ContextualParameters.MatrixRole;
 import org.apache.sis.internal.referencing.provider.ObliqueMercatorTwoPoints;
 import org.apache.sis.internal.referencing.Resources;
@@ -245,16 +244,10 @@ public class ObliqueMercator extends Con
         
getContextualParameters().getMatrix(MatrixRole.NORMALIZATION).convertAfter(0, 
null, -λ0);
         final MatrixSIS denormalize = 
getContextualParameters().getMatrix(MatrixRole.DENORMALIZATION);
         if (γc != 0) {
-            // TODO: This complicated code is only a workaround for the 
absence of "rotate" method in MatrixSIS.
-            // We should provide a "rotate" method in a future SIS version 
instead.
-            final AffineTransform tmp = 
AffineTransforms2D.castOrCopy(denormalize);
-            tmp.rotate(-γc);
-            final Matrix m = AffineTransforms2D.toMatrix(tmp);
-            for (int i=0; i<3; i++) {
-                for (int j=0; j<3; j++) {
-                    denormalize.setElement(j, i, m.getElement(j, i));
-                }
-            }
+            final Matrix3 rotation = new Matrix3();
+            rotation.m00 =   rotation.m11 = cos(γc);
+            rotation.m10 = -(rotation.m01 = sin(γc));
+            denormalize.setMatrix(denormalize.multiply(rotation));
         }
         /*
          * For variant B only, an additional (uc, vc) translation is applied 
here.


Reply via email to