You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2018/06/18 09:44:11 UTC
[sis] branch geoapi-4.0 updated (cccff10 -> d4818cc)
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a change to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git.
discard cccff10 Fix a never-ending loop when the file to open has a known extensions but is still not recognized as a known format. This happen in particular with XML files.
discard 728f8c9 Portrayal : remove final and extend MapItem on MapLayer class
discard c5c9e05 Call to Field.setAccessible(true) need to take in account security constrained environment. Call to ModifiableMetadata.freeze() share instances when possible.
discard b630979 Update dependencies.
discard 073f457 Take in account the change in number of dimensions when creating GeoTIFF GridGeometry. Fill more metadata using GridGeometry information.
discard 9707bbf Move PassThroughTransform.create(…) method to MathTransforms.passThrough(…).
discard f36a8f1 Fix error messages for illegal grid geometries.
discard df08624 First draft of a GeoTIFF reader capable to compute the GridGeometry.
discard f83e4a3 Renamed GridGeometry as Localization for avoiding confusion with GridGeometry in sis-raster.
discard 3981e4a Remove Numerics.hashCode(long), replaced by Long.hashCode(long).
discard a35a431 First draft of a GridCoverageResource interface.
discard 1a77cfa Use the 'long' primitive type instead of 'int' in GridExtent. This force us to not implement GeoAPI interfaces for now (until https://github.com/opengeospatial/geoapi/issues/36) is resolved. But since those interfaces were not part of formal standard yet (they are in the "pending" part of GeoAPI), we would not have implemented them in SIS release anyway.
discard 8f94734 Add abbreviations for all sub-interfaces found in ISO 19115 except quality package.
discard be63c88 Remember the filter used last time the user opened a file.
discard b06b176 SQL metadaat: fix an "ID column not found" error on PostgreSQL, more compact identifiers, and replace CRS WKT by EPSG codes.
discard baa0453 Leverage geoapi-conformance for reading OGC XSD files.
discard 90f97bb More robust parsing of GeoTIFF tags: when expecting a single value, accept an array if all values are the same. Also accept -1 as a code for "missing units" but verify if the unit is really missing.
discard f7db58a Method renaming and javadoc.
discard 4306bf7 Add tests for GridGeometry.
discard 5ddb67d Improve GridGeometry documentation and add a isConversionLinear method.
discard 9b9e347 Computes resolution at GridGeometry construction time.
discard 9a79396 Remove @Debug annotation on toString() methods in order to avoid polluting the list of debug methods with long list of toString() methods. Unless otherwise specified in javadoc, toString() will be considered implicitly for debugging purpose.
discard cbe4dd6 Documentation clarification in GridExtent.
discard b320d82 Added documentation and tests for PixelTranslation.
discard 3b82243 First draft of a port of GridGeometry class, for grid coverage (raster) support.
discard ed995f7 Take axis direction in account when computing the geographic bounding box.
discard 1c8320d When opening a dataset, try the DataStoreProvider for the file extension before to try any other DataStoreProvider. The intent is to avoid DataStoreProvider.probeContent(...) invocation that may cause loading of large dependencies.
discard e2acb6d Initial review of GUI main class (localization, file filters).
discard bf05d49 Initial commit of Smaniotto Enzo work from SIS-417, with some renaming.
discard eb846b3 Remove the "Longitude first" checkbox from CRSChooser - this is not the right widget were to provide this choice.
discard d65be17 Move GUI resources in internal package. Rename "gui.crs" as "gui.referencing". Deprecate the methods that introduce a dependency to AWT.
discard 0342749 Add a StoreResource interface, only internal for now (waiting to see how it works in practice). https://issues.apache.org/jira/browse/SIS-416
discard b123d7f Add "http://www.isotc211.org/2005/gmi" as a synonymous of "http://standards.iso.org/iso/19115/-2/gmi/1.0" namespace at unmarshalling time.
discard a27a2c8 Add a partial support of Record and RecordType (un)marshalling.
discard fb76580 Simplify some calls to Collections.emptySet(). Those simplifications are possible in Java 8 (the more complicated form was necessary in Java 7).
discard caffbb9 Fix an error in the version number declared in EPSG history table.
discard 816611b Add Derby dependency with <scope>test</scope> in modules that connect to spatial database for their tests.
discard 120132b Reduce the amount of exceptions logged when the application can not connect to the spatial metadata database.
discard 3c249f6 Update Java requirements in the documentation (from Java 7 to Java 8).
discard e0db741 Dependency to geoapi-netcdf is not needed anymore.
discard 32efa59 More robust metadata verification in tests (do not depend on the details of the formatting process).
discard 765058e Re-enable the last ignored test in netCDF module.
discard a4b95ea Replace the comparisons of metadata tree by a more robust comparison of properties. It allows us to ignore some properties and is not sensitive to property order.
discard 08548c2 Do not depends anymore on geoapi-netcdf test JAR. https://github.com/opengeospatial/geoapi/issues/25
discard 183c5fe Rename Citations.getCodeSpace(Citation) as toCodeSpace(…). The getCodeList name was confusing since it suggests that the method was returning a citation code space, while actually it returns the citation *as* a code space.
discard ad377bb More tests to be temporarily ignored while we are refactoring netCDF tests in geoapi-conformance.
discard dc64ed4 More netCDF test to temporarily disable.
discard 70a8caf Temporarily disable to netCDF tests, pending a refactoring in geoapi-conformance.
discard 15e8fc7 Simplify the "sis metadata" command-line by omiting the verbose nodes telling that the tree use ISO 19115 standard.
discard 08a03df Make XML.LENIENT_UNMARSHAL public with improved documentation.
discard 096f208 Enable lenient unmarshalling only from XML.unmarshal(...) methods, for avoiding surprising behavior when a user create his own UnmarshallerPool. This restore a behavior closer to the one we had before the "upgrade metadata to ISO 19115-3:2016" work.
discard 0ebfe38 Clarification about which packages are still work in progress: - Move ...sql.postgresql to ...internal.sql.postgresql. - Move org.apache.sql to org.apache.storage.sql for making clearer that it is about DataStore. - Add warnings in sis-sql and sis-shapefile modules, together with index package. - Trim extra spaces, fix a few formatting issues in XML class, fix package-info.
discard 0d4bb90 Post-merge cleanup.
discard 70d32f9 Change Query interface to an abstract class allowing to move some SimpleQuery properties later.
discard 56acfde Reduce redundancies in the test and add a parallelization test.
discard 6fdb9c8 Implement JoinFeatureSet.features(boolean) on top of Spliterator instead than Iterator, and use an identifier created by FeatureOperations.compound(…) instead than computing the string concatenation unconditionally for every features.
discard 4b0a7e1 Move common getMetadata() default implementation in AbstractFeatureSet. Allow FeatureOperations.compound(...) to work with FeatureAssociationRole. The intent is to use it in JoinFeatureSet.
discard 5981422 Rename FeatureSetView as FeatureSubset and reduce redundancies in SimpleQueryTest.
discard 1d228dc Review of org.apache.sis.internal.storage.query package.
discard 1e1f3a2 Complete revision of filter package, except DefaultFilterFactory which will need a severe revision of its API (but this task need to be done in GeoAPI first).
discard ecd1d7b Make Expression/Filter implementations package-private. The intent is to force the use of a FilterFactory, because those factories may be DataStore-specific.
discard 0afe359 Rename ArrayFeatureSet as MemoryFeatureSet, add javadoc and move some implementation to super-class.
discard 44ce145 Add explicit Derby dependency (test scope) for all storage module. This is required for avoiding a test failure caused by different version of Derby/JavaDB used be sis-referencing and sis-earth-observation (for example).
discard b6f5b85 Declare explicit dependency to Derby with test scope, and remove reference to JavaDB from documentation (SIS-383).
discard 0b62b81 Upgrade Derby and PostgreSQL dependency (SIS-383).
discard 68739ab Set SVN properties.
discard 00a40bb FeatureSet : add JoinFeatureSet implementation, similar to SQL Join for two distinct feature set
discard 4140f45 Fix SVN properties.
discard 5126ee8 Query : support simple query columns
discard 7cbe468 Set SVN properties on new files.
discard 8548c38 DataStore : add in memory feature set and simple query implementations
discard 062cce3 Fix wrong east/west value order in test file.
discard e3d64a5 Renamed "toString(StringBuilder)" private method as "appendStringTo(…)" as proposed on https://github.com/apache/sis/pull/7
discard 3adf3f6 Work on SQL store: reduce the visibility of classes. Avoid reference to internal types from public API. Edit javadoc, add some @todo items.
discard 4293c27 Clarification in documentation.
discard 17fa2b2 Replace the namespace in "xsi:type" attribute value and automatically add a local "xmlns:lan" attribute if needed. https://issues.apache.org/jira/browse/SIS-399
discard 33f7e83 Fix the way ExtendedElementInformation.maximumOccurrence and cit:Date are marshalled. Add a few nilReason for missing properties in the metadata test file.
discard 75fa2dd Add missing XSD URL for schema validation.
discard a47f72b Complete the geometry factory backed by JTS and add tests.
discard e63b6fc Now that the Java Topology Suite (JTS) is available under Eclipse Distribution License 1.0 (a BSD-style license), replace Java reflection by direct call to JTS methods. The JTS library stay optional, as well as the ESRI library. Apache SIS fallbacks on Java2D if neither JTS or ESRI library is available on the classpath.
discard 273722a Allow MIME type detection on XML file without namespace.
discard e00c9fc Fix a module name.
discard ab5e078 Clarification: warning occurs when there is no *local* registry for a given version (but a registry could exist online).
discard c4879a1 Remove OSGi configuration since it will be replaced by Jigsaw.
discard 8aa7db5 Add a warning about the fact that those test files are not yet ISO compliant.
discard 59805fa Initial commit of metadata XML files produced by MarshallingTest, for anti-regression tests later. Those files are known to not be conformant to ISO schemas yet. They will need to be fixed later.
discard bc63176 Regroup XML test files in same directories, one directory per XML schema version.
discard 37840cf Fix SVN properties.
discard c797f5a SQL : add SQLQuery, prepare query feature set, start postgres implementation
discard 088c373 Set dummy values in the metadata tests. Actually this complete the modifications accidentally committed earlier today.
discard 24b4f6b Fix SVN properties.
discard dc97ec8 SQL : first version of database reverse engineering logic
discard e6e9803 Set SVN properties.
discard e16d978 SQL : add database metamodel classes
discard 914059d The γc=0 case do not happen in practice. If it still happen, the generic case is sufficient.
discard f195f1f Replace the use of Java2D by SIS matrix.
discard 046f289 Fix SVN properties.
discard bc5607d Fix a test failure with Proj4 binding (missing Proj4 identifier on projection parameter).
discard 7065154 SQL : add base classes of jdbc store
discard 167ec98 SQL : start maven module for JDBC store implementations
discard 1db5fa1 Replace links to http://www.remotesensing.org/geotiff/ by links to http://geotiff.maptools.org/. https://issues.apache.org/jira/browse/SIS-415
discard 483e36d Register ObliqueMercator in META-INF. Add or fix GeoTIFF keys for ObliqueMercator. Fix the way Parameters.getValue(…) handles optional parameters with units of measurement.
discard bc5a8db Add Oblique Mercator projection (EPSG:9812, EPSG:9815). https://issues.apache.org/jira/browse/SIS-221
discard 5430b8b Add public API for CRS.findOperations(sourceCRS, targetCRS) - see SIS-412.
discard 89ad1b4 Allow CoordinateOperationFinder to return a list of CoordinateOperation instead than a singleton (SIS-412).
discard 7d7a335 Javadoc on add/remove listener methods.
discard dbb8f8b Javadoc on new portrayal classes.
discard 469b690 Resource : uncomment and implement resource listeners methods
discard aca5a19 Fix some test failures when executed with JDK9. Patch by Alexis Manin: https://issues.apache.org/jira/browse/SIS-392
discard b81b8af Fix dependency versions in NetBeans project (shall be the same than in Maven pom.xml), and upgrade Maven dependency in build-helper.
discard 244d16d Fix SVN properties and minor typos.
discard fb8250b CheckStyle : remove trailing spaces in portrayal module
discard 2250ac3 Map : add a first version of map context and layers classes
discard 9185ddc Remove Eclipse project configuration since it has not been maintained for years.
discard 3530373 Minor formatting, svn properties settings and NetBeans project configuration.
discard cd61ff9 Set SVN properties on pom.xml file and update NetBeans build-impl.xml file.
discard 854c52d Minor typo fixes.
discard 58b1813 Portrayal : new maven module for symbology and mapping
discard 24c7387 Update in NetBeans project configuration for NetBeans 9-beta.
discard 7dcc50e Avoid nested SpecializableTransform.
discard e5061ab Minor post-merge cleanup.
discard 453579f Upgrade dependencies and Maven plugins. Remove findbugs configuration since it has never been used.
discard 12c4b46 Move the listener and event class to an 'event' sub-package and develop Javadoc.
discard c59e66a Resource : prepare listener API for Resources
discard f0cf839 Enable the use of Sentinel 1 localization grids in GeoTIFF reader. https://issues.apache.org/jira/browse/SIS-407
discard df563c5 Addition of SpecializationTransform2D and public API for making those transforms accessible. This complete https://issues.apache.org/jira/browse/SIS-408
discard 2ce03d3 Make AbstractMathTransform.Inverse inner class static for more serialization stability and avoiding redundant fields. https://issues.apache.org/jira/browse/SIS-410
discard d2b74d9 Implement the inverse of SpecializableTransform (needed for quasi-regular localisation grids).
discard e7dba9b Add a Formatter.append(double[][]) method for geometry coordinates, together with calculation of a default number of fraction digits and support for number alignment (for more readable WKT). This can be used as a basis for more extensive geometry WKT support in the future.
discard 645f23c Avoid OutOfMemoryException when tie points in a GeoTIFF images are not distributed on a regular grid. https://issues.apache.org/jira/browse/SIS-407
discard 0dbe050 Avoid OutOfMemoryException when tie points in a GeoTIFF images are not distributed on a regular grid. https://issues.apache.org/jira/browse/SIS-407
discard c578754 Renamed gmx package as gcx.
discard 6fd9dbb Move StreamWriterDelegate since it is not longer needed by sis-utility.
discard a893909 Merge NameAdapter, GO_GenericName and GO_LocalName in a single class, as they were no need to specialize.
discard d3a5743 Add missing package-info to new package.
discard 89798e7 Declare test dependency.
discard 712303a Regroup the code related to the "lan" namespace into the lan sub-package, except MD_CharacterSetCode which needs to stay with other code lists.
discard 568fa7d Fix wrong namespace (in particular the "gco" URL).
discard d8560e6 Move XML support from sis-utility module to sis-metadata. https://issues.apache.org/jira/browse/SIS-406
discard d2eaf90 Remove a logging message that does not appear to be useful in practice (about JAXB attempting to add a null element in a collection). Avoid direct dependencies of CheckedArrayList to Context, in prevision of moving XML-related classes to sis-metadata in a future commit.
discard c1769e2 Post-merge cleanup.
discard c6d1cac Merge from ISO 19115-3 branch.
discard ddf8f2c Fix a version number.
discard e336805 Replaced URIDataStore.Provider.getSuffix() by an annotation to be put on DataStoreProvider implementations.
discard a0f9073 Remove the Capability code list, replaced by interface hierarchy (WritableAggregate, WritableFeatureSet).
discard 6b4222a Replace DataStore.identifierMatches(…) by an improvement of Citations.identifierMatches(…). FolderStore shoud verify if the directory is writable. Remove unused methods.
discard 21fde5d Documentation and minor cleanup (import order, etc.).
discard d168146 Review tests.
discard dad2e97 Add a ParameterDescriptor for "create" parameter.
discard 6fa928d Naming : rename FileSystemResource, remove default writable resource method implementations
discard b7e2208 Move the Store.Writable internal class as a separated class: WritableStore. Be more conservative before to delete files, e.g. delete only if direct children of the directory managed by the store. Avoid calls to components().contains(resources); check file existence instead. Take StandardOpenOption in account when creating a folder store. Replace strings by localized resources in exception messages. Move some code in a StoreUtilities class so it can be shared. Move some c [...]
discard 45eb6c0 DataStore : fix ByteBufer not restored to original state by FileSystemProvider
discard 0362ee0 Partial revision of FileStoreProvider changes.
discard a6ea766 Fix wrong column name in the SQL query for ordering the ellipsoids.
discard a82a3db Javadoc on org.apache.sis.storage.Resource and subtypes.
discard fa36d85 Fix SVN property.
discard 1f36cef Rename NamespaceContent as RenameListGenerator.
discard 2c1ba42 Remove FilteredByVersion.enable(). Not needed anymore since metadata implementation avoid invoking FilterByVersion in public non-deprecated methods.
discard 3c49662 Renamed ISO 19139:2007 "gco" prefix as "gcol" with "l" as "legacy". We don't use "gco1" because new ISO 19115-3:2016 "gco" prefix is associated to http://standards.iso.org/iso/19115/-3/gco/1.0
discard c2e4539 Rename "[Import|Export]Names.lst" as "RenameOn[Import|Export].lst".
discard 1ed9b9c DataStore : improve findResource DataStore method to handle namespace and not only the code
discard 0076f81 Renamed MetadataConsistencyCheck as PropertyConsistencyCheck.
discard b3440e2 Fix or disable French profiles tests. See https://issues.apache.org/jira/browse/SIS-404. With this commit, all non-ignored tests now pass.
discard afd2f01 Fix Landsat test for new metadata element order.
discard 16247fb Fix the creation of an XMLEventReader form a XMLStreamReader. This is required for GPX tests.
discard dcdacaa Update NetCDF test case for new ordering of metadata elements.
discard ba6dba8 Temporarily disable tests that require https://issues.apache.org/jira/browse/SIS-402 fix.
discard 853caa1 Fix a corner case in the reordering of elements (MD_DataIdentification.extent to be inserted between environmentalDescription and supplementalInformation).
discard d6862eb Fix org.apache.sis.test.integration.MetadataTest. This fix is incomplete - see https://issues.apache.org/jira/browse/SIS-402
discard 44a364b Fix DefaultVerticalDatumTest by using automatically ISO 19139:2007 metadata when marshalling GML 3.2. This is an incomplete hack - see https://issues.apache.org/jira/browse/SIS-401
discard aba4636 DataStore : add FileSystemProvider interface to declare format suffix,signature and factorize probContent implementations
discard 8138832 Fix PositionalAccuracyTest. This require a partial implementation of xsi:type attribute renaming. This fix is incomplete - see https://issues.apache.org/jira/browse/SIS-399
discard 0c9ccd2 Javadoc : fix absolute javadoc links
discard 7db0dac DataStore : add method to find compatible datastore providers for a given input
discard 01c23ca Fix ProcessStep test.
discard 53f291d Fix typo: "xlmns" -> "xmlns".
discard e91ca6f Change the format of ImportNames so that the behavior of the "<type>" pseudo-property is the default. Add missing information in those files for allowing DefaultLineageTest to pass.
discard 0c1ff0e Rename the files containing the name replacements to apply at reading or writing time.
discard c8aac52 Replace the hard-coded renaming rules in TransformVersion by the use of of "ImageryExtensions.lst" file (which will need to be renamed).
discard 3c0b2f1 More simplification of the algorithm for renaming XML element. Move the 'convert(QName)' method to the Transformer parent class.
discard 85986ff Modify the algorithm for element renaming. The new algorithm avoid the need to maintain a map of class where a property may appear.
discard 591bf0c Move the code loading "NamespaceContent.lst" file to the Transformer parent class, for allowing sharing with TransformingWriter.
discard 8288b0f Moved documentation from TransformingNamespaces to Transformer.
discard 4b1a559 Rename FilteredXML and related classes as Transformer, for closer analogy with javax.xml.transform.Transformer (for XSLT).
discard 3ce1ba8 Changed file extension from ".txt" to ".lst" for NamespaceContent and ImageryExtensions.
discard 0779a95 Use one-space large indentation instead of two spaces in NamespaceContext.txt. This saves about 2 kb in file size. Restore the list of properties in all ImageryExtensions.txt types and declare the namespace, in order to have the same format than for NamespaceContent.txt. The intent is to share the same code for loading those two files.
discard 8cb8944 Minor refactoring and documentation fixes.
discard d5b76d0 Simplify the list of ISO 19115-2:2009 extensions by omitting properties when the whole class is an extension.
discard 1897c3b Add a list of ISO 19115-2:2009 properties. This will be needed for tracking which property to put in "gmi" namespace when marshalling legacy ISO 19139:2007 documents.
discard abedc67 Add a renaming rule for a property that was mispelled in legacy ISO 19115-2:2009.
discard a6ec717 Declare some XML properties that have different names in legacy ISO 19139:2007 and ISO 19115-3:2016.
discard 6b5919e Fix the namespace and element name of MI_PolarizationOrientationCode. The difficulty in this case is that the CodeList name changed. See https://issues.apache.org/jira/browse/SIS-398
discard 30690bf Allow re-ordering of elements at marshalling time. This allow DefaultServiceIdentificationTest to pass.
discard 9a0cae9 Fix checkstyle violation.
discard c46b370 Fix SVN properties.
discard 8ce3b67 Fix unmarshalling of ServiceIdentification. Marshalling still needs to be fixed.
discard f6b61e8 Bug fix in the tracking of QNames in 'FilteredReader.outerElements' (was using wrong namespace).
discard 626f560 More stable mapping of namespace URIs to prefixes.
discard 0d7c761 Storage : improve folder store to support add and remove operations if a specific provider is given
discard e31ff59 Storage : split Aggregate/FeatureSet in read/write interfaces, add FileSystemResource and Transaction
discard 7a26b92 DataStore : add FeatureSet.updateType and FileSystemResource
discard d0f29bd Replace the use of XMLStreamReader by XMLEventReader.
discard 892b265 Clarification of FilteredNamespaces role. First test on property renaming.
discard 0f9d6a8 Prepare for handling of QName localPart renaming during (un)marshalling. As part of this work, FilteredStreamReader and FilteredStreamResolver have been merged in a single class, FilteredReader.
discard 79e03e4 Document better the method doing prefix <-> namespace mapping, and disallow the ambigous one (in our context).
discard 09f6ff2 Use a different strategy for parsing legacy <gmd:URL> element. Our previous attempt using 'LegacyURL' class did not worked. This failure were unoticed because of insuffisient test coverage in DefaultCitationTest. This new approach handles <gmd:URL> in GO_CharacterString instead (like what we already do for <gcx:FileName>).
discard 0700035 Better mapping from namespace URI to XML prefix.
discard 53cd3a1 Restore @XmlType on GO_CharacterSequence subclasses; they are required for proper working of "xsi:type" attribute. Update some related documentation.
discard b40d37e Rename some private fields and methods with less confusing names.
discard 839a434 Fix more sis-metadata tests (not yet all of them).
discard 782144a Upgrade Maven plugins.
discard 47d3068 Temporarily relax some tests because of changs in GeoAPI 4.0-SNAPSHOT. They are corrections in the upgrade to ISO 19115:2014. Those corrections are reflected in the SIS ISO_19115-3 branch, to be merged later.
discard 12012af Fix SVN properties.
discard d7ba538 Improve AnnotationConsistencyCheck and fix some JAXB annotations as a result of those verifications. Some GeoAPI annotations have also been fixed as a result of this work and those fixes are required by SIS: https://github.com/opengeospatial/geoapi/commit/af650d33c567d6d11420d7ba16822fb4f67f5b08 Tests in sis-metadata and downstream modules have not yet been fully fixed.
discard 1af86d6 Fix property order in tests and remove some private methods for JAXB defined only for element ordering. Change in element order will be managed by FilteredWriter instead. This commit fixes some sis-metadata tests, but not all.
discard 4f6d448 Minor clarifications in test documentation. Starting from this commit, sis-utility module is back in buildable state with tests enabled. There is know test failures in sis-metadata to be fixed in next commits.
discard 3f658a5 Replace the use of XMLStreamWriter by XMLEventWriter when writing legacy ISO 19139 metadata. The intent is to make easier to handle renaming of metadata element or their displacement.
discard a8ff39d fix checkstyle error, missing final
discard a1d30ce DataStore : add Capability API on Resources
discard 2e8ed03 Typo : fix copy/paste documentation error in SensorType
discard 7d3b1fa More consistent order for @XmlJavaTypeAdapter declarations.
discard 6e6195a Remove unused @XmlJavaTypeAdapter and add a few missing ones. This cleanup work was done with the help of PackageVerifier.
discard cf7a7af Set the version number to 1.0 for all metadata implementations impacted by the namespace change.
discard b7e8ecd Regenerate NamespaceContent.txt after we verified JAXB annotations against XSD files.
discard a69dd7a Remove GO_Decimal32 (because unused by SIS), avoid uncertain @XmlType annotations, and Javadoc fixes.
discard b17002d Give protected access to a constructor for allowing usage from different package. Actually used (for now) in Geotk rather than SIS. Note that it is internal API.
discard 96c689e For code list adapters, move namespace declaration in the @XmlElement instead than @XmlType. This is a little bit more accurate since we have no good name for those @XmlType, and this clarification make annotation verification a little bit easier.
discard 9665157 Move XSD URLs directly in the @XmlSchema annotation. Since each of those URL is used at only one place, there is no big advantage to declare them as constants. JUnit tests at this revision are known to fail; they will be fixed before merge.
discard 4af353b Fixed some @XmlNs annotations and first draft of value type verification. Note that JUnit tests still don't pass; this will be fixed before merge.
discard 7e6b6a0 Fix 'required' flag in JAXB annotations.
discard 2493551 Move PackageVerifier in a separated class and move AnnotationsTestCase to the org.apache.sis.test.xml package.
discard 48df450 Last namespace fixes for metadata and code list adapters. The case of data quality package is not yet resolved; see https://issues.apache.org/jira/browse/SIS-394
discard 5aae8ca Fix more JAXB annotations.
discard 43ce3fd Fix more JAXB annotations following SchemaCompliance verification.
discard b3ec88c Spelling fix: "intend" -> "intent" when used as a noun.
discard b7dcaa1 Add some missing namespaces and fix some property names identified by SchemaCompliance.
discard 7294d38 Moved SchemaVerifier in its own package. Keep package-info data in an internal class.
discard 0062275 Apply namespace fixes to code lists.
discard c8d492c Fix more namespace URLs with SchemaVerifier help.
discard 8e570f8 Fix a few namespaces with the help of SchemaVerifier.
discard 4dcd019 Modification in the extrapolation method of LinearInterpolator1D: keep the same slope than the extremum where extrapolation occurs.
discard aa50ca7 Remove "Branch-dependent" import sections that were related to JDK7.
discard 5fa3a63 Fix errors in @XmlRootElement identified by SchemaVerifier. Remove the deprecated DefaultFeatureTypeList class since its XML form is not defined.
discard e208178 First draft of a class for verifying @XmlElement annotations against OGC/ISO schemas. Current version loads the XSD files but does not yet perform the actual verification.
discard 7d70aa4 Use pre-defined Version constants.
discard 74d921c Remove unused JAXB adapter.
discard 447f2f1 Review the version constants to be kept. Update documentation related to metadata versions.
discard c23356d Skip commit 6cb8eb04dcdea0ff03a7067bec6ca3cf57c1b913 (Added more convenience methods for marshalling to XML.java) The number of convenience methods that could be added is endless; a line has to be drawn somewhere. The XML.marshal(Object object, Result output, Map<String,?> properties) is there as a fallback for cases not handled by other convenience methods.
discard 6ead83e Skip commit 8388392013a65b73231ee8f05a0fe43d89c48b4d (add developer credit in .pom files) because it was already done in commits 8cc5640e8bd6b353de1a7afda0f2e2281cd68b53 and 82b9d2ea025647a26df33c2c0feced75928e0317.
discard 446244f Skip commit 783b71a96171f163f9da1088e11926bc9720101c (Fix bug with PT_FreeText not properly marshalling) since it has been implemented by a different approach in previous commits. A large part of skipped commit is about replacing the namespace in "xsi:type" attribute. We skip that part for now, since we may revisit the way we apply on-the-fly XML transformations (using XMLEventReader instead of XMLStreamReader).
discard d86f572 Remove a package which is no longer needed since upgrade to ISO 19115-3:2016.
discard 0af3479 Adaptation of commit 5b6d24d241a809993a09f8c5f9f5e0da14068844 from Image Matter (Refactored FilteredStreamReader). DefaultServiceIdentificationTest on legacy XML fail because of the way <gco:MemberName> and <gco:ScopedName> were marshalled (they were inserted directly in the XML document, without <srv:scopedName> wrapper contrarily to what ISO 19139 usually does.) The new ISO 19115-3:2016 schema is more consistent, but compatibility with legacy ISO 19139:2007 schema is u [...]
discard 6379ed0 Adaptation of commit 4617aca4d15875f7403c4677c132d3cbc3eac29b from Image Matter (Update a few test classes in sis-utility).
discard 34addbf Adaptation of commit 8752a2098d01e36eb375241208b35cbfdeae5227 from Image Matter (Fixed a number of bugs in the sis-metadata tests, but they are still not perfect).
discard d1cf9ed Adaptation of commit 39e5464004f8531b707e273570aa841c9074ef2e from Image Matter (complete first pass on tests for ISO 19115-3).
discard 57da24e Complete adaptation of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata).
discard 676a5f8 Upgrade PT_Locale and Debug PT_LocaleTest.
discard 7fd0e38 Do not handle anymore changes of attribute name and values in FilteredStreamResolver. We will try to handle those changes in methods invoked by JAXB instead.
discard bd4e1a9 Fix wrong namespace for a few code lists.
discard 6c2656b Adaptation of part of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata).
discard 8a9e309 Adaptation of part of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata). We use a different strategy: convert the test case to ISO 19115-3, and perform automatic prefix and namespace replacements for testing legacy ISO 19139:2007. We test on DefaultBrowseGraphic at first, before to expand this approach to other classes. All XML fragments modified in this commit have been [...]
discard b00e08d Skip commit e212fa862cd16c969cb2cd3c726a81ed8fef725d (XSLT experiment) Adaptation of commit 3d3bb1b0e47fcd6b4985943a4f33e307dcc59ab6 from Image Matter (got the first ISO 19115-3 round trip test working). We omit the ISOTestUtils class - instead we define the expected XML directly in the test.
discard 74c7a88 Adaptation of commit f03b113f2e90a12e19697f7a51256cd9604dfaaa from Image Matter. The change from GMI to MDS namespace has been skipped; we keep GMI namespace, pending ISO 19115-4.
discard 3ed94de Adaptation of commit f0ca202ef911462fbe514e1310050f95e81fdd83 from Image Matter (update DefaultApplicationSchemaInformation and DefaultExtendedElementInformation)
discard 2f94429 Adaptation of commit 7bc46154dfe9f5b51a0d530c0054ecf9e93faf57 from Image Matter (update some classes in spatial package)
discard af39b54 kip (for now) commit b9138ba4701603d111a1ad5a45cefe49bddc0e00, be4322b6daa394a9b72f797002f8a32be4d07afc and 1c6335db0835583a53268e72152a0e0f1cab4231 Adaptation of commit 7ab66791cf9d495e8627a82fe7f57edbca51baa7 from Image Matter (minor fixes in maintenance and quality packages)
discard 11bd3e9 Adaptation of commit 97b73cd1d048120ed11b22cda824fbf01cbd4608 from Image Matter (fix some minor bugs, add documentation to root folder)
discard 3b0ee63 Skip commits 9684e4808fa6e0ea5275f6a9e025e71a8eb43c6d, 1ae0aa336bb614168d61e84afda78e8ce8dcad92 and 55c11421a4f6da5a5e07a4be0b481c0cd82dcf94. Adaptation of commit 39baf8a2bda6e761b264032fa1fd9dec2d72f9ab from Image Matter (fix some bugs with DefaultResponsibility and DefaultResponsibleParty. Also add the rest of the elements in DefaultMetadata)
discard 238f427 Adaptation of commit 0f574678f26d320e619831b29086e0167f7ffec5 from Image Matter (update classes in lineage package)
discard 11ef4b9 Adaptation of commit 969adb4a3949575c8913b4607c40d5f1601b9375 from Image Matter (more Lineage upgrade; add Cullen to contributor list)
discard 7051071 Adaptation of commit 581e9dc8f5d7540d346d207562cba6c17fb20ed5 from Image Matter (update some classes in lineage package to support 19115-3)
discard de05f75 Adaptation of commit 554ca46345bb3b80506ef881604ad37a27a1bdfd from Image Matter (minor changes to DefaultCitationTest)
discard c0c0313 Adaptation of commit e25bb7fa27fd4305d2fdb82828fbdb2edaae5018 from Image Matter (add very simple test case for ISO 19115-3 CI_Citation)
discard d716203 Adaptation of commit dac622016fb6a480a4c39a9ff39c4e71916c1322 from Image Matter (fix a few more issues with tests)
discard 6fe2a75 Skip commit 669c595ef233dafe676da71bc7b184093d463a6b (this commit was setting the default format to legacy ISO 19139, while we want newer ISO 19115-3). Instead, fix a few test cases.
discard 1e875a1 Fix the replacement of namespaces when marshalling legacy ISO 19139:2007.
discard da04b0d Commit efc8e8121710508654a842d1a7c9496ee94d7952 from Image Matter (fix a few tests, fix codelist and metadata base paths when working with ISO 19139)
discard cf43cda Commit d06b69194a9e3a35062212c1a4530f84088c9cad from Image Matter (update XMLTestCase class)
discard 61deb1d Commit 37d396b022ce10ab743bbb875019a65302672861 from Image Matter (update classes in distribution package for ISO 19115-3 compatibility)
discard 83a3492 Documentation update: replace some "ISO 19139" by "ISO 19139:2007", "ISO 19115:2003" or "ISO 19115-3" depending on the context. There is no code change in this commit.
discard a4a4d6a More uniform pattern in the adapters (namespace in @XmlType, public constructors for JAXB).
discard 3219d01 git-svn-id: https://svn.apache.org/repos/asf/sis/branches/ISO-19115-3@1819746 13f79535-47bb-0310-9956-ffa450edef68
discard 6961c21 Add a partial test case (not yet fully enabled). This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard f306de0 Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 95f6ec6 Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 0412123 Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 8e7544a Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 5c9bded Upgrade some DefaultMetadata methods to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 13cdb6c Replace Context.isLegacyMetadata() by FilterByVersion.LEGACY_METADATA.accept().
discard f8bcc5d Adjustment in the switch between ISO 19139 and ISO 19115-3 marshalling.
discard 68fcdb5 Upgrade metadata internal classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard ce4bb2b Partial upgrade of code list to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 88bcb3b Upgrade JAXB internal objects (Measure, Language, Country, etc.) to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 57699f0 Initial port of the mapping from ISO 19139 namespaces to ISO 19115-3 namespaces. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard 054f3de Declare constants and internal methods for support of ISO 19115-3 metadata version. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
discard d5f04e6 Merge from JDK8 branch.
discard 8bc7666 Set version number to next release.
discard 535da61 Tuning in the application of style for <code> elements.
discard c55141e Add documentation and the missing 'computeIfPresent' method.
discard 43f6674 Change method order for having the most frequently used first. There is no code change in this commit, only displacements.
discard 5267712 Complete https://issues.apache.org/jira/browse/SIS-375 As a side effect, Cache is now declared as a ConcurrentMap.
discard 6f4343b Initial commit of SIS-375 work by Alexis Manin.
discard a76d228 Wrap the "In this chapter" text in a <p> element, for easier CSS styling.
discard b37cb60 Documentation updates, including the tools to generate the developer guide.
discard 8d8e007 Add keywords to highlight in the developer guide.
discard fa33f3e Use a property for the non-free resources (to be included only if the "non-free" profile is enabled).
discard d4757d2 Module to be enabled during releases only (for now).
discard e24d18f Add a note about geohash versus MGRS.
discard 8fd4f8a Update links to UCAR netCDF library.
discard 91c7601 Let the sis-build-helper plugin version set to ${project.version}.
discard 8861005 Update NOTICE and README files.
discard 6ba6160 Add description and license information as .txt files.
discard a02e407 Add functions for CRS scope and domain of validity.
discard 96b70a1 PropertyTypeBuilder setter methods should return PropertyTypeBuilder for method invocation chaining.
discard 216a684 Code formatting.
discard 3f8b5e2 Documentation clarification and expand the list of known SIS types.
discard 472b444 Fix a failure when running extensive tests.
discard b338bf0 Add usage example.
discard 43937c0 Tune loggings appareance.
discard 4c64719 When formatting an EPSG operation, include only the EPSG parameters. The intend is to omit the OGC parameters that are redundant with EPSG ones, or which can be inferred from the context.
discard e8b0f78 Do not log a scary stack trace when the SIS_DATA environment variable is set but the EPSG SQL script are not available. Instead, log a more consolidated message (less repetition).
discard 500537d Remove some deprecated methods on 1.0 development branch. Those methods will still on the 0.8 branch.
discard 099c516 Try to be more informative in some logging messages related to SIS_DATA environment variable.
discard c36913e Fix the comment about test accuracy.
discard 987688c Adjust tolerance threshold when SIS is tested without EPSG geodetic dataset.
discard 14af825 Javadoc formatting.
discard f34ad86 Spelling error in exception message.
discard a8ea5ed Allow configuration of the way represent moving features.
discard 8dd7f12 Update README for next release.
discard 6773cba Set version number of next release.
discard 6e99aaf Set the EPSG geodetic dataset URL to its expected location after release.
discard d671c6a Fix javadoc warnings.
discard a818597 Notes about futur work that still need to be done after 0.8 release.
discard 34a9724 When detecting if we have a "wraparound change", do not require the source axis to be "wraparound" too. Example: conversion of dates on temporal axis (infinite span toward past and future) to a month in a cyclic 12-months average temperature.
discard 034deaa Fix an "ellipsoid change" operation which was wrongly set to identity. We use abridged Molodensky instead for now, even if all translation terms are zero.
discard c72567e Bug fix when computing intersection between an ordinary envelope and an envelope having [0 … -0]° longitude range.
discard 7abf855 Add (for performance reason) a specialization for Molodensky transform in the particular case where the transform is two-dimensional, abridged and without translation terms. This is a first step before a bug fix about ellipsoid change when there is no Bursa-Wolf parameters.
discard 298de6c Javadoc.
discard 4447b74 Rename IntegerList.ints() and AttributeNames.Keyword.
discard 451389b Fix change of longitude range when there is also a change of ellipsoid.
discard 09c9b90 Bug fix the [0 … 360]° when a source or target CRS is of kind CompoundCRS.
discard dbe3452 Minor javadoc adjustments.
discard dd93a8a Add support for netCDF "metadata_linkage" and "coverage_content_type" attributes. This complete https://issues.apache.org/jira/browse/SIS-171 for now.
discard 1f9d691 Rearrange identifier, standard name and keywords as (word, vocabulary) pairs. Set program as such (word, vocabulary) tupple and add instrument and platform.
discard 5998c5d Keep trace of methods having a system-wide effect.
discard f688ce8 Implement IntegerList.PrimitiveSpliterator.trySplit() for parallelization.
discard 50c196b Override IntegerList.spliterator() and iterator() method with specialized types.
discard c347bd0 Alexis Manin's patch: add IntStream support to IntegerList. https://issues.apache.org/jira/browse/SIS-367
discard fe96e19 Javadoc.
discard c3d46cd When a coordinate operation change the longitude axis range from [-180 … +180]° to [0 … 360]°, the Envelopes.transform(…) result should be normalized accordingly.
discard 52a6cc3 DataStore : add FeatureSet Query API
discard 6de2876 Add support for NetCDF "creator_type", "publisher_type" and "program" attributes.
discard 8f4f282 Add support for netCDF "geospatial_bounds" attribute parsing.
discard a687bf0 Tests consolidation and addition of javadoc about combined URIs.
discard ab481b3 IdentifiedObjects.lookupURN(…) should be able to create combined URI.
discard fe5f25c Complete implementation combined URI for multi-dimensional CRS. https://issues.apache.org/jira/browse/SIS-341
discard 02d85ae Simplify a little bit DefinitionURI by moving the 'format(…)' code to the only place where it was used.
discard 9fee646 Parse CompoundCRS also in HTTP URL in addition of URN.
discard 2fe650b Partial implementation of compound CRS in URN. For now only the URN parser has been adapted (not yet the CRS factory).
discard d4b376d More support of three-dimensional projected CRS, by improving the decomposition in components.
discard 710b424 Add a CRS.compound(CoordinateReferenceSystem...) convenience method. This task implied adding other methods for computing domain of validity intersection.
discard b71e7a4 Fix erroneous CRS names.
discard ea1272c Complete support of three-dimensional projected CRS.
discard f6b66f5 Partial support of three-dimensional ProjectedCRS. This is actually an extension of existing support for three-dimensional GeographicCRS.
discard cdfe450 Do not allow creation of CompoundCRS made of horizontal CRS + vertical height. https://issues.apache.org/jira/browse/SIS-303
discard 54b913a Store native libraries in a "linux", "darwin" or "windows" sub-directory at the same level than the SIS JAR file.
discard dc72da7 Create automatically the distribution file when "apache-release" profile is activated.
discard 6bd2374 Avoid usage of deprecated Maven API, and get the resource to include in PACK200 from Maven itself instead than from "target/binaries" directory.
discard bc6f727 Use the embedded database if SpatialMetadata database does not exist.
discard c319d01 If the 'non-free:sis-embedded-data' module is present, connect to the embedded Derby database.
discard 7492edc Change needed for the support of a "non-free:sis-embedded-data" module with EPSG geodetic dataset as an embedded Derby database (SIS-337).
discard 6391dd9 Remove obsolete comment since we do not support JDK6 anymore.
discard 5a73d95 Upgrade dependencies.
discard 666e6fc Fix a NullPointerException when a netCDF variable has no attribute.
discard 096fc43 Partial rollback of GO_GenericName and GO_LocalName displacement (for now). This is because we would like to propose a 0.8 release soon, and trying to move the XML support from 'sis-utility' to 'sis-metadata' now seems a bit risky. It would also make more difficult to merge the work on ISO 19115-1:2014 update. So we are better to release O.8 as-is, complete the ISO 19115 update, and after try again the migration of some sis-utility classes to sis-metadata.
discard 26a1350 Avoid invoking user-overrideable DefaultFeatureType.getProperties(boolean) during construction.
discard 5053b7b Javadoc and method ordering.
discard 46a5ae4 Move JAXB adapters for GenericName in a separated package. This is a step toward moving most of XML support in sis-metadata module.
discard 955cd0a Move some code out of sis-utility module. The intend is to have a smaller JAR file for those who want only units of measurement support. In this commit the size change is very small, but we reduce XML dependency in order to move XML support to sis-metadata in a future commit.
discard d5b130c Update mailing list URL and minor typo.
discard 5458e0c Minor grammatical correction: "software" has no plural form.
discard 80d14e5 Minor code cleaning submitted by Michael Hausegger on https://github.com/apache/sis/pull/3
discard bef2039 Add tests submitted by Michael Hausegger on https://github.com/apache/sis/pull/2 Tests have been refactored. As a side-effect, we did minor adjustments in Envelope.getMinimum/getMaximum() and FeatureTypeBuilder.setSuperTypes(…).
discard 62e49dc First draft of a capability to rewind a DataStore for text file, in order to read the file more than once.
discard 6b1a378 Fix name spelling error: Synder -> Snyder.
discard ca25a54 Update FolderStore in order to take in account symbolic links, warn about possible cyclic links, propagate encoding information (locale, timezone, charset), handle the location as Path instead of URI, more extended exception handling. We omit the sort for now since it forces loading all resources before we can sort (something that we may want to avoid in the future), and we omit declaration in META-INF since it would handle any folder, even if more specialized DataStore exists.
discard 711e27c Support enumeration in netCDF file. As a side effect, set default attribute encoding to UTF-8.
discard ce42d70 Allow foreigner code to find Apache SIS CRSAuthorityFactory without any implementation-dependent code.
discard 566abbd Fix wrong parameters in Proj.4 definition string construction.
discard 2b6c23e Fix attribute characteristic formatting (was missing the actual values).
discard 34522ff Naming convention: "netCDF" is lower-case "n", except at the beginning of sentence.
discard 0b5cfc9 Avoid the reflection hack in AbstractResource. Make netCDF FeatureSet accessible from public API.
discard acabe57 Update NetBeans project configuration for JavaFX resources.
discard 50887ba Set SVN properties.
discard 7b13b21 JavaFx : new CRSChooser widget
discard 7aca832 Allows to configure the library to use for geometric objects.
discard cbc1752 Set the author name of JavaFX module to the effective developer (list to be completed when other contributions will be merged) and set SVN properties.
discard 09b7ebe JavaFX : new ResourceTree widget
discard fd20d19 Try harder to add a title or an identifier to metadata indentification information, using the filename (without extension) if we have nothing else.
discard 635582e Storage : new FolderStore capable of aggregating multiple smaller file stores
discard fa9aeef Add a test directory for JavaFX module.
discard 862a64f Add JavaFX in NetBeans project configuration.
discard 1d79bf7 Refactor the new getOpenParameters() in a URIDataStore common class.
discard 009691d Bring back an empty JavaFX module on JDK8.
discard e4b78d8 Javadoc and minor refactoring in Store.getEnvelope() and getOpenParameters() method.
discard d33f59b Give some more control on the way to merge metadata elements in a collection.
discard 24898c3 DataStore : review DataStore API, add Resource creation methods on Aggregate
discard 1e98d88 More detailled StorateConnector.toString(), for debugging purpose.
discard fec62e2 Fix SVN properties for new file.
discard f8bcb80 FeatureSet : add missing boolean return value on removeIf method
discard d398ab8 FeatureSet : fix removeIf and replaceIf methods to match java List interface
discard 1c6fb78 FeatureSet : add writing operations add, removeIf and replaceIf
discard cb255d3 Partial commit review and javadoc completion.
discard 38191c6 Downgrade maven-javadoc-plugin from 3.0.0-M1 to 2.10.4 because of a regression in "mvn javadoc:aggregate": the javadoc plugin seems to ignore <repository> declared in sub-modules (in our case, in sis-netcdf).
discard 3a72c03 Javadoc update and adjustment in DataStoreProvider.open(ParameterValueGroup), including addition of a specalized exception.
discard a1ecd33 Complete and test StorageConnector capability to recreate java.io.Reader as needed.
discard ee626b8 Change the internal working of StorageConnector in a way that track better the relationships between wrappers (e.g. InputStreamReader as a wrapper around InputStream).
discard 97f6512 If 'unmerged' do not throw an exception, assumes that is solved the metadata merge conflict.
discard 2582caf Better tracking of inputs that need to have their position synchronized in StorageConnector.
discard 9f443cc Replace the sequence of "if (type == some.class)" by lambda expressions. This make the code a little bit more systematic (more uniform flow of operations).
discard 946718e Add method on DataStore to return it's provider
discard 8956d42 Add data store provider opening parameters description
discard a458297 Make InputStreamAdapter more compliant to InputStream contract.
discard 07dc3ca Take Unicode supplementary characters in account when reading from java.io.Reader.
discard 0a40a23 Minor javadoc formatting.
discard 4d88613 Upgrade Maven javadoc plugin to a version compatible with Java 9.
discard 6d60fbe Minor performance improvement by avoiding a call to Math.asin(double).
discard ae03afd Update Proj4 JNI bindings for Linux
discard 9f7bbf5 Add comment about future possible development: take locale in account. https://issues.apache.org/jira/browse/SIS-365
discard 3c3e3db Trim leading space in definition string.
discard f7a87a8 Better error message if PJ construction failed for a given definition string.
discard 94f952d More efficient copy if the record is already a DefaultRecord instance.
discard 839beea Enable the user of trigonometric identities for performance.
discard 1aca369 If a CoordinateOperation has not explicit domain of validity, use the intersection of CRS domain of validity.
discard d974f2e Fix a bug that prevented CoordinateOperationRegistry registry to find an operation in the EPSG geodetic dataset when EPSG defines two versions of the same CRS with different axis order.
discard a2d4a41 Add RADIANS_PER_SECOND unit and the corresponding AngularVelocity quantity. Add also a Salinity quantity.
discard cef8ae1 Remove some optimization in map projections for which benchmarking has show that it made no measurable difference.
discard 627171d Add a special case for (inverse projection) → (affine) → (projection) transforms. This allows ConcatenatedTransform to optimize such sequence. Also provide a few optimized loops for some common cases.
discard f5f9408 Merge the part of Cullen Rombach's work that consist in adding new Namespaces constants.
discard 9511fa7 Merge from JDK8 branch.
discard 1fc13dc Replace the XML "xsd" prefix by "xs" at least in documentation. This is a side effect of Cullen Rombach's work on ISO 19115-3 upgrade.
discard aa58c15 Add a test for the improvement in Locales class.
discard d4b2b3d Port a small part of Cullen Rombach's work on ISO 19115-3 upgrade. The main port will happen in the ISO-19115-3 branch, we we port here a small part which is only indirectly related to the upgrade and do not have immediate impact on XML namespaces.
discard 5a8f4a0 Fix a test failure.
discard 4b09ce1 Create a branch for merging work from Alexander Montgomery and Cullen Rombach on ISO 19115-3 update (XML for metadata).
discard f037747 Upgrade to EPSG geodetic dataset version 9.1.
discard 11f952b Fix construction of geocentric CRS.
discard d694135 Post branch-merge cleaning. In particular, PixelIterator.create static methods are remplaced by a Builder for making easier to handle the SequenceType case, which can not yet be on trunk.
discard c84ab15 Format "+towgs84" parameter in Proj.4 string.
discard 60db031 Add tests for WritablePixelIterator.
discard 549273c Keep getFeatureType(String) public for now.
discard 63e8149 Remove FeatureStore, replaced by FeatureSet.
discard cda6ec4 Prepare refactoring of FeatureStore as FeatureSet. This commit adds AbstractResource and AbstractFeatureSet classes (not in public API for now) and edits some documentation.
discard b613c7f Replace the findResource(String) implementation based on stream by a implementation based on classical loops. The intend is to make the merge with JDK7 branch easier, and to avoid the hack needed for checked exceptions.
discard 36718ab Complete javadoc for the Resource subtypes.
discard f8f0940 Minor code adjustement and add documentation.
discard bc54da6 Deprecated FeatureTypeList since it is not anymore part of ISO 19115 in 2014 revision.
discard 028b5d5 Add factory methods for WritablePixelIterator.
discard cebc9ed Put WritablePixelIterator in public API.
discard bc3a2c2 Remove PixelIteratorFactory for now. We will bring them back from Geotk after we ported the optimized PixelIterator subclasses.
discard 44efa72 Avoid flooding the logs with messages for the same unsupported NaN value.
discard 148c662 Add a javadoc group for coverages and rasters.
discard eb4d620 Use java.nio.Buffer for representing the window content. It allow us to use read-only buffer (thus avoiding the need for a warning in javadoc) and make easier to support the 3 transfer types.
discard bf95436 Optimization for the common case where the requested region if fully contained inside the current tile.
discard 2ebadd8 First implementation of PixelIterator.window().
discard bc12312 Make FeatureFormat robust to signaling NaN.
discard 8e59a92 Add various 'minTileX' and 'minTileY' values in tests.
discard 31c095f Enable all remaining tests on PixelIterator.
discard ec71c8e Javadoc fixes.
discard 7cecd27 Enable more tests.
discard e994292 Enable tests on a single tile of RenderedImages.
discard 9efc035 Enable PixelIterator tests on Raster (not yet on RenderedImage).
discard 66b7f9e Set SVN properties.
discard b25d424 Store : add Resource,DataSet API
discard d8521d1 Continue PixelIterator cleaning.
discard eecdc82 Continue partial review of PixelIterator.
discard 8357168 Review of TiledImage, and begining review of PixelIterator.
discard 443f988 Add a minimal package-info documentation.
discard e4c1376 Move PixelIterator in an "image" package instead than "iterator". An "iterator" name is too generic since most iterators (outside this package) are not specifically for images.
discard 355f9fa Test consolidations. The tests are not yet enabled.
discard 147f830 Fix a documentation.
discard 2279720 Update NetBeans project.
discard 761905e Fix SVN properties on new files.
discard 05175d5 (sis-raster): add first work of PixelIterator
discard 71e4959 Add documentation and another check for skipping tests on platform without Proj.4.
discard 9951d1e Skip TransformTest on platforms where GDAL or Proj4 is not installed.
discard 7722500 Documentation fixes. In particular, document that Apache SIS requires Java 7 (was Java 6).
discard a50d07e Fix NameToIdentifier.isHeuristicMatchForIdentifier, search result for names wihout separators were always false.
discard d0bbcab Update Maven plugin dependencies.
discard b8c06fe Remove JavaFX module from JDK8 branch. We will develop this module only on the JDK9 branch for now, because it is easier to setup JavaFX dependencies with Jigsaw modules.
discard f59832e Store merge information in order to ignore the change in other branch that do not apply to JDK8 branch.
discard d3561af Allow the project to compile as automatic modules.
discard 443443b Automatic update of NetBeans project configuration.
discard 1c6d851 Fix erroneous filename for temporary file.
discard 67231b7 Refactor the feature iterator outside the data store.
discard 56b2768 Add JNI bindings for Linux.
discard 06fda40 Fix the Coordinate Reference System name by creating it from the datum name (if available) and the projection code.
discard f301b8e Use only public API for avoiding compatibility problems.
discard 48c0129 Add binary for MacOS.
discard db1d594 Add integration test and documentation about use of CRS in "Proj4::" namespace.
discard 7c6f2b1 Provide a plugin mechanism (SpecializedOperationFactory - may be renamed later) for enabling the use Proj.4 when we detect a pair of CRS that are wrappers around Proj.4. Specifies axis units of measurement when creating a Proj.4 definition string from a CRS. Improve documentation.
discard 4371cf9 Add concatenation support for Proj.4 transform.
discard c7b73d4 Make PJ wrapper serializable (by serializing the Proj.4 definition string). Partial implementation of MathTransformFactory and CoordinateOperationFactory. More tests, and consequently fix an erroneous Proj.4 parameter name in LambertConformal2SP.
discard 023b32e Make the check for native PJ structure optional, as documented in javadoc.
discard a91a233 Fix erroneous conversion factor between m/s and km/h units.
discard 589d4f6 Returns the definition provided by Proj.4 itself if available.
discard 5cf9ea6 Add test case for pj_transform.
discard 693f6dc Defines OperationMethod and parameters for ProjectedCRS.
discard b22eb0a Remove the pseudo-EPSG factory backed by Proj.4. We do not need this factory since Apache SIS can connect to a real EPSG database. Instead, make clear that this is a Proj.4 factory with their own definitions.
discard 1576dd7 Remove the CRS and CoordinateOperation wrapper around Proj.4 library. Instead, provide only a MathTransform wrapper. The CRS and CoordinateOperation parts are better served by the Apache SIS implementation. This allow us to simplify a little bit the "sis-gdal" module.
discard 28ec223 Fix CoordinateOperationNotFoundException thrown for some pairs of CRS when the EPSG geodetic dataset is not available (SIS-364).
discard a1690ff Add test for EPSGFactory.
discard 5a27ccb Use the compression provided by Vector instead of duplication the code here.
discard b460bf5 Renamed CRSFactory as ReferencingFactory, in anticipation for creating other objects like datum too.
discard e5a612c Merge PJDatum into PJ class.
discard c67c0e1 Enable PJTest on platforms having a Proj4 library installed.
discard f48dbf1 Better handling of Linux and MacOS platforms for native binding.
discard c8d8ce2 More informative formatting of NaN values in features.
discard e6052b8 Paranoiac safety against empty or null collection of dependencies.
discard 31af216 Add a convenience method for fetching the default CRS from a PropertyType instead than from a Property.
discard 4286158 Identifies some platform-specific issues in the Makefile.
discard 4215683 Avoid the use of dlopen for use of libproj.so native file (change by Jean-Loup Amiot). Log a warning if a .so file is not found.
discard 4a03256 Initial draft of a JNI bindings for Proj.4. The bindings were initially developped in GeoAPI, and updated by Jean-Loup Amiot. The Java classes are adapted from geoapi-proj4 module (was in public domain, adaptation done by original author).
discard 990a089 More efficient compression of vectors when requested.
discard 2b78dcd Do not store anymore the GeoTIFF localization grid as Ground Control Point (GCP) since they are not GCP. More robust calculation of minimal and maximal values.
discard 72d2b4d Trivial javadoc fix.
discard ace5482 Remove unnecessary serialVersionUDI.
discard 760a162 Store the GeoTIFF check points in metadata (under some conditions, we need to avoid that if too numerous). Avoid a warning if the GeoTIFF file said that it does not define the prime meridian but nevertheless contains a tag for the prime meridian longitude.
discard ab5db55 Add 'getAttributeNames()' method on NetCDF decoder.
discard b7a0100 Optimisation for linear case was missing the pre-concatenation with 'sourceToGrid' transform.
discard 00a7737 Complete the calculation of "grid to CRS" translation terms from the model tie point. Use a tolerance factor when determining if the "grid to CRS" transform is linear. Declare in the metadata whether model tie points are present.
discard a4597f8 Store GeolocationInformation metadata built from the ModelTiePoints found in GeoTIFF file.
discard 35e044d Preserve in FactoryException the message explaining why the parsing failed.
discard a31fd12 Fix javadoc bug into Geotiff IFD
discard 28e85bc Add Model Tie Point Geotiff Tag.
discard 878d8c5 Partial support of moving features in NetCDF.
discard 45b5d50 First draft of a Moving Feature CSV reader that build a Polyline from data splitted on many lines.
discard 8677f7f Prepare for the concatenation of some CSV lines in single Moving Feature instances. The concatenation is not yet enabled, but this commit provides the basis for it.
discard ce5407e When parsing a Moving Feature CSV file, build trajectories as geometric objects (Polyline) instead than a double[] array.
discard a90b5b6 Minor javadoc updates and adujustment in GPX geometry type.
discard 9eb3b3a Add a FeatureTypeBuilder.addAttribute(GeometryType) method. This required a revisit of FeatureTypeBuilder constructor, by moving the 'template' argument in a separated method.
discard a1de775 Add an option for selecting the geometry implementation.
discard e62b38f Fix javadoc typo.
discard 2db9fb1 Avoid direct dependencies to ESRI Geometry API. Leave the choice to user between ESRI, JTS and Java2D.
discard 04aafd9 Define constants for conversions between seconds, milliseconds and nanoseconds (for clarity), and other minor editions.
discard 47721a0 Post-merge cleanup.
discard 35e0f06 Documentation clarification about Proleptic Gregorian calendar versus Proleptic Julian calendar.
discard 9209cfc Fix a DateTimeException when formatting the epoch of Julian days.
discard 2105535 Allow to override Feature attribute by an operation, and conversely.
discard be6f78f Allow two GenericName instances to be considered equal even if one of them contains String and the other InternationalString parts.
discard d50777c Allow NetCDF GridGeometry to query the values of a localisation grid when constructing metadata about axes. Various documentation improvements.
discard 9c7f34a When compressing a vector as a SequenceVector, preserve the element type.
discard 9eeca082 Fix TransformSeparator applied to PassThroughTransform
discard 08a7742 Add missing javadoc links, remove @see tags to internal API, formatting.
discard f10fc88 Mostly documentation clarification for remembering the relationship between "source" and "target" dimensions versus NetCDF "domain" and "range".
discard 1dc348b Use MetadataBuilder for "spatial representation info" ISO 19115 node created from NetCDF files.
discard f80d848 Use MetadataBuilder helper class in NetCDF ImageReader for building the CoverageDescription node. This simplify a bit the MetadataReader class.
discard c225144 Base NetCDF MetadataReader on internal MetadataBuilder. This simplify the construction of IdentificationInfo properties.
discard a961979 CSS tuning for the tree tables added in previous commit.
discard 2024134 For each metadata type, provide an overview of mandatory or conditional properties.
discard a1b5d1f Update link to UnidataDD2MI.xsl.
discard 629522c Javadoc completion.
discard 16d239e Do not insert hyphens in javadoc comments that are at the beginning of table cell. An example of table where such hyphen where undesired is org.apache.metadata.sql.MetadataWriter.
discard e5cf805 Fix formatting of Feature associations and improve formatting of cardinalities.
discard 2920a76 Comma-separated list in NetCDF attribute needs to take in account quoted text (for escaping comma).
discard d28868b URL to the authoritative definition of ACDD attributes changed.
discard 6712dac Fix a type in a NetCDF attribute name, and prepare for more development.
discard 6a120ab Allow parsing of unit symbol containing exponentiation operator, as in "m*s^1". UnitFormat already supported implicit exponentiation as in "m*s-1", but some formats add an explicit ^ or ** operator.
discard b17b578 More extensive support of NetCDF units ("degrees_N", "degree_N", etc).
discard f0a11a5 Update the "Operation Methods" page generation code with better explanation text.
discard 8e87fdb Update Maven dependencies.
discard cc4d346 LinkOperation should check if the referenced property is itself another LinkOperation.
discard ef10c7f All CodeList are ControlledVocabulary, but not all Enum are ControlledVocabulary.
discard a9967f7 Do not create foreigner key constraint when the CodeList or Enum type is abstract. This case never happen on Apache SIS branches, but happen on trunk because CI_TelephoneTypeCode was not present in GeoAPI 3.0.
discard c37b1df Support enumerations in the same way than code lists (both are controlled vocabularies).
discard ac48f5d Comment-out (for now) the properties that start a Derby server.
discard 0c8361d When a GeoAPI interface is not defined for an ISO type, fallback on the Apache SIS implementation class. It does not make a difference for Apache SIS branches using GeoAPI 4.0-SNAPSHOT, but it makes a difference for Apache SIS trunk using GeoAPI 3.0 releases.
discard 36c16a1 Provide instruction about how to inspect the content of in-memory Derby database during debugging session.
discard a4c75cc When user asks for a property value on a metadata implementation backed by a database (org.apache.sis.metadata.sql package), we should take in account the cases where the property value is not stored, but rather computed from other property values. Such cases happen with ISO 19115:2003 properties which have been deprecated and replaced by new properties in ISO 19115:2014. Supporting on-the-fly computations in ...metadata.sql package requires that we keep trace of depende [...]
discard cfad1fe Clarify the error message and stack trace in case of invalid property.
discard c1a8fde Fix an IllegalArgumentException when a property is defined in the implementation class but not in the interface. This happen on Apache SIS trunk during the transition from ISO 19115:2003 to ISO 19115:2014.
discard acae344 Invoke floatValue(…) instead than doubleValue(…) followed by a cast.
discard 77ec458 Add a Vector.doubleValues() method for inter-operability with APIs working with arrays.
discard 4398818 First draft of a caching mechanism in the metadata objects created from database. Actually the main intend is not that much to do caching, but rather to leverage the code that compute property value from some other property values (this computation part will be completed in a next commit). The main use case is supporting the transition from ISO 19115:2003 to ISO 19115:2014.
discard 22e94f4 Handle empty collections of various types in a new CollectionsExt method instead than inline other methods.
discard c65a1f2 Should preserve the previous state of Semaphores.METADATA_ONLY flag.
discard 5cfc581 Allow to specify the database catalog.
discard 56b3fe3 Update for change on trunk (for making merges easier).
discard 2a422c8 Fix a bug that prevented the cache from being used.
discard 571c5fa Compute the column name at reading time in a way more consistent with the way it is computed at writing time.
discard 1f657af Give protected access to AbstractFeature.get|setOperationValue(…) for easier usage by subclasses defined outside Apache SIS.
discard 5164f74 Update the code generating the CoordinateReferenceSystems.html page after upgrade to EPSG database 9.0.
discard 4b3c745 Prepare for updating EPSG database from version 8.9 to 9.0: the "epoch realization" column in the Datum table is no longer a year only, but now a year-month-day date.
discard 404e7b0 Upgrade NetCDF dependency.
discard dab3d83 Add links to related ISO 19115 attributes.
discard d5a7d26 Fix documentation error: Metadata.constraint is about metadata constraints, not data constraints.
discard 45488a7 Code provenance (GeoAPI, OGC or SIS) specified in the <code> element instead than in the <pre> element.
discard 92f2e93 Command-line should display a compact view of metadata.
discard 5c3607b Update the developer guide assembler for the reorganisation of guide source files.
discard 43bf7ec Update HSQLDB test dependency.
discard 712e3d4 Lookups for responsibly parties (or any other metadata type having subtypes) must search in the right "child" table.
discard ecac672 Initial port of MetadataWriter, not yet fully enabled.
discard a2463c8 More accurate warning message when the difference between two CRS is in the prime meridian.
discard 13b0a16 Initial port of IdentifierGenerator.
discard d5a8fac Fix an exception that occurs on attempt to redimension a "Geographic 3D to 2D conversion" operation method.
discard 591356d Fix errors when creating a geographic 3D CRS defined in the EPSG database as a CRS derived from three-dimensional geocentric CRS using the "Geographic/geocentric conversions" operation method.
discard 4bd71c3 Javadoc style update.
discard 8537f45 Avoid constructing the list of children nodes if not needed.
discard 9c43fcb Add a checkstyle rule against trailing spaces.
discard 35bd82f The use of compact mode in metadata tree table view should be optional.
discard fdb7cc7 More simplification of metadata tree.
discard 920a4f3 Missing annotation in previous commit.
discard 535d0ef First draft of tree view simplification. https://issues.apache.org/jira/browse/SIS-298
discard 39e2b04 Better node name when a property have the same name than its type and various subtypes are possible. https://issues.apache.org/jira/browse/SIS-298
discard 501fe7b Make Envelope2D consistent with the policy now applied in AbstractEnvelope as a result of https://issues.apache.org/jira/browse/SIS-172 resolution.
discard c796cda Remove the warning in the documentation. Instead, document 'intersects(Envelope, boolean)' in terms of "intersects" and "touches" operation. https://issues.apache.org/jira/browse/SIS-172
discard a547ddd Rename CRS.suggestTargetCRS as CRS.suggestCommonTarget.
discard 5de43fb Add test.
discard b528042 Addition of a CRS.fromAuthority(...) method. Since that new method is likely to need to log warnings, this commit contains consolidation (especially in documentation) of the way some warnings are handled.
discard 4c159cf CRS.fromWKT(String) and CRS.fromXML(String) should compare the parsed definition with the authoritative definition (if an authority code is available) and log a warning if a conflict is found.
discard 05a6363 Adjustement for the previous fix about handling of SI prefixes in "kg" and "l" special cases.
discard 67c1642 Whether the unit symbol can have a prefix (UnitRegistry.PREFIXABLE) needs to be specified independently of whether the unit is an SystemUnit instance of SI (UnitRegistry.SI). The reason is that not all SI SystemUnit instances can be prefixed: the main exception is "kg" where the unit to prefix is rather the ConventionalUnit instance "g". An other exception is the ConventionalUnit instance "L" (litre), which is not a SI unit but for which usage of SI prefixes is allowed.
discard d1d33b2 Avoid loading unneeded datum shift grid files (SIS-327).
discard 1d6414c Fix test failures that occur during integration tests (when we put all JAR togethers in one big project).
discard 6f6a7e9 Minor simplification of the stack trace in case of failure to connect to the database.
discard 8b6d182 Parsing of GeoTIFF files should be tolerance to duplicated map projection parameters.
discard 5545bb6 When parsing GeoTIFF keys for building a CRS, we need a mapping from projection parameter numerical codes (e.g. 3080) to parameter name (e.g. "NatOriginLong"). As a side effect of this work, review the behavior of Parameters.parameterIfExit(String) method regarding ambiguous names.
discard cfd72b2 Format feature property designations, with possibility to skip this information is not desired.
discard 352bf9c Add resources for GPX feature types.
discard acd0883 Javadoc.
discard e088c1d Bug fix when the EPSG tables are both defined in an "epsg" schema and with the "epsg_" prefix in table names.
discard ebd406f Replace FeatureTypeBuilder.setDefaultScope(String) by setNameSpace(CharSequence). This allows less verbose GPX FeatureType.
discard 1f812b0 Merge the doclet and taglet packages in a single one.
discard 7e43466 Resolve or suppress some warnings.
discard e1ec130 Update for API change in jdk.javadoc module. Also remove module-info.java since Maven dependencies are not yet modularized.
discard 57209d1 Merge from JDK8 branch.
discard 470a6cc Bug fix: when adding "A" and "myNameSpace:A" properties, then asking for "A", FeatureNaming should find the former.
discard de30c37 Update Maven surefire plugin.
discard 4128f41 Replace the "@" prefix by "sis:" in SIS conventional property names.
discard 4c3b808 Merge from JDK8 branch.
discard fca14c4 Trivial documentation a formatting adjustments.
discard 9812ddc Fix a test failure when the path to test resource contains space.
discard 0bc6ac5 Move the Units.quantity(double, Unit) method in Quantities.create(double, Unit).
discard 9b6b1bd Upgrade Maven plugins. The compiler plugin contains fixes for building with JDK9.
discard c0bc78d Do not serialize Unit EPSG codes. They will be resolved at deserialization time.
discard c60795c Add a Units.quantity(double, Unit) method and provide a fallback implementation for UnitServices.getQuantityFactory(Class).
discard dab2b79 JSR-363: add Quantity<?> support.
discard 2af1dfd Use cases on "Geographic2D with Height Offsets" show that this operation method needs to allow the 'redimension(…)' method.
discard c2179cb Implement Geographic2D with Height Offsets (EPSG:9618). https://issues.apache.org/jira/browse/SIS-284
discard f1b1db1 Implement operation methods for axis order reversal (EPSG:9843 and 9844).
discard f4afefe Trivial javadoc.
discard b4b2dfa Complete FrequencySortedSet implementation.
discard 8b95f63 Merge the javadoc cleanup from JDK8 branch.
discard 49ea94a Skip the JDK9 -> JDK8 merge.
discard 2be1fce More fixes of {@link} and @see javadoc errors.
discard e71fb0b More fixes in {@link} and @see javadoc annotations.
discard 3f666c7 Documentation: fix a broken link to LANDSAT book and clarify ObjectConverter javadoc.
discard 9579f1e Fix javadoc errors in {@link} and @see tags.
discard 2adfbcc Port a collection to be needed later for implementation of coverage module.
discard 358e7a2 ObjectConverters should check the interfaces implemented by the source class if no converter is defined explicitely for that class.
discard c8ff2d8 Store merge information.
discard a2432f0 Merge the Checkstyle rules enforcement from JDK8 branch.
discard c6545ce Skip the SVN info about merge to the JDK8 branch.
discard d5e5484 Complete the selection of Checkstyle rules (except javadoc rules, which can not be activated for now).
discard 6a03a0f More javadoc annotation ordered according Sun convention. The code should pass checkstyle verification if it wasn't for the conflict with {@preformat} custom tag.
discard ba83167 Javadoc formatting: move @see tags to the standard order (between @version and @since). The intend is to enable Checkstyle later with commonly-accepted conventions.
discard 30bd708 Fix spelling error (throws -> thrown).
discard 9f8bba2 Order @version and @since javadoc tag in the standard order. We do not enable the "AtclauseOrder" checkstyle rule now because of a conflict with the {@preformat} custom taglet.
discard bf42d42 Enforce Checkstyle rules on modifier order, redundant modifiers, outer class name and occurrence, unicode characters, Java-style arrays.
discard fdb0881 Enforce more checkstyle rules regarding whitespaces.
discard 8d33b64 Merge info from the JDK9 branch (for skipping JDK9-specific changes).
discard 25c24c7 First attempt to define a module-info file (incomplete).
discard 737b6c5 Set the compiler version to 9 on the JDK9 branch.
discard 082ab64 Set the version number to "0.8-jdk9-SNAPSHOT" on the JDK9 branch.
discard f8fe580 Update NetBeans project configuration for JDK9.
discard f5b4237 Merge from the JDK8 branch.
discard 6d002fb Update dependencies used during the build only.
discard d118a19 Add the the NetBeans project some dependencies needed for execution of NetCDF tests on OpenDAP.
discard a04888b Set the NetBeans project dependencies to the same version than the Maven ones.
discard ef3ac3d Upgrade some dependencies.
discard ba22580 Fix the calculation done by LocalizationGridBuilder when computing the residuals to give to InterpolatedTransform constructor.
discard c2d0258 Initial draft of LocalizationGridBuilder, using DatumShiftGrid is the backing mechanism for applying residuals.
discard cdc1084 Add tests about setting the target coordinates of LinearTransformBuilder when the source coordinates are on a grid.
discard 4097167 LinearTransformBuilder should be able to take advantage of the knownledge that source positions are distributed on a grid (when this is the case).
discard dfb6daf Less aggressive warnings about the fact that those java.text.Format subclasses do not support parsing.
discard 0a0a337 When converting SIS_DATA to a database name on Windows, name separator ("\") needs to be replaced by '/'.
discard 392e104 More tests for geohash, taking in account coordinate transformations.
discard de80266 Refactor GeohashCoder as a ReferenceSystemUsingGeographicIdentifiers and move it to the org.apache.sis.referencing.gazetteer package.
discard 690ea54 Post-merge cleanup.
discard 8ce164d Bug fix when determining if we are allowed to take a shortcut while iterating over the cells in polar projection case.
discard bab4ad9 Fix the polar cases of MGRS iterators and add tests.
discard c43672d Support iterations on MGRS codes in an envelope spanning the anti-meridian.
discard ce20de8 Add tests and bug fixes.
discard fa5fc0b Handle the case of MGRS cells splitted in two latitude bands.
discard edf8b25 First bug fix in encode(areaOfInterest): return also the cells that are on the left side of UTM zones.
discard 4bdcfa7 First draft of an iterator over MGRS codes in a given envelope. The set of codes returned by this first draft is not yet complete.
discard b3ffd0e Fix erroneous default value for scale difference (dS) in Bursa-Wolf parameters.
discard 0868715 Add a 'Coder.setClipToValidArea(boolean)' method.
discard 36968b0 Post-merge cleanup.
discard 5805d13 Fix LocationFormat parent class and improve documentation.
discard d3b7168 Improve documentation.
discard 1769b4d Enable clipping of MGRS cell in domain of validity of their UTM zone.
discard c8129f9 Change the order of property shown by LocationFormat for making easier to see the representative position in the context of location bounding box.
discard 6827ab4 If a property is unspecified, inherit from the enclosing reference system if possible.
discard 85b8042 Fix west/east confusion.
discard 3b195a5 Complete (for now) LocationFormat.
discard 62f639f Fix the property order when the metadata implementation is a custom class.
discard 366b9e6 First version of LocationFormat.
discard 18a6625 Replace IndexResourceBundle.getLabel(short) by appendLabel(short, Appendable) for avoiding String concatenations. Instead, we write directly in the Appendable.
discard b8eeff5 Fix a NullPointerException when creating the metadata schema on a PostgreSQL database.
discard f7d9b08 MGRS decode(CharSequence) now return a Location object instead of DirectPosition.
discard 24a1c52 MGRS decode returns cell center instead than lower-left corner.
discard f4a7fa1 Begin the transformation of "Encoder" inner class as a Location implementation.
discard 0a5ebf1 Add AbstractLocation class.
discard c0b378e Move the check for special cases into a Zoner.isSpecialCase(…) method.
discard ef4a835 Verify that the latitude band is inside expected range.
discard 3d14761 Replace ~(rowBit - 1) by -rowBit
discard 45b2f87 Minor update in comments.
discard 83fe643 Fix an error in the figure (misplaced marks).
discard 52dd0ef Replace loop by bitwise operation.
discard e590595 Modify the approach for decoding MGRS reference, using a table of precomputed northing values and set of valid 100 km squares.
discard a67931c Verify MGRS metadata.
discard 218f7ca Make the UTM zone verification a little bit less permissive by checking that the error is on the side of the zone change (not an error on the opposite side, where we should not have any ambiguity).
discard bf969ce Need a tolerance factor when checking validity of MGRS reference close to a line of change of zone.
discard eb1110a Workaround for default JAXB implementation not recognizing STAX result.
discard ae5bc98 Complete MetadataCopier for performing deep copy of metadata objects (SIS-355).
discard 7194e79 Begin implementation of a metadata "deep copy" operation.
discard 813a5df Initial declaration of MGRS as an ISO 19112 reference system.
discard 1f0bc0f Add a check against infinite recursivity.
discard 4e809bd Update NetBeans configuration for the resources change.
discard a649b67 Move the resource related to "referencing by identifiers" in their module.
discard 48bb73c Rename LocationTypeTemplate as ModifiableLocationType, implement toString(), equals(Object) and hashCode(), add tests and documentation.
discard 6ae5cf4 Rename DefaultLocationType and LocationTypeSnapshot, make ReferenceByIdentifiers non-abstract.
discard ed28abe Initial implementation of ISO 19112 LocationType.
discard 9ad93a7 Base class for ISO 19112 SI_SpatialReferenceSystemUsingGeographicIdentifiers.
discard d5d017a Move the "org.apache.sis.referencing.gazetteer" package in its own module: sis-referencing-by-identifiers. The rational is that there is a lot of different geographic identifier conventions, so this module may growth in the future, while it is not needed for most SIS operations.
discard 992bca4 Implement parsing of MGRS coordinates for polar cases.
discard dcee0f2 Remove the WGS84 and revert to the no-argument constructor instead, but we a Javadoc notice about the default datum choice.
discard 4512632 Implement MGRS encoding of polar coordinates.
discard 416b037 Fix an occasional 2000 km error in decode(CharSequence).
discard 4bd8e73 Add more verification about validity of parsed MGRS reference.
discard 94157ce Fix the correction which is applied when the coordinate is in the wrong latitude band.
discard c1cdf80 Partial parsing of the numerical part of MGRS. Still need adjustments.
discard f8f8a0c Refactor MGRSEncoder as an inner class of MilitaryGridReferenceSystem.
discard d2deefb Fix the calculation of northing value and improve error messages.
discard 0b881e9 Begin implementation of MGRS parser.
discard 2fff453 Add tests.
discard c4790c1 Initial implementation of a CommonCRS.universal(φ,λ) method in replacement of CommonCRS.UTM(φ,λ) for handling the UPS cases. https://issues.apache.org/jira/browse/SIS-353
discard cb51865 Fix a regression caused by the new unit framework, when equalsIgnoreMetadata(...) fails to detect that 2 units are equivalent even if not defined in exactly the same way.
discard 9ea4b5e Javadoc adjustments.
discard 1e572f1 Support Norway and Svalbard special cases at the source (in the UTM) methods rather than in MGRS only.
discard 4c9e018 Add a 'setSeparator(String)' method.
discard 639fdaf Fix the parameter values for Universal Polar Stereographic (UPS) projection.
discard 3445393 Complete support of MGRS label formatted from arbitrary CRS. It does not include yet the support of polar cases.
discard df465c4 Begin on-the-fly reprojection before MGRS label encoding (work in progress).
discard 92b03fa First working version of Military Grid Reference System encoding, UTM part only (not yet polar part).
discard e0dd26e Begin a skeleton of "referencing by geographic identifiers" package, using MGRS as a first system.
discard 2f6af9f Trivial import fix.
discard c420ec1 Complete TransverseMercator.Zoned test, and add Latitude and Longitude convenience constructors from a DirectPosition.
discard 29519a4 Move the TransverseMercator static methods working on UTM zone into a new enumeration: Zoner. Still internal API for now.
discard 188ceec Fix a dead-lock between ContextualParameters and WeakHashSet (SIS-349).
discard 8b3990b Implement Transverse Mercator Zoned Grid System (EPSG:9824) https://issues.apache.org/jira/browse/SIS-220
discard db22040 Change CompoundFormat.parse(CharSequence text, ParsePosition pos) javadoc for making it consistent with all implementation except TreeFormat, and update TreeFormat implementation for making it consistent with new specification. JIRA: SIS-348
discard b841e29 Update copyright year.
discard 658e376 CoordinateFormat should ignore spaces around the separator at parsing time.
discard 3e261c5 Implement CoordinateFormat.parse(...) method. This require a fix in the way UnitFormat and DefaultFormat detect the end of the string that they have to parse.
discard 3ff2561 Initial port of CoordinateFormat class.
discard 6d26c37 Allow formatted XML output when using XMLStreamWriter. This apply to GPX format.
discard 6d33daf Enable usage of GPX as an output format for the command-line. Take format version number in account.
discard 1a695bc XML.marshal(...) now convert implementation of GeoAPI interfaces that are not the default implementation. This allows us to marshall GPX metadata in ISO 19139 format.
discard 20ae2ec Merge from JDK8 branch.
discard eefa6e7 Javadoc formatting (last bunch).
discard 496a626 Javadoc formatting in storage modules (except shapefile). No significant code change in this commit.
discard 3a87eb5 URL to JSR-363 javadoc seems to have changed.
discard b5106e8 Formatting (mostly javadoc) and opportunistic minor javac warning fixes.
discard 102e5e7 Override clone() as a matter of principle even if this is only for casting the result. We do that only for public classes.
discard 33f96c1 Fix an AssertionError when StandardMetadata.isMetadata(Class<?>) is invoked with a primitive type.
discard 77e803a Fix a test failure when CRS.suggestTargetCRS(...) test is executed without connection to the EPSG database.
discard e951258 Formatting (mostly javadoc) and fix of a few minor warnings.
discard cd25107 Javadoc formatting.
discard 9e3c5ba Javadoc formatting and minor warning fixes. Contains also a fix for a hole in ISOMetadata.freeze().
discard 2d695fa Javadoc formatting and minor compiler warning fixes in metadata internal packages.
discard d298f06 Javadoc formatting and minor compiler warning fixes on sis-utility tests.
discard 6d18a05 Javadoc formatting and minor compiler warning fixes.
discard dcba969 More partially automatized javadoc formatting.
discard 07bfb7e More javadoc formatting (partially done by scripts before review).
discard 4134321 Javadoc formatting and minor warning fixes.
discard fd604b3 Add tests for CRS.suggestTargetCRS(…) together with a bug fix. This commit contains opportunistic javadoc formatting in classes that have been reviewed as a side-effect of this work.
discard 936f0c8 First draft of a CRS.suggestTargetCRS(CoordinateReferenceSystem... sourceCRS) method. As a side-effect of this work, contains SIS-347 fix (Extents.area(…) wrongly returned 0 when the box is 360° wide).
discard bfb57af Replace the check for DefaultTreeTable.Node special case by a mechanism less hidden.
discard e4c02a9 More accurate detection of cyclic graphs in TreeTableFormat by looking not only at the metadata instance, but also to in which property the metadata appears. The intend is to support classes that implement more than one metadata interfaces, like the Metadata class used internally by the GPX datastore. This work required that we clarify the 'equals(Object)' and 'hashCode()' method contract in TreeTable.Node interface. As a side effect, this commit contains javadoc reforma [...]
discard c1a0b4a MetadataStandard.asValueMap(…) / asTreeTable(…) should work even if the argument implements more than one metadata interface (SIS-346).
discard 0efe211 Add two missing files that were missing in the previous commit.
discard 2097807 Provide a mechanism for allowing DataStoreProvider to specify whether they support write operations. The mechanism provided in this commit (based on an annotation) will probably need to be revisited in a future version, so we keep it in internal package for now.
discard fce36ce Allow the command-line tools to list available data stores.
discard 7462c21 Post-merge consolidation, allow MimeTypeDetector to recognize XML root element in default namespace, and add GPX to the list of formats recognized by the command-line tools.
discard 3f1e990 Moved ….storage.internal.gpx package in ….storage.internal.storage.gpx for consistency with other storage internal packages.
discard 404ab2b Renamed the ….sis.internal.xml package as ….sis.internal.storage.xml.stream since it extends the ….sis.internal.storage.xml package with support for StAX stream API.
discard baabba3 Complete (for now) GPX format support by leverage the MIME type detection mechanism that was done for JAXB-based data store, registering the GPX provider and adding an entry for GPX in the metadata. In this commit was also simplified a little bit the loops on XMLStreamReader.next() or getEventType() by defining a 'next()' convenience method taking in account the post-unmarshal case.
discard f4c4abd Move the "...internal.storage" classes that are related to channels and input/output streams into the "...internal.storage.io" subpackage.
discard 7e9ed2c StAX data store can now switch between read and write modes.
discard ff9ce0a Prepare storage module for better support of write operations.
discard b42c3ae Tests multiple readings from the same XML data store.
discard 24b911f First draft of a mechanism for re-opening a new input stream if a DataStore needs to read the same data more than once.
discard 5db9839 Test the merge operation and merge the hard-coded FeatureCatalogDescription metadata in the GPX metadata.
discard a133feb First draft of a helper method for DataStore that work like a FeatureCatalog.
discard 40b965a Javadoc formatting.
discard a0d0a73 First draft of an utility class for merging metadata.
discard a11b296 Add a DataStore.getDisplayName() method in the parent class and remove the private 'name' field in the subclasses that managed their own display name. Add a FeatureStore.getFeatureType(String) method and move the GenericNameMap in public API for making easier the task of DataStore implementations. Renamed GenericNameMap as FeatureNaming and provide more localization support for IllegalNameException.
discard f4fc372 Javadoc formatting. There is no significant code change in this commit.
discard 924243f Regenerate all resources without using key "0". We reserve zero for meaning "no localized message".
discard 6c1fed8 Minor tuning of LocalizedParseException.
discard f7a7e92 Add a ParseException specialization for failure to parse Well Known Text (WKT) format.
discard 19b7b4e Replace the boolean argument in DataStoreException subclass by OpenOption[]. Inline some calls to Exception.initCause(...). This would be easier if more exceptions were using return type covariance.
discard 0e7c5f0 Partial consolidation of Exception.getMessage() versus getLocalizedMessage() policy. This commit contains opportunistic javadoc formatting in classes that have been reviewed as part of this policy consolidation.
discard 44ee748 Complete ISO 19115 to GPX metadata conversion. Improve error message if a FeatureType is not valid for the data store.
discard 56ad700 First draft of a mapping from ISO 19115 metadata to GPX.
discard 46e3198 Move location of GPXTestSuite for consistency with other modules.
discard ca8e376 Minor cleanup: class renaming and remove the use of XML.DEFAULT_NAMESPACE which does not work as expected.
discard 6e7eb6a Complete GPX writer tests, now including features.
discard 34751f9 Enable tests of GPX metadata writer.
discard b6ef59c Class renaming: GPX prefix is implicit with the package name.
discard 82169e1 Add a StreamWriterDelegate class as a complement of JDK's StreamReaderDelegate. Refactor FilteredStreamWriter to inherit StreamWriterDelegate, and add another subclass for STAX-based data store. Modify the way we marshal fragment in STAX: we need to set the Marshaller.JAXB_FRAGMENT property to Boolean.TRUE. Provide a way to omit the namespace declaration inserted by JAXB when this namespace is the default one.
discard 610c97d First draft of refactored GPX writer (not yet tested).
discard 6ad0ee0 Separate the JAXB context for GPX from the JAXB context for ISO 19115. This require that DataStore keep a reference to their provider. Prepare for GPX writer revision.
discard 72ae589 Complete the revision of GPXReader for most parts except having 2 or more stream opened concurrently.
discard 3d28e0d Partial StaxDataStore implementation, enough for having StaxStreamReader to delegate XMLStreamReader creation.
discard 6034a4a Add mark() and reset() methods in Trackable internal interface.
discard 33b3396 Add a 'Trackable' interface (internal API only for now) for querying the position of a source (typically an InputStream). It is like 'Seekable' but without the need to seek position.
discard 8afe3a7 Begin skeleton of FeatureStore, only as internal API for now (need more experiment before to move in public API).
discard b266bd3 Consolidation of GPXReader. Include better error messages with line and column numbers if available.
discard c476b83 Replaced sequence of "if ... else if" by switch statement. Replace Iterator pattern by Spliterator.
discard 5e8c42a Rename StaxStream as StaxStreamIO. Parse metadata outside the constructor for allowing 'close()' method invocation in case of error. More accurate date and time parsing, using LocalDate only if there is no timezone information.
discard 96e6ed0 Upgrade Maven dependencies.
discard ce86f4b Remove the profile for the "bootclasspath" since JDK9 "-release" option can replace it. Upgrade Maven plugin dependencies for allowing use of JDK9.
discard 370201d GPX reader take Locale, TimeZone, WarningListeners and namespace in account. Make other stores ready for the eventuality where DataStore constructor would take more information from the StorageConnector. Specify the expected type when unmarshalling a document part with JAXB.
discard a1f7215 Re-enable parsing of dates in metadata. Remove the parseMetadata110() method, which is replaced by JAXB usage.
discard bb1f89b Validate the GPX sample file and first draft of GPX 1.1 <metadata> parsing using JAXB. The <time> element is excluded for now (pending investigation of how to use java.time with JAXB).
discard 96b7d8c Javadoc formatting and add a @XmlTransient annotation on AbstractEnvelope (for subclassing by modules that use JAXB for parsing envelopes).
discard 386cb7b Add JAXB annotation for metadata, but do not use them yet. Add email type as defined by GPX specification. Replace <keywords> string by a list. Rename Constants as Attributes.
discard bcac8bd Cleanup StaxStreamWriter. Skeleton of StaxDataStore.
discard 5b7e138 Replace URI by OnlineResource. Replace GPXVersion by Version. Move tags in their own class.
discard b9cb983 Use FeatureTypeBuilder for creating the FeatureType constants. Rename GPXConstant as Constant since it is in the gpx package. Cleanup.
discard 0b5f1c4 Feature attribute should not be cloneable unless requested by the subclass. Move 'parameters' package-private method in an internal package so it can be shared by GPX.
discard 35b2457 Upgrade to the new doclet API. We have one unresolved issue, which is how to get the file where a tag is contained (was allowed in the old API, I didn't found the replacement yet).
discard 2032e9f NetBeans configuration for Jigsaw.
discard 6484d1d Add GeocentricCRS and VerticalCRS case in GeoTIFF reader.
discard 6c82b0e Add GeoTiffStoreProvider.
discard 6448a97 Override Format.clone(). No matter if we use it or not, it is required by the clone() contract since this method is made public by java.text.Format.
discard 7be4264 Merge information: skip configuration changes on JDK9 branch.
discard 4e642b2 Set NetBeans project to JDK9 platform.
discard bb9c951 Fix some javadoc and javac warnings.
discard 5ae108d Add tests about units of measurement parsing with parenthesis, e.g. "kg∕(m⋅s²)".
discard 9908487 Better detection about where the parsing of unit should end (i.e. remove the previous hack). Initial support of parenthesis.
discard 77bfca8 When reading a TIFF file, apply a safety check against circular references in the IFD chain.
discard f8de1fc Set version to jdk9-SNAPSHOT.
discard 975339a Create a JDK9 branch as proposed on the mailing list. https://lists.apache.org/thread.html/fc95cf9aa26630e760280de36fb8b2ddf0ac1fd33fb3a546aea68920@%3Cdev.sis.apache.org%3E
discard a338def Post-merge cleaning (reporting changes that appear to be needed during the merge operation).
discard 608a4f5 Cleaning: add 'throws ObjectStreamException' after 'readResolve()' method: even if it appears to not be necessary, the java.io.Serializable specification nevertheless seems to consider it as mandatory. Opportunistic javadoc formatting.
discard 08847cd Specifies which warnings to display in the editor when using the NetBeans project.
discard 42d9b3c Fix SVN properties.
discard f5cfec7 Renamed 'replaceIdentifiers' as 'reidentify'. According https://en.wiktionary.org/wiki/reidentify, that word exists.
discard 0872058 GeoTIFF CRSBuilder shall set map projection parameter values according the GeoKeys found in the file. This require the addition of GeoTIFF parameter identifiers (in addition of EPSG identifiers) in projection providers. Some cleaning of a few GeoTIFF metadata were applied as a side effect.
discard 7a795c0 CRSBuilder now parse the prime meridian, ellipsoid and datum names encoded in the geographic CRS name. The GeoTIFF specification does not mention that, but we see this practice in some GeoTIFF files.
discard e5956c4 Javadoc (no significant code change).
discard 60e188d Javadoc and CRSBuilder.toString() implementation.
discard a4315c6 Continue the review of GeoTIFF CRSBuilder up to the creation of ProjectedCRS.
discard b4fd43e Refactor the code that provide the EPSG code for a given Coordinate System and unit of measurement. That code has been moved into a new CoordinateSystems.getEpsgCode(Unit, AxisDirection...) method. This will allow us to use the same functionality in more places than only the GeoTIFF reader.
discard ae5092c Javadoc formatting and add assertions. No significant change in this commit.
discard d0cf60b Cleanup the creation of GeodeticDatum in GeoTIFF files.
discard 94ccf79 Extract some metadata from GeoKeys.
discard 0da3c5d Continue review of GeoTIFF CRS builder.
discard 845587b Fix NetBeans project configuration.
discard 36941a6 Partial refactoring of GeoTIFF CRSBuilder.
discard f39dcac Renaming (no significant code change yet).
discard 2cdee8b GeoTIFF keys are unsigned short values.
discard 9925068 Adjustment of Unicode character used in negative infinity formatting. Javadoc and comment formatting.
discard 76307fe Fix encoding in SVN properties.
discard 87a365e Add some more metadata. The value added there were hard-coded in the Java code, but we have not yet done the replacement of Java code by searches in the database.
discard d5bfe75 Enable the test of EPSG dataset on HSQLDB and add a test (to be run manually for now) on PostgreSQL.
discard 6b61bc5 More robust handling of "EPSG" schema name in SQL statements.
discard db5c48b Add a test case for MetadataSource.search(Object).
discard 99b4b44 Retrofit MetadataResult into MetadataSource (the previous separation was causing more difficulties than help). Remove that hard-code values from MetadataSource.lookup(); now perform the search in the database instead.
discard 9c1a43d Attribute.characteristics().get(String) should accept short names (i.e. allow the scope to be omitted when there is no ambiguity). This is the same mechanism than the one already used by FeatureType. Opportunistically generalize the search for shorter names.
discard da7e3bb Add support for deprecated properties in a FeatureType.
discard 4c37978 First draft of a SQL installation script for metadata about file formats. This draft required changes in ScriptRunner and all classes that used it in order to avoid duplicating code. More metadata will be added later.
discard c4403bf Remove the patch for the "NTF Paris (EPSG:4807) → NTF (EPSG:4275) → RGF93 (EPSG:4171)" transformation path. This patch was not compatible with Derby because of the use of boolean values. We could fix that, but instead we wait for release of the next version of EPSG geodetic dataset, which will include this path.
discard 3dd16d1 Complete the port of MetadataSource, pending a temporary hack in the lookup method to be removed after we moved format information into the database.
discard 91a13f7 Port helper methods to be needed for MetadataSource.lookup(...) implementation.
discard d8253a4 Ported MetadataSource.search(Object) implementation.
discard 602ac01 Continue implementation of org.apache.sis.metadata.sql.
discard 4d71cb9 Javadoc formatting.
discard 8ea425e Make AuthorityFactories more robust to race conditions.
discard 4bc2e53 Make the referencing module more robust to the case where the SIS_DATA environment variable is defined but the SQL scripts needed for creating the EPSG geodetic dataset are not there. If the SIS_DATA environment variable is not defined during test execution, set it to the 'target' directory, so a temporary database will be created there. This fix the test failure introduced by the previous commit in the earth-observation module.
discard 4f06038 Complete creation of CRS from Geotiff tags.
discard d2449df Review MetadataBuilder. This implied changes in ImageFileDirectory. This work will also require the org.apache.sis.metadata.sql package. For now we put hard-coded values, to be replaced later by database.
discard 05c319d Refactor CRSBuilder class and add retrieveCartesianCS method.
discard 23621f7 Complete (for now) the ImageFileDirectory review. The most important change is that all attributes related to strips have been removed. Instead, strips are considered as a special kind of tiles where the tile width is the image width. This approach allows us to remove code duplication.
discard ccd543d Metadata generated from a NetCDF file should include the transfer function (scale factor and offset).
discard 0fdcf29 GeoTiffStore does not need to check for null CRS. Add a comment explaining why.
discard eccf412 Add a comment explaining why we need that SQLUtilities.toBoolean(String) throws an exception if the given value is not recognized. Remove an obsolete comment.
discard c253620 Continue CRS creation from tiff tag : add Geographic CRS behavior and some documentation.Work in progress.
discard a33bdce Set default character encoding to US-ASCII as specified in GeoTIFF specification. Change tile size type from long to int. The size of 'long' type seems excessive for a tile and can not fit in java.awt.image.Raster anyway.
discard c9deb0f Bug fix: some JDBC drivers do not represent boolean values by 0/1 or false/true, but f/t. We need to add this variant in the set of value that we can convert to boolean. If the text value is not recognized, throw an exception instead of silently ignoring, so we can detect sooner next time that such problem occur. Fix also a bug in the list of URLs returned by getAuthority() and add a log message given the URL of the database after the first connection. This commit contai [...]
discard 63948c6 Complete the message about dithering or halftoning matrix.
discard 20fc6de Partial review of GeoTIFF development (mostly error messages for now).
discard 20849ff Fix SVN properties.
discard 1de27bd Minor comment formatting.
discard f421960 First draft of CRS creation from Tiff tags. Work in progress.
discard 2d56e11 Partial refactoring of GPX store: - Reduce code duplication between GroupPolylinesOperation and GroupPointsAsPolylineOperation by using inheritance. - Replace Envelope by GeographicBoundingBox. It simplifies code and reflects the GPX specification, which restricts the CRS to WGS84. - Create a Element class as the common parent of Person and Copyright. More code will be added in that parent class for URI parsing. - Move the FeatureType constants in GPXConstants in a separ [...]
discard 16d3392 Javadoc formatting.
discard ed3d449 Give a hook that subclasses can override for easier control on the CoordinateOperation inferrence.
discard 1411a29 Partial consolidation of GPX metadata.
discard 5dd640c Fix for SIS-333: Ellipsoid that are sphere should have <isSphere>true</isSphere> as their second defining parameter in GML.
discard d82a1aa Javadoc formatting.
discard 623091d Remove the heuristic rule that tried to determine if we can inverse the sign of the parameter value for the inverse operation. That heuritic rule performs the wrong guess for EPSG "Affine parametric transformation".
discard a722cba Javadoc formatting.
discard d659389 Performance improvement: when searching for a CRS in the database matching a given CRS, filter better the EPSG codes by IdentifiedObject sub-type before to instantiate the object. The filtering that existed before this commit was doing only part of the work and was not sufficient.
discard 542220a Document the Copyright class and adjust the value returned by some methods.
discard bd09be1 Javadoc formatting (no significant code change).
discard 006442b Remove the deprecated 'setCardinality' method.
discard d78f5b1 Complete the set of units declared in the Units class. It cover now most of the BIPM units, except the ones related to radioactivity.
discard 9e66b3b Remove or deprecate some hacks (e.g. Units.multiply(Unit, double) method) not needed anymore since we replaced JSR-275 by JSR-363. This imply a revision of the tolerance threshold when determining if two LinearConverter are equivalent.
discard bbdc384 Javadoc formatting.
discard 93a7c30 Support also parsing of units written in a form like "100 feet". While not legal UCUM syntax, such units are sometime found.
discard 8ddc14d Test tuning: exclude the "tec.units" transient dependency which was inherited in NetCDF module. Add more tests.
discard 2376590 Modification in the way we build the internal list of "related units". Add explanatory comment and test.
discard 57971e9 Re-enables test and debug. With this commit, all tests are back.
discard bd459b2 Javadoc formatting.
discard 16b55b0 Need to extend TestCase.
discard 0d90365 Declare a javax.measure.spi.ServiceProvider for the JSR-363 implementation.
discard 47306e8 Fix a javadoc error.
discard 4ccd665 Add support for parsing product of units.
discard 40a4839 Javadoc fixes.
discard e0c2146 Use StrictMath instead of Math in tests as a matter of principle.
discard fcf624f Allow ConventionalUnit to detect when a newly created unit is equivalent to an existing one. Add more test cases.
discard 9df7761 Implement the scale factor of LinearConverter as a ratio for more accurate inversion and concatenation. Add JUnit tests.
discard ea3e15c Use extended precision for the matrix computed by CoordinateSystems.swapAndScaleAxes(...).
discard ff50fd1 UnitFormat need to append the scale factor of ConventionalUnit.
discard 61c949e Add SI prefixes parsing support.
discard 9858d08 More dependency adjustments.
discard e1f7d2c Minimalist support of UnitFormat.parse(...) with only with label, symbol and their exponent for now. Remove the tec.units dependency.
discard ef2ccba Remove PatchedUnitFormat. It should not be needed anymore since we will provide our own UnitFormat implementation. Provide cleaner implementations of Units.toStandardUnit(...) and Units.derivative(...). It is now possible since we control our implementation details. This commit contains also opportunistic Javadoc formatting.
discard 19cc5f6 Begin work on UnitFormat by first clarifying which Unicode characters we will use.
discard fdb2475 Add tests for SystemUnit.asType(Class<Quantity>).
discard f4dba35 UnitsMap is no longer needed now that we handle EPSG codes directly in our Unit implementation.
discard f068a7a Keep trace of hard-coded units and allow to retrieve them by their symbol.
discard 314aa44 Add more test for JSR-363 implementation.
discard 37f77a5 More tests and bug fixes in SIS implementation of JSR-363.
discard d15a588 Remove all dependencies to tec.units (except for parsing - temporarily) and start re-enabling some tests.
discard 028baa8 First implementation of UnitFormat.format(...) method in replacement of the reference implementation. Begin tests.
discard 1796b99 Add missing hashCode() and equals(Object) methods.
discard 0aa72af Finish implementation of all Unit methods. Not yet tested (tests will be the subject of next commit).
discard fcf0684 Initial implementation of UnitConverters, and partial implementation of SystemUnit.
discard ab44c6b Begin custom implementation of JSR-363 (Units of measurement).
discard f15bb67 Some additional pre-defined units of measurement.
discard 0e47ca1 Replace JSR-275 dependency by JSR-363. The project build but tests are temporarily disabled since many of them fail for now. Tests will be fixed when we will replace the JSR-363 reference implementation by Apache SIS own implementation.
discard f1dca2d Updated dependencies.
discard edba87e Complete the Vector.compress() method and add tests.
discard 3f5925a Bug fix when removing non-ambiguous name from the map.
discard ecf1c0b Add resources for the sis-geotiff module and throw a more accurate exception when "BitsPerSample" can not be decoded.
discard 5c6a3b6 Javadoc cleaning and minor code review.
discard 48770fd Add Vector.isInteger(), Vector.increment(double) and Vector.compress(double) methods. Those methods are used directly or indirectly by NetCDF FeaturesInfo implementation.
discard 3f28f41 Javadoc formatting. There is no significant code change in this commit, except the replacement of 'bitCount' loop by a call to: Math.max(1, Integer.SIZE - Integer.numberOfLeadingZeros(maximalValue)); which produces the same result in a more efficient way.
discard c405d60 add tiff tags (work in progress)
discard fa68910 Add a test for the Vector.range() method.
discard 7321b98 Move findDimension(String) method from Variable to Decoder. Search harder for the variable having the "cf_role" attribute. Use Vector.range() for finding the maximal value.
discard f90bbbc Add a Vector.range() method, together with specialized implementations in sub-classes for performance.
discard e9e5110 Javadoc formatting. No significant code change in this commit except a check for empty ranges in Range.union(Range) and Range.intersect(Range).
discard 5de9694 Miscellaneous cleaning: javadoc fixes, rename Resources.getResources(…) as Resources.forLocale(…), more helpful error messages when the EPSG fallback ("EPSG-subset") does not find a code, add test for GenericNameMap.
discard 2074995 First draft of a convenience class for managing FeatureTypes in DataStore implementations.
discard 752fbb0 Moved more resources to the sis-referencing module.
discard 686443c Moved more resources to their specific modules (in this case, sis-storage and sis-netcdf).
discard 4985fd8 Moved some resources that are specific to the sis-feature module into that module. Some error messages were improved.
discard a7e6622 Added comments advising to not use those internal resources outside the sis-referencing module.
discard a523b7e Remove an unnecessary package-private ProjectionException constructor, and opportunistic javadoc formatting.
discard 42f662b Modify the NetBeans project configuration for taking in account the new resources layout.
discard 3d34d2e Moved more referencing-specific resources to o.a.s.internal.referencing.Resources.
discard ad52a92 Begin refactoring of some (not all) resources on a per-module basis. The resources that are likely to be used only by a specific module are stored in an internal package of that module. The resources that may be shared by more than one resource stay in org.apache.sis.resources package of sis-utility module. In this commit, only the description or logging messages of sis-referencing are moved.
discard 2672638 Remove an incomplete sentence in a comment.
discard 42cbbdc Allows ResourceInternationalString to be subclasses outside the org.apache.sis.util.resources package. Not that this is still an internal API (excluded from javadoc), even if the package name does not contain the "internal" word. Opportunistic javadoc formatting.
discard 2ef8cd3 Make IndexedResourceBundle.getKeyConstants() protected for allowing us to declare resource bundles outside the org.apache.sis.resources package. The intend is to start splitting some resources on a per-module basis instead of putting everything in sis-utility. This commit contains also opportunistic javadoc formatting.
discard a7aa286 Fix a NullPointerException and a PropertyNotFoundException in FeatureFormat.format(...).
discard 7dce980 Javadoc formatting.
discard d8f028f Minor performance improvement in NetCDF reader by more extensive use of HashMap instead than iterating over all dimensions or variables. Wraps array of primitive type into a org.apache.math.Vector object, which also allow us to take in account the unsigned types. More progress in implementation of moving features NetCDF encoding (not yet finished).
discard 4662bd9 Begin implementation of Moving Features encoding in NetCDF files.
discard f862280 Replace string values by the ACDD (Attribute Convention for Dataset Discovery) constant from the UCAR library when possible.
discard f2e6d02 Store attribute values as primitive wrappers instead than arrays where there is only one value.
discard 8075699 A plain HashMap is sufficient for storing the NetCDF global attributes and the variable attributes.
discard dfb66ff Refactor the NetCDF data type constants as an enumeration. Those enumeration values include information about whether the type is signed or unsigned.
discard 621c846 Remove NetCDF Attribute.toIsoDate(String) method, which is replaced by use of java.time.format on JDK8.
discard 4551ef7 Javadoc formatting.
discard c202a13 Tune the CSV metadata and add a StoreProvider for CSV format.
discard bd59230 FeatureFormat should be able to format array too. This implies that we should limit the maximal length of values to format.
discard 9216195 Javadoc formatting. There is no significant code change in this commit.
discard adc51d5 More efficient parsing of CSV row by pre-computing more information in the iterator constructor.
discard a80326e Javadoc formatting (no code change).
discard 690c180 Continue work on CSV data store: complete metadata parsing and move the parsing of Features in a Stream.
discard ff6b125 Add defensive synchronization. The DataStore javadoc said that implementations do not need to be thread-safe, but we nevertheless synchronize since DataStore are often used in multi-thread context and the user may forget to perform his own synchronization.
discard 6ede427 Javadoc formatting or minor rewording. There is no code change in this commit.
discard 736fb28 Add missing documentation for product request identifier.
discard c762f42 Add requirement identifier in Landsat acquisition metadata.
discard 96ab1ad Construct the map projection (UTM or Polar Stereographic) from Landsat metadata.
discard 70801ec Add metadata about grid size and group bands in 3 categories: panchromatic, reflective and thermal bands.
discard 2d658e2 Document the band attributes.
discard 033766a Complete information about bands from Landsat metadata.
discard 3e3ebd3 Javadoc formatting (no code change in this commit).
discard a5aa878 Refactor Landsat metadata reader for using MetadataBuilder. This allow us to regroup the parsing of Landsat attribute in a single switch statement, since many of the complexity previously in LandsatReader moved to MetadataBuilder.
discard cc3d412 Javadoc formatting. There is no significant code change in this commit.
discard f8f5e3b Javadoc formatting (no code change in this commit).
discard 7401786 Javadoc formatting (no code change in this commit).
discard 11bf262 Add the application/sis-webapp/src/test directory to NetBeans project configuration.
discard d55e330 Test resources shall be written in test target directory, not in the library target directory.
discard d2f2856 Replace the use of java.text.SimpleDateFormat by java.time.DateTimeFormatter and provide a compatibility later. The pre-JDK8 branches will need to keep old mechanism of top of the java.text.SimpleDateFormat.
discard 91a4c9b Post-merge cleanup. This commit does not contain siginficant code change.
discard a9493bd Omit the clock part if hours, minutes, seconds and milliseconds are zero in UTC timezone. This is in anticipation to a change to use to java.time packages in some future SIS version.
discard 6fd5feb Expand the number of fraction digits in second from 1 to 3, in order to avoid an ambiguity in the way SimpleDateFormat interpret the "S" pattern in "ss.S".
discard cddf483 Avoid a reduncency in Loggers and add a logger for earth-observation.
discard fbe83ad Provide LandsatReader service behind a LandsatStore facade. This require an implementation of LandsatReaderProvider, for which we reuse code that were designed for WKT data store.
discard 36a1c06 Javadoc fixes and rename 'storage' parameter name as 'connector' for consistency. There is no significant code change in this commit.
discard 7196a46 Make the doc-files/LandsatMetadata.html documentation and the LandsatReader.java implementation in agreement.
discard 7729d0c Convenience constructor which was used to set the "alternate title" property now also set a default "title", if possible. This is for reducing the weird case of a Citation having only an alternative title and no title. Opportunistic javadoc formatting.
discard 11da2f1 Add java.math.BigDecimal in the list of types for which we provide a name in the GCO namespace. Update javadoc with both the addition of BigDecimal case and documenting the URL recommended by WPS standard. Opportunist javadoc reformatting.
discard 111dbdc Address type-safety issue with parameterized types in filter. In particular, evaluate(...) should not accept a null Class argument. This commit contains opportunist code reformatting.
discard d93278a Javadoc and formatting (no code change in this commit).
discard 8862979 Fix javadoc error
discard 5f43088 Fix an IllegalStateException when AssociationRoleBuilder is created for an existing association to a NamedFeatureType.
discard dabe07b Allow to get the name of associated FeatureType in FeatureAssociationRole, even if the name is not yet resolved.
discard 27fde40 Provide a default formatting for all operations.
discard 9d53f82 AttributeTypeBuilder cache must be cleared when a characteristic is removed.
discard ea315c4 Updated the list of developers and contributors in pom.xml files.
discard 0c54040 Add svn-ignore property on the new module.
discard 2740802 Add the sis-earth-observation module. Contains only 2 simples classes for now in order to get feedback from the list before to continue.
discard ff56282 Fix corner cases (NullPointerException, etc.).
discard 96a28ae Add support for vector backed by String[] array. This is not recommended, but happen because of the way GDAL encode some of their extensions in GeoTIFF tags.
discard 315e590 Reorganize Vector API: - rename toString(int) as stringValue(int) for consistency with other xxxValue(int) methods. - rename view(int...) as pick(int...). - add a toString() method for correct representation of unsigned numbers. - provide default implementation of most xxxValue(int) methods. - change some method declaration order.
discard 44bda2e Allow the Vector implementations to return a narrower primitive type if it can hold the value. Added a toString(int) method.
discard ccb89ba DefaultFeatureType constructor should verify that the operation does not have a dependency to a non-existent property. This commit contains also opportunistic javadoc formatting.
discard b8dd076 Fix identifier count not decremented when removing identifier property
discard f69e2cc RemoveOnlyList.remove(E) shall check if the removed property is the default geometry. This check is done indirectly by AttributeTypeBuilder.remove().
discard 0951a5c DefaultFeatureType constructor should omits properties that duplicate a property defined in the parent type.
discard 439c25d Fix updating default geometry attribute type class cache in feature type builder
discard 6fcaf76 Review Vector API and javadoc.
discard e93d3d4 Initial support of Vector of unsigned integers.
discard d808baa Javadoc.
discard adb2053 Ported tests for Vector.
discard 0599f3e Ported CRS.getDomainOfValidity(CRS) method. This implied a revision of Extents.getGeographicBoundingBox(Extent). This commit contains opportunist javadoc formatting.
discard 0fef6be Javadoc.
discard ed838e4 Replace PropertyTypeBuilder.setCardinality(int,int) method by a pair of setMinimumOccurs(int) / setMaximumOccurs(int) method, together with their getter methods.
discard 37fb351 Javadoc (no code change).
discard 43ab44c Add a test about multi-valued properties.
discard b3fe11e Documentation formatting.
discard e4775d2 FeatureTypeBuilder created from a template should infer the AttributeRoles.
discard 0230257 Make the PropertyType.build() method public, and fix a bug about a cache value not cleared.
discard 8356a71 Documentation fixes (no code change).
discard 559a03a Initial port of Vector classes (as wrapper around array of Java primitive type) as helper classes for reading GeoTIFF data. Test classes will need to be ported later, as well as other wrappers for unsigned bytes, shorts, ints and longs.
discard b28f43f Implement AttributeTypeBuilder.roles() method. Opportunistic reformatting of javadoc of other classes built on top of SetOfUnknownSize.
discard 9f0b2bf Javadoc formatting (no code change).
discard 12fb0e1 Add getter methods, perform more checks and add tests.
discard 55e1531 When formatting FeatureType, shows also the names of parent types.
discard a613391 Initial implementation of AttributeTypeBuilder.setValueClass(Class<N>) method, together with some getter methods.
discard 8208dca Refactor TIFFException as DataStoreContentException and use it with other DataStores when applicable. First draft of ImageFileDirectory.completeMetadata(...), which complete the metadata with information available in IFD object. For now we just write the compression method, but more will be added later.
discard 73a0be0 Complete the parsing of TIFF tags (but not yet the interpretation; the ImageFileDirectory class still needs to be completed).
discard 35100e2 More documentation about what the tests are doing.
discard e3fec7c Relax a little bit a tolerance threshold, since some combination of random values sometime exceed the old threshold.
discard 7de62d7 Provide more default implementations in AbstractMethod methods, for making easier the task of developers who want to create their own subtypes.
discard 4c1378f Complete the storage of MinSampleValue and MaxSampleValue properties.
discard b668155 add metadata attributs group and coverageDescription
discard 2d92e13 Remove dead code.
discard 9dd28f2 Fix a StackOverflowError in LinearInterpolator1D.hashCode(). Fix the tolerance factor used when determining if the series is regular. Previous tolerance value was too strict. Opportunist javadoc formatting.
discard 6ac2ff3 Fix a NullPointerException when building a FeatureType where the first attribute is a property named "@geometry".
discard 4a4647b Make GPX metadata implement ISO Metadata, add TestSuite class
discard 541b377 Finish declaration of baseline GeoTIFF tags. However most of them are not yet implemented.
discard c67b71d Javadoc formatting (no code change).
discard 4b478e5 Generalize the addOperation(Operation) method as an addProperty(PropertyType) method.
discard db77cf5 Complete the MetadataBuilder.parseLegalNotice(String) helper method.
discard d054b38 Parse more GeoTIFF tags. Contains a first mapping from TIFF to ISO 19115.
discard f65e36d Trivial javadoc formatting (no code change).
discard 34016bd Add a FeatureTypeBuilder.addOperation(...) method.
discard 5afbdf0 Refactor the Types integer constants as a Type enumeration, and begin parsing a few tags.
discard 682142f Continue port of GeoTIFF reader.
discard c336873 Begin the port of GeoTIFF reader.
discard afae5ed Javadoc formatting (no code change).
discard 1a41060 Put some consistency in URL style (trivial change) and add "svn-ignore" property for the sis-geotiff/target directory.
discard 929fb31 Add a GeoTIFF module for receiving part of Google Summer of Code work. Some other parts of the work will go in other modules (e.g. sis-webapp).
discard f824c30 Take in account the polar cases.
discard 0cd66c1 Add benchmark for selecting the best implementation strategy, and document the result analysis.
discard c3be9ef Tests consolidation.
discard 877fd07 Initial implementation of AlbersEqualArea. Share some more code with CylindricalEqualArea when applicable.
discard 15422d2 Consolidation in the way CoordinateOperationFinder try to invert coordinate operations.
discard e1ffffb Post merge cleanup and documentation.
discard 857d343 Add missing EPSG identifiers in Molodensky parameters.
discard f750824 Add "Lambert Cylindrical Equal Area (Spherical)" projection.
discard d0a7814 Javadoc formatting.
discard 17fa824 Set the CylindricalEqualArea parameters to the "Lambert cylindrical equal-area" parameters defined by EPSG:9835.
discard 7d598a2 Initial commit of CylindricalEqualArea projection.
discard 005f23a Additional info in the MathFunctions.atanh(double) method. One less level of indirection in PolarStereographicSouth (may reduce class loading). Use a separated property in the Ant script for SIS version of the branch from which to create a release.
discard 4c6b29b Changes in the amount of spaces and a minor typo fix in a comment. No code change in this commit.
discard 3aa1f3e Refactor the package-private helper methods used during map projection providers initialization. The intend is to use slightly more readable methods in definitions of ESRI-specific projections.
discard 80a6a20 Add javadoc.
discard b442085 Post FeatureTypeBuilder refactoring: adapt builder usage.
discard 5fad805 Refactor the FeatureTypeBuilder inner classes as top-level classes. Move those builders in their own package.
discard e5e6c17 Add getter methods for some of the builder properties. Given the increase in amount of methods, make the Builder abstract class public (after renaming).
discard d6fc9b5 Allow to create a builder using an existing IdentifiedType as a template.
discard 5a4833a Review FeatureTypeBuilder API: - separate the Association and Attribute cases - replace addDefaultGeometry and addIdentifier by a setRole(AttributeRole) method - provide a default property name based on the type
discard 039937d Support geometries from the JTS library using reflection (since this is an optional dependency). Improve feature Operation formatting.
discard feb9961 Rename AttributeConvention static final constants to match better their value.
discard add7cb4 Minor consolidation of NetBeans project configuration.
discard 2abb825 Partial revert of StaxStreamReader previous commit: should not extends DataStore because StaxStreamReader is not intended to be used directly as a DataStore. It is rather intended to be contained in a DataStore, as internal mechanic. Add a StaxStream base class with documentation about this intended design.
discard c4acc46 Add support for Path (from NIO) in XML (un)marshalling. Opportunist comment formatting on XML-related class.
discard 5ce834a More conservative threshold for throwing a ProjectionException in TransverseMercator projection.
discard 7bb7669 Check against longitude values too far from the domain of validity in Transverse Mercator projection (SIS-329).
discard 85c5c5b Ported Shapes2D class and test methods from Geotk.
discard e163ec8 Trivial documentaton fix.
discard 538c12d Bug fix: enum types need to be casted to VARCHAR on PostgreSQL.
discard 33acb7f Begin refactoring of GPX reader. The intend is to have it as a DataStore subclass.
discard 2783bda NetCDF reader should check the validity of input argument.
discard 84e3852 Returns an empty array instead of NaN values if the add-in can not compute values.
discard a64a9a0 Make a test more robust to different way a WKT may be expressed. This fix a test failure when the EPSG geodetic dataset is not installed.
discard c375289 Fix a test failure that occurs when the test are executed without EPSG dataset available.
discard 84f8322 Adjustment in OpenOffice function names and documentation. Add a TRANSFORM.ENVELOPPE(...) function. Text <-> angle conversions as matrix functions for more efficient conversions of large amout of values.
discard 99be28c Refactor the OpenOffice addins using a XCU file for function descriptions instead than hard-coded values in Java. The hard-coded way was legacy from OpenOffice.org 2.0 days.
discard 1853788 Allow the EPSG fallback to create also datum objects, and add tests.
discard f0812d9 Better inference of whether an argument given to an application (console or OpenOffice add-ins) should be understood as an AUTHORITY:CODE pattern or a PROTOCOL:FILE pattern.
discard 057f1c6 Make the search for services more robust to environments having a too "poor" context ClassLoader.
discard 3198718 Resolve a classpath issue when installing openoffice addins. The Apache SIS classes were not found. The issue is caused by https://issues.apache.org/jira/browse/MJAR-223
discard 25dc7c8 Add the result of UNO compilation for OpenOffice.
discard d312639 Rename methods for making clearer that the domain of validity is returned as a geographic coordinates and that the transform method operates on points (not on envelopes or geometries).
discard 8238b18 Update dependencies.
discard 79586d8 Add resources to the openoffice add-ins.
discard a7aebf1 Partial port (still incomplete) of referencing services as Apache OpenOffice addins. This provide some of the services provided by the command-line tools, but available as formulas in Calc.
discard f2f9985 Remove the implementation URL since it is not a deprecated Manifest attribute.
discard 03b3952 Initial port of custom Maven plugin for as an helper tool for building the OpenOffice add-in. This is specific to Apache SIS - not a Maven plugin for general use - and may change or be removed in any future SIS version.
discard 7f0fcf8 Remove deprecated methods and fix javadoc.
discard 2dfeecd Increment version number to 0.8-jdk8-SNAPSHOT.
discard bf8f0bf Build tools for the developer guide should not add the <section> tag itself.
discard 1f3b553 Add a README about the "org.apache.sis.non-free" groupId.
discard a18f8f2 Upgrade parent Apache pom to version 18.
discard 7da11b9 Fix a wrong logger name.
discard b26f561 Add a main method to developer guide assembler.
discard 956df63 Do not overwrite the standard CSS files when Javadoc plugin is executed more than once without "mvn clean".
discard 1caafaf Update README in preparation for release candidate and set the URL to EPSG geodetic dataset to its expected location after release.
discard b904aa9 Add a SQL view for verification purpose.
discard 3ec5282 Modify the temporary URL to EPSG script files.
discard 34ed3ae Fix the links to the coordinate operation methods and CRS tables.
discard a4e6958 Command-line tools should compute the area of interest from the given input coordinates.
discard 60dfe6c Command-line "transform" operation in "--verbose" mode should format the CoordinateOperation instead than the MathTransform. The user should be notified if that coordinate operation can not be formatted in valid WKT. Should also format the domain of validity.
discard 9986619 Bug fix: need to check accuracy and domain of validity before to compute the inverse of an operation.
discard 153f884 Bug fix: - Exclude deprecated operations when searching for an operation path. - Inverse operation should contain domain of validity and accuracy information. - Command line should give the operation EPSG codes when available.
discard f915397 Make some tests a little bit more determinist regarding order of test execution.
discard b044a09 Internal WKT needs to said when a transform works in the radians domain. Command-line output of "transform" command must contains the unit of measurement with axis names. Command-line input of "transform" command should take in account the specified encoding. Format the header of "transform" command-line output like a table.
discard 9fb6a5f Do not search transformation path between deprecated CRS by default. If nevertheless the user ask to take in account deprecated CRS, reduce the amount of warnings.
discard 7d46642 Complete implementation of the "transform" command-line tools.
discard e4424a7 Split the implementation of "metadata", "crs" and "identifier" sub-commands into 3 separated classes. Begin implementation of "transform" sub-command.
discard 07a359a When creating a new CRS as an intermediate step between the source and target CRS, check if that CRS is defined by the authority (e.g. EPSG).
discard c17e457 Add tests.
discard a515d48 WKT parser should verify that the unit of measurements are consistent.
discard 8f20a35 Add "ID[...]" element in SourceCRS and TargetCRS of ConcatenatedOperation WKT.
discard d5d2ca2 Declare a ConcatenatedOperation needed for transforming from old NTF systems to new RGF93 ones.
discard af91403 Safety against a discrepancy between older and newer ISO 19111 model.
discard 9f8f7e4 Javadoc clarification, especially about enabling or disabling MBeans.
discard 3557d6a Fix a regression caused by previous commit: if operations to concatenate change the number of dimensions, merge them in a single operation only if both of them are the "Affine" operation.
discard 8cba303 Fix an index out of bounds in matrix indices when computing the conversions from a spatio-temporal CRS (as a compound CRS) to vertical CRS.
discard 6d179b1 Add limited caching in CoordinateOperationFactory.
discard 038dd4d Fix a mismatched dimension when transforming coordinates using position vector transformation from geographic 2D to geographic 3D domains.
discard 14f2a09 Post-merge cleanup.
discard f087209 Rename NameConvention back to AttributeConvention because it defines methods looking for conventional characteristics of feature attributes.
discard 355c0fb Complete (for now) FeatureTypeBuilder refactoring. All 'addProperty(...)' methods have been replaced by a smaller amount of 'addFoo(...)' methods, which return a Property builder on which the caller can invoke setter methods.
discard fb0ada2 Start refactoring of FeatureTypeBuilder. The plan is to replace the numerous 'addProperty' method by the creation of an inner class dedicated to Attributes and Operations. This inner class will have its own set of 'setName' methods together with some methods for marking it as default geometry, part of compound key, etc.
discard bd7dd61 Rename BoundsOperation as EnvelopeOperation and refactor in a way which try to find the CoordinateOperation at construction time instead than searching them for every feature instance.
discard 318fb9a Rename AttributeConvention as NameConvention. Code formatting, javadoc and tune NameConvention implementation and tests.
discard 788b7a2 Add test, bug fixes and formatting.
discard e844162 Implement character escaping in StringJoinOperation. Document that AbstractOperation.getDependencies() does not report transitive dependencies. Implement hashCode() and equals(Object) in AbstractOperation subclasses.
discard f2137c6 Avoid randomness in WKT parsing test.
discard a542032 More exhaustive check of attribute types in StringJoinOperation. More predictible use of ObjectConverters in StringJoinOperation.
discard 9101b85 Rename AggregateOperation as StringJoinOperation. Replace GenericName argument by a map of identification info. Document how the identification info are used for the operation result.
discard 9c3e0f6 Javadoc and argument validations.
discard 9f999e4 Replace foreign file header by the Apache one. Fix the parameter group name and apply some code formatting.
discard f7d5cb5 Javadoc, code formatting, factorisation of validate(Feature) code, localization of error message, make a test independent of builder, support validation for non-SIS property implementations.
discard 6959df7 Set SVN properties.
discard 1357658 Add test for DefaultCoordinateOperationFactory.
discard e175e5b Rename CoordinateOperationInference as CoordinateOperationFinder and define as a subclass of package-privated CoordinateOperationRegistry for enabling the search in EPSG database before to try to infer the coordinate operation by itself.
discard 6c5bd19 Debug and add test for the case where CoordinateOperationRegistry searches for the inverse operation.
discard 23a19f6 Implement Literal and PropertyName expressions
discard 04606f4 Simplify the pseudo-WKT representation of ConcatenatedOperation.
discard 8eb164f Initial support of search for operations between three-dimensional CRS (with ellipsoidal height) when only operations between two-dimensional CRS are found in CoordinateOperationRegistry.
discard ea20d14 Add a test and debug the case where axis order does not match the EPSG definition.
discard 980a422 Set SVN properties. There is no code change in this commit.
discard ee7351b Add GPX 1.0 and 1.1 writers
discard b9a428a Complete CoordinateOperationRegistry (but not yet connected to DefaultCoordinateOperationFactory) and begin tests.
discard f690ecd WKTParser should emit a warning when a CS[...] element contains a UNIT[...] element which is inconsistent with the coordinate system axis units.
discard f1866d1 Fix SVN properties. No change in file content, except EOL characters.
discard 7e78ecc Partial port of CoordinateOperationRegistry for finding coordinate operation by the "late-binding" approach.
discard f961374 Add GPX reader and test samples
discard 0b85e49 Add a Matrices.resizeAffine(...) method to be needed for CoordinateOperationFinder.
discard 6fab689 More tests.
discard f02fc7d Fix operation between CompoundCRS having a ProjectedCRS, and add corresponding test.
discard b9e3b3e Add pseuso-WKT formatting for PassThroughOperation.
discard d085e6f Complete support of coordinate operation between CompoundCRS and enable the test.
discard c3ba7be Fix missing serialId on Aggregate and Bounds operations, fix AbstractFeature returned default values for association roles not compliant with javadoc
discard 27ab1db Begin support of coordinate operation between CompoundCRS instances (still a work in progress).
discard 3bd652c New aggregate and bounds feature operations, add featuretypebuilder and attributetypebuilder
discard 78ae3a0 Code formatting and addition of @SuppressWarnings annotation. There is no code change in this commit.
discard 263ef91 Verify that the ProjectedCRS constructor does not accept invalid base CRS.
discard 724a935 More robust createOperationStep(GeodeticCRS, VerticalCRS).
discard ce1feb0 First draft of a GeodeticCRS to VerticalCRS. Does not yet take geoidal height in account, but the first block are in place with the definition of an interpolation CRS.
discard c3c6b37 Tune pseudo-WKT formatting for ConcatenatedOperation.
discard 4e0bb65 Add test for the geographic 2D to 3D + datum shift case. Trivial code reformating.
discard 0d283ca Fix support for geographic 3D to 2D + datum shift transform.
discard f36e3c6 Override the method that combine the transform and its derivative in a single method call. The intend is to avoid to call Arrays.binarySearch(double[], double) twice for the same value.
discard 948c300 Fix parameter declarations in operations created by CoordinateOperationInference.
discard cd83b18 Fix support of Geographic 2D <-> 3D conversions.
discard f35f4d3 Revert to a simpler algorithm for finding a public class name, since it seems there is no good one.
discard 57b7334 In LinearInterpolator1D, rename "x" and "y" as "preimage" and "values" respectively. "preimage" seems to be the appropriate mathematical term for what this array is. Add a provider for that coordinate operation.
discard 0e39d51 LinearInterpolator1D refactoring: - replace the loop over y values by an use Arrays.binarySearch. - split the work on x and y values in two separated class: - one from x to indices (the Invert inner class) - one from indices to y values (the outer class) The rational for this split is that most of our usage (at least in the context of Coverage's "gridToCRS") use only the second part. Indeed, the previous static factory method was allowing construction of only that se [...]
discard cdb2095 Fix javadoc warnings.
discard c3c1133 Add javadoc. Add some missing types in TableInfo.
discard 85563b1 Complete JAXB annotation on ParametricCRS related classes and add JAXB adapter. Add the parametric case in EPSGDataAccess. Javadoc and formatting.
discard c55d155 Move the quadrupleToDouble method up for keeping it together with related functions. Add javadoc.
discard 5ba8b4e Implement parametric CRS, update wkt and jaxb parsers
discard 247fcb9 Add quadruple precision to java double math function
discard f78668a Add non-linear transform 1D
discard 7f02e67 Fix erroneous javadoc.
discard 770a062 Add tests for vertical and temporal axes. Prepare tests for the next step: 2D <-> 3D ellipsoidal CS.
discard 535d72b Centralize the place where we fetch the CoordinateOperationFactory. Fix javadoc and tests.
discard c79157a Javadoc fixes.
discard 55b3547 Added convenience method and javadoc about how to perform a map projection.
discard 3f44a96 Post-merge cleanup.
discard 9b25b9f First draft of CRS.findOperation(...) method.
discard da884d2 Add tests for longitude rotations in geographic and geocentric coordinates.
discard ac5147a Add more tests. For easier debugging, provide a SIS-specific WKT format for ConcatenatedOperation (this case does not seem to be described by WKT 2 format).
discard 26c7697 Test the GeographicCRS to ProjectedCRS case without datum or axis changes.
discard 2d0136d If a test resource is not found in the package of the sublcass, search up in the hierarchy of classes. The intend is to allow diffent module to reuse an existing test in another package.
discard fb300c2 Fix a lost of precision in UnmodifiableMatrix. Opportunistic formatting fixes while debugging.
discard bb6e0b4 Add more tests and debug CoordinateOperationInference.
discard 5ba9bea Search of coordinate operation path now take in account map projections. Begin tests.
discard dee08ac Replaced CoordinateOperationInference.createOperationStep(GeocentricCRS, GeocentricCRS) by a version working on GeodeticCRS, thus including GeographicCRS. Previously (in Geotk) we had two separated methods for the Geocentric and Geographic cases. But that separation does not exist in ISO 19111:2007 standard, and indeed merging those two methods in a single one gives something both simpler and more powerful (better handling of change of coordinate system type). This work [...]
discard 0d10a14 Modify DefaultMathTransformFactory.Context API for making clearer that the factory does not deal with datum. In particular, change of prime meridian is caller's responsibility. Added a Context.getMatrix(MatrixRole) method for making easier to handle prime meridian outside DefaultMathTransformFactory. Those changes are needed for continuing CoordinateOperationInference implementation.
discard a754f9c Add missing javadoc tags.
discard 591f111 Complete CoordinateOperationInference.createOperationStep(GeocentricCRS, GeocentricCRS) including longitude rotation and change of coordinate system (Cartesian <-> Spherical). This work required a clarification of the condition for using the Bursa-Wolf parameters. In order to avoid ambiguities, we use those parameters only if there is no longitude rotation, or if the target datum use the Greenwich prime meridian. Otherwise the parameters are ignored and the transformatio [...]
discard 0427a15 Try to provide a litte bit more information in the logging messages, especially when we failed to create or connect to the EPSG database.
discard 7279404 Enable use of random number for the MemoryTransfer test.
discard e4c8bd0 Allows HyperRectangleReader to use an existing array of primitive type, not necessarily data provided by a ReadableByteChannel.
discard 017f570 Replaced cylindrical <-> Cartesian conversions by polar <-> Cartesian conversions with a PassThroughTransform for the z value. This allows SIS to leverage the optimization in PassThroughTransform when other MathTransform are concatenated.
discard 29d60f4 Consolidate our abbreviations for spherical CS. In particular, we distinguish two kinds of spherical CS: - Geodetic case with (spherical latitude, spherical longitude, geocentric radius) axes - Engineering case with (distance, bearing, elevation) axes.
discard 107e3da Prepare for PolarCS: Add an "awayFrom" axis direction (taken from ISO 19162) and uses it in the tests. Allow CoordinateSystemTransform to be two-dimensional, not only three-dimensional.
discard 55c10a2 Add tests for conversion between cylindrical and Cartesian coordinates.
discard e6a6508 More robust normalization of axis order and orientation in the context of PolarCS and CylindricalCS.
discard 567ecb7 Add conversion between cylindrical and Cartesian coordinate systems.
discard bd70ffa Improvement: EllipsoidToCentric delegate to SphericalToCartesian when the given Ellipsoid is actually a sphere. Improvement: NonSquareMatrix need to omit rows containing only a translation term if and only if the last row is [0 0 ... 0 1]. Bug fix: ProjectiveTransform should not delegate to ScaleTransform when the matrix has less columns than rows (the matrix looks like diagonal but is not). Bug fix: missing RangeMeaning enumeration value when creating the axis for geoce [...]
discard 0d838e0 Replace NonStandardCRS class by CommonCRS.spherical() method and add tests.
discard 6d4b969 Add support for conversion between three-dimensional Cartesian and spherical coordinate system. The design is similar to EllipsoidToCentricTransform regarding the way to concatenate affine transforms. We need those conversions for completing CoordinateOperationInference.createOperationStep between GeocentricCRS.
discard d59bb03 Temporarily remove the use of AccessController.doPrivileged(...) for shutdown hook (reverse of SIS-320). The reason is that we currently use a mechanism that allow anyone to register code to execute as part of our shutdown. This mechanism is in the internal packages of SIS, but there is currently no mechanism (other than OSGi) to ensure that only SIS uses this mechanism. We should be able to re-enable the use of AccessController.doPrivileged(...) when we will upgrate to jigsaw.
discard 49d72dc Ported: - conversions between two VerticalCRS - conversions between two TemporalCRS
discard 3da4091 Begin the port of the code that infer a coordinate operation between two CRS.
discard 33421b5 Conservatively remove the use of AccessController.doPrivileged(...) for ServiceLoader, because it may create by reflection classes that we do not control. We will need to revisit in the context of Jigsaw.
discard 0101b6a Tune some AccessController.doPrivileged(...) calls and add a security.policy file that developers can use as a template. This work is based on Guilhem Légal work (SIS-320).
discard 6a740d7 Add Johann Sorel in the list of authors for the code reading a rectangular area of sample values. This work is based on the patch attached to SIS-314 issue.
discard e4c8b51 More uniformization in the way we parse ISO dates (for now - to be replaced by java.time package) for easier merge with JDK7 branch.
discard 24e477b Add or review AccessController.doPrivileged(...) calls.
discard c1a7171 Allow some parts of SIS to run in security-constrained environments.
discard 3c4b071 Trivial formating.
discard 707967c Initial draft of a getFeatures() method. This is an experimental API restricted to the internal package for now (see the numerous "TODO" comments). This experiment allows us to start thinking about what should be the DataStore public API. Such public API is not planed for Apache SIS 0.7 release (it would hopefully be provided in SIS 0.8), but in the meantime having an internal API enable experiments.
discard b4246b2 Read metadata from a Moving Features CSV file (SIS-319).
discard ccf89ab Javadoc and code formatting (no significant code change).
discard e7b13a6 Use HyperRectangleReader in NetCDF data store.
discard f55cdbc Add a HyperRectangleReader as an internal helper class for NetCDF, uncompressed GeoTIFF and some other raster formats.
discard e283959 Re-arrange readFull(...) methods in a way which will allow us to share the code for reading hyper-cubes.
discard b98cedb Apply an annotation about workaround for supporting some deprecated EPSG codes. This is for documentation purpose only.
discard 599be7e Upgrade dependencies.
discard 89f3fea Allow users to keep the filenames used by EPSG (e.g. "EPSG_v8_9.mdb_Data_PostgreSQL.sql" instead of "EPSG_Data.sql").
discard ce3d9c2 Improvement on the command-line tools: - If there is more than one CRS in a WKT file, parse all of them. - Report warnings emitted by the WKT parser. - If the SIS_DATA environment variable is not set, use the <installation directory>/data directory. - Adjustments in the logging colors for making more visible when a log message spans many lines.
discard f671de2 Do not allow usage of ":" in "gml:id" attribute values.
discard de706d1 Adjust messages and logging.
discard c07de96 Renamed LicensedDataProvider as ResourcesDownloader because not all resources to download will have a restrictive license. Add localization for ResourcesDownloader and reduce the level of a log message which partially redundant with other logs. Edit javadoc.
discard a7e0fbc Refactoring: transfer more responsibility from InstallationScriptProvider to InstallationResources. The intend is to get more flexibility for applying the same mechanism to resources provided by other authorities than EPSG.
discard 8626da4 Test for null argument value.
discard 5a1eb33 Do not write the same warning twice.
discard a1f9590 First draft of automatic EPSG geodetic dataset download and installation, after asking user to accept EPSG terms of use. This initial draft downloads the data from a temporary URL. This URL will be changed after discussion on the mailing list.
discard 61830b5 Fix a test failure and improve javadoc.
discard 70e6d8d Support CRS authority codes from the command-line (e.g. "sis crs epsg:4326").
discard c507798 Rename internal classes of console application (no code change in this commit). The previously-used SC abbreviation (for "SubCommand") was unconvenient to remember.
discard 73ef71d Complete the support of the "identifier" command on the command-line tools. This work includes a bug fix in comparison of ProjectedCRS with ComparisonMode.ALLOWS_VARIANT and more extensive test in ConsistencyTest.
discard cba4490 Initial implementation of the "identifier" sub-command in the command-line tools. This work required an improvement in GeodeticDatum.isHeuristicMatchForName(String) in order to ignore the prime meridian name in some circumstances.
discard ea4d35e More extensive test for WKT parsing/formatting consistency.
discard fdeeee3 If FormattableObject.toString() did not provided a valid WKT, append to the string a warning giving some indications about the problem.
discard 6846de7 Moved an internal method related to JAXB (un)marshalling from ReferencingUtilities to MetadataUtilities.
discard f7015a6 Move ReferencingUtilities.toWKTType(...) to WKTUtilities.toType(...). This is an internal method - no impact on public API.
discard 3e6ebff When parsing a WKT 1 string, convert (Geographic2D + Vertical) into (Geographic3D) CRS. Issue: SIS-317.
discard f7c1aa8 When formatting a three-dimensional geographic CRS in WKT 1 format, temporarily split in a CompoundCRS (SIS-317). Note that this is illegal according ISO 19111. This split is done only on-the-fly and discarded, and only for compliance with the legacy WKT 1 format.
discard 27db31b Bug fix in WKT parser and formatter: SIS-311, SIS-312, SIS-313.
discard 0cbb217 Merged ReferencingInMetadataTest and DefaultMetadataTest in a single test class.
discard f6a9926 Fix a parsing error for UNIT["grade", ...] and for ID[authority, code, URI[...]]. Issues: SIS-309 and SIS-310.
discard 5e2b760 StorageConnector.getStorageAs(InputStream.class) needs to call InputStream.reset() if the InputStream has been used previously (SIS-308). As a side effect of this bug fix, add a "--debug" option to the command-line tools (which is the place where the problem manifested).
discard d16a0c5 Rename XMLStore as Store (an internal class anyway) since "XML" is already implied by the package name, and for consistency with WKT store.
discard 0aec6a2 Add "application/wkt" as the MIME type of WKT strings.
discard c38aba1 Add capability to parse WKT from the command-line.
discard d5d935a Add information about the javax.sql.DataSource to the SpatialMetadata database in the "about" command.
discard 412bd9f Keep the definition of enumerated values in SIS instead than with the EPSG scripts because those enumerated values are closely related to hard-coded values in EPSGDataAccess Java code.
discard 8983685 Allow use of enumerated values instead of VARCHAR for columns that are used in Java switch statements.
discard c0668aa EPSG fallback shall ignore the prefix in codes like "EPSG:4326".
discard e187211 Safety against SecurityException.
discard 1377792 Misplaced comment.
discard 63b0ee2 Trivial typo.
discard d00fc64 Remove the restriction on EllipsoidalCS for DerivedCRS of kind geodetic, because a geodetic CRS can be geocentric.
discard 2a32676 Temporarily suspend parameter verifications in some circumstances: - When it is too late for verifying parameter validity and we are supposed to just record whatever value they have. - When creating a projected CRS which has been deprecated precisely because of invalid parameter, but may still be in usage.
discard 4d9f4c4 Upgrade EPSG database from version 8.8 to 8.9.
discard 33b80c1 Fix test failures.
discard abc1c59 Adjustment in the section in which some CRS are listed.
discard d200aff Put the accented letters in the object name if they are available.
discard cb519b5 Better support of deprecated CRS. In particular, avoid the "non-linear unit" exception.
discard caf6fa8 Allow creation of EPSG database in the directory specified by "derby.system.home".
discard a57723b Avoid throwin an exception when formatting a message with non-formattable units.
discard 1dddce0 Add a few new categories for upgrade from EPSG 7.9 to 8.8.
discard ca07cb4 Verify the log messages emitted during execution of GIGS tests. This implies another modification in the way we verify log messages in tests.
discard 17211f6 Change the way the tests verify the logging messages. Instead than doing the assertions in LoggingWatcher, do them in the test methods. The reason for this change is that assertion failures in LoggingWatcher had very confusing stack traces.
discard 02e9a51 Documentation update: revert the "EPSG::####" notation to "EPSG:####" in non-URN code for compliance with WMS usage. Minor formatting.
discard c08556f Remove a condition on test execution which is not needed anymore after upgrade from EPSG 7.9 to 8.8.
discard 4e535d0 Log warnings only once for CommonCRS too.
discard 3cfc852 On failure to get a connection to the EPSG database, log the problem only once before to use the fallback.
discard 9f9c417 Fix our use of boolean type on PostgreSQL.
discard 14b388b Remove a patch which was needed with EPSG 7.9 but is not needed anymore with EPSG 8.8.
discard de6a651 Complete the InstallationScriptProvider support by searching for user-provided instances on the classpath.
discard 2b49cbc Fix a test failure on system without the EPSG database.
discard 0f0b783 Define an InstallationScriptProvider that users can override for specifying where to get the EPSG's SQL scripts. The intend is to allow user to solve the licensing issue as they see fit, and reduce the need for Apache SIS to bundle the SQL script themselves (or at least make a little bit easier for the users to plugin their own copy of the scripts).
discard 7328e94 Cite a developer in pom.xml.
discard ab7ced5 Need to remove "ABS" in "ABS(DEPRECATED)" if the "DEPRECATED" column is of SQL type BOOLEAN.
discard bd54ad4 Replace empty string by NULL value in EPSG database, and use the BOOLEAN type where appropriate.
discard a47ba83 Test EPSG factory on HSQLDB. The test is skipped by default for the reason explained in Javadoc.
discard 9782db8 Update from version 7.9 to version 8.8 of EPSG dataset.
discard 438803a Initial port of the code reformating the EPSG "Data.sql" table in a more compact and efficient way.
discard 3a57c7c Minor post-merge cleanup.
discard 46f38ac More tests of EPSGInstaller. Creation of EPSG database has been successfully tested on Derby and PostgreSQL.
discard 05bafd5 Minor adjustments in EPSGInstaller test and in documentation.
discard 8a6f12a Begin EPSGInstaller tests.
discard 5b60533 More accurate specification of catalog and schema that contain the EPSG tables.
discard 87061b2 Change the way we construct EPSGFactory by specifying a map of properties instead than enumerating the parameters. This give us more freedom for future addition of properties, and avoid the problem of too many parameters for remembering what each argument is for (especially considering that all parameters/properties are optional).
discard 81cb785 Initializer now listens changes in JNDI bindings.
discard ac2d98b Fix dependency versions in NetBeans project properties.
discard 4f2a614 Renamed EPSGDataAccess.parent as 'owner'. Javadoc updates.
discard 291f9de Initial port of the EPSG installer (needs tests).
discard 586dee2 Fix the title in the generated CRS page.
discard c4b2843 Fix the reporting of deprecated CRS definitions.
discard afdc6f6 Group together the classes that generate HTML reports for the web site.
discard 3f43aad Fix link to CSS file.
discard 67b1f30 Report version of EPSG database in the "about" command.
discard 6552cc1 More accurate detection of if a JNDI context is available.
discard 11ee233 Fix a wrong parameter name compared to EPSG database.
discard 9c8ef1a The RecordSchema used for reporting operation accuracy needs to be serializable.
discard 94b5470 Fix a NullPointerException (found during execution of Geotk tests).
discard d001f51 Add tests.
discard f449123 Add an optional 'authority' parameter to CRS.getAuthorityFactory and IdentifiedObjects.newFinder.
discard 073ecb4 Log a warning when no factory is available specifically for the requested version.
discard 4418051 Minor tuning and add more tests.
discard 8d3d7b1 Implement IdentifiedObjects.lookup(...) methods.
discard 31fa6ce Implement MultiAuthoritiesFactory.createFromCoordinateReferenceSystemCodes(String,String).
discard 65ca741 CommonCRS uses the real EPSG database when available.
discard 137657b CRS.forCode(String) now delegate to MultiAuthoritiesFactory.
discard dd9454a Implement MultiAuthoritiesFactory.newIdentifiedObjectFinder().
discard 5d5e980 Implement the MultiAuthorityFactories.getAuthorityCodes(Class) method.
discard 9dc58da Prepare for implementation of MultiAuthoritiesFactory.getAuthorityCodes(): reduce the amount of code during which a synchronization lock is hold, and delegate part of this synchronization mechanism to a custom iterator.
discard 64dc060 Consolidation of our way to handle authority, codespace and code. The success metric for this commit is when the WKT formatter can write "urn:ogc:def:crs:OGC:1.3:CRS84" correctly.
discard f205782 Yet another attempt to clarify our use of "authority" versus "codespace" and where the "version" apply. In particular, our javadoc for "version" was unclear about whether it is the code version or the namespace version.
discard 809083e Add support for codes like "http://www.opengis.net/def/crs/epsg/0/4326".
discard 6e477f1 Add test for codes in the "http://www.opengis.net/gml/srs/" namespace.
discard bded1f5 More tests for MultiAuthoritiesFactory.
discard 1a5f9f2 Add tests for MultiAuthoritiesFactory.createFoo("AUTHORITY:CODE").
discard 961e2e9 Minor documentation and style fixes.
discard fa0ca7a Refactoring of tests only: move the mocks in the "right" packages for the interface that they implement, except a few mocks that could not be moved because they need to be defined before the modules that would normally have defined them. The intend is to make easier to find what is available in a package to test, including most mocks related to that package.
discard fe79c79 Initial implementation of createFoo(String) methods in MultiAuthoritiesFactory. Opportunist javadoc fixes in ConcurrentAuthorityFactory and GeodeticAuthorityFactory.
discard 84ba387 Partial work on MultiAuthoritiesFactory: contains the private methods needed for creating objects, not yet tested and not yet connected to public API.
discard 77d79c8 Bug fix: missing units when formatting axes of three-dimensional GeographicCRS in WKT.
discard cd6e440 Fix wrong EPSG codes for Geographic3D and Geocentric CRS.
discard 273d303 Minor bug fixes identified as a result of the merge.
discard 134ba3f Apply SVN properties before branch merge. There is no code change in this commit. The apparent changes are only the result of "svn:eol-style" property fixing the "end of line" characters.
discard 3fb4ba7 Add documentation and tests.
discard 9f4f818 Support the way units were specified in the legacy "AUTO" namespace (by EPSG codes instead than multiplication factor).
discard 2426abc Do not use NameFactory anymore for parsing the "AUTHORITY:CODE" value, in order to avoid the synchronization and cache cost of the factory. This also make the API more consistent.
discard 02ea051 Add documentation about Universal Transverse Mercator (UTM) zones.
discard 929287d Complete the support of ProjectedCRS codes in the "AUTO2" namespace. The support of codes in the "AUTO" namespace is not yet complete, as it is missing the parsing of units as EPSG code.
discard 1d1b544 Cleanup and add test for CommonCRS.UTM(latitude, longitude). This method will be needed for AUTO:42001 and AUTO:42002 codes.
discard 8df528d Begin support of authority codes in the "AUTO2" namespace.
discard b682c73 EPSGDataAccess.getAuthorityCodes() should exclude the code of deprecated objects.
discard 8b09131 Fix a NullPointerException that occurred when constructing a DerivedCRS from a MathTransform. The NullPointerException occurred when asking for the targetCRS.getDatum() because the targetCRS construction is not yet completed at DefaultConversion construction time (cyclic references). The fix is to use only the CoordinateSystem and ignore the datum, which is not needed anyway when the MathTransform is already available.
discard 124306a Add test for EPSGFactory.getAuthorityCodes(Class). Since this is a potentially costly test, add a TestCase.RUN_EXTENSIVE_TESTS flag. Opportunstically renamed two other internal constants.
discard daa002f More lenient lookup of CRS by their name.
discard 768231d Remove the trailing line separator in the warning emitted by the WKT parser. This is for consistency with other log messages.
discard bf626e0 Take the supersession table in account for ordering the object to create.
discard eacc37e Less verbose logging messages in IdentifiedObjectSet.
discard 113b126 IdentifiedObjectFinder.find(...) of a ProjectedCRS should be able to ignore axis order of the base CRS. This feature implies the addition of a new ComparisonMode.ALLOW_VARIANT, which tell to ignore axes in CRS comparison. Special care is needed for the comparison of CoordinateOperation objects, since the MathTransform to be compared need adjustement in axis order and units are not the same.
discard 54c9121 Test and debug IdentifiedObjectFinder for ProjectedCRS.
discard 9f513cb Test and debug IdentifiedObjectFinder for EPSG dataset.
discard afc985e Log the slow operations (more than 10 milliseconds). Tests consolidation.
discard 26cdbe8 Consolidation in the way FileParameter are handled.
discard eea61b6 Added more tests and fixed bugs identified by those tests.
discard 20fd70c Improve the caching done by ConcurrentAuthorityFactory: if a specialized method delegates to a more generic one (e.g. if createGeographicCRS(String) delegates to createCoordinateReferenceSystem(String)), check the cache for the type of objects of the more generic method. This avoid creating the same object twice if the two different methods are invoked.
discard 1999a0d Bug fix: creation of ProjectedCRS or DerivedCRS shall not modify the parameter values of defining conversion. The reason is that the same defining conversion can be used by more than one CRS, with different source and target ellipsoids. To protect defining conversion against changes, this commit add an UnmodifiableParameterValueGroup class.
discard 6c34e04 Control the location where 'derby.log' file is written.
discard a0ade9b Detect sooner (at EPSGFactory construction time) when no EPSG database is available.
discard 5b254b7 Bug fixes and first GIGS tests for EPSG factory.
discard e957df4 Make javadoc and field names consistent with the renaming of "backing store" as "data access". Also make the 'close()' method to just close the JDBC connections, not to clear caches.
discard f17b46f Renamed createBackingStore() as newDataAccess(). The "DataAccess" part is for matching the name used in DAO. The "new" prefix instead of "create" is for differentiating this method from all the other 'create' methods inherited from GeodeticAuthorityFactory, which perform a very different task.
discard 1b31e8c Documentation fixes.
discard 1c69da4 Renamed SQLAdapter as SQLTranslator, taking inspiration from existing projects on the web.
discard a34cc0b Initial port of the code in charge of adapting SQL statements from the MS-Access syntax (the original distribution format of EPSG dataset) to the syntax used in the Data Description Language (DDL) scripts provided by EPSG.
discard 13af249 Attempt to simplify EPSGDataAccess: - Abandon the possibility to use EPSGDataAccess alone (without EPSGFactory as a parent). - Abandon the EPSGDataAccess.createObject(String) optimization (this method should be avoided anyway). - Merge the calls to trimAuthority, prepareStatement and executeQuery into a single call. As a side-effect, this allow us to use only one try ... catch block in methods where two blocks were needed.
discard cec5dc7 Renamed EPSGFactory to EPSGDataAccess for making clearer that it acts as a Data Access Object (DAO). Renamed EPSGDataset as EPSGFactory.
discard 04b64d6 First draft of an EPSGDataset which get the connection to the EPSG database from a DataSource.
discard 4eab3c8 Port EPSGFactory.createIdentifiedObjectFinder(Class).
discard 2a66e45 Port of EPSGFactory.createFromCoordinateReferenceSystemCodes(String, String).
discard 9f7c6c0 Initial port of EPSGFactory.createCoordinateOperation(String) method.
discard 3f1fa15 Javadoc: - Use the EPSG::#### syntax instead of EPSG:#### - Add EPSG codes for Extent and CoordinateSystemAxis - Add @see tags in geodetic object contructors - Fix broken Javadoc for Units#valueOfEPSG(int)
discard 746d948 Javadoc only (no code change).
discard 33c5763 Port EPSGFactory.createCoordinateReferenceSystem(String). Partial port of map projection parameters.
discard 332f58c Removed the support for time-dependent Bursa-Wolf parameters when used through the deprecated TOWGS84 element, because that legacy WKT 1 element is not designed for those time-dependent parameters anyway. Time-dependent Bursa-Wolf parameters will be supported, but only through the non-deprecated coordinate operation methods.
discard 81d7f47 Port EPSGFactory.createDatum(String). Simplify EPSGFactory.createBursaWolfParameters(...) by targeting only a hard-coded list of datum (for now WGS84). This is okay since that method was for constructing the TOWGS84 element in WKT 1 format, and TOWGS84 is now deprecated as of WKT 2 (ISO 19162).
discard 83a3c23 Initial port of EPSGFactory.createBursaWolfParameters(code).
discard a247880 Reordered private methods in EPSGFactory and ported 2 more private methods.
discard 9775cda Ported EPSGFactory.createCoordinateSystem(String) method.
discard 9a4051f Provide more information in the "SIS about" command: - The remote server where the information came from. - The logging level for loggers used by SIS.
discard 3d3713e Provide a shutdown hook for ConcurrentAuthorityFactory to be executed either when garbage collected, at JVM shutdown time or when the OSGi or Servlet container uninstall the bundle.
discard d0a9b69 First real geodetic methods in EPSGFactory: createEllipsoid and createPrimeMeridian.
discard 06d00fa Reorder the EPSGFactory methods in order to keep related methods closer to each other. Log a warning when a deprecated code is requested and provide information about the replacement. Give control on the locale to use for error messages.
discard 70a0cf4 Moved DeprecatedName and DeprecatedCode in internal package so we can reuse them in EPSGFactory. Opportunistic trivial reformatting of "//" comments (inserting more space between code and comment).
discard 2e58c7d Revisit the policy about AuthorityCodes disposal of JDBC resources. Port more EPSGFactory methods.
discard db18b0d Begin the port of EPSGFactory.
discard 4c3082b Consolidation of DatumShiftTransform.
discard ea5c64d Rename InterpolatedGeocentricTransform as InterpolatedMolodenskyTransform, and rewrite InterpolatedGeocentricTransform on top of real geographic/geocentric conversions.
discard cf49db6 CommonAuthorityFactory.getAuthorityCodes(Class) can filter according the given type. Improved some javadoc.
discard 6571bc6 Add tests for IdentifiedObjectFinder.
discard e5d797f Add test case for AuthorityFactoryProxy.
discard 5fc2ad5 Port authority factory for CRS:84, CRS:83 and CRS:27 Add support of CRS:1 and CRS:88 (NAVD88).
discard 3b1cb67 Fix javadoc warnings.
discard 566d379 Removed the getBackingStoreDescription() method. Instead, suggest a location in the citation returned by getAuthority().
discard a6ae94a Port more tests.
discard f101e5f "sis about" command on a distant machine should report to user the warnings, if any.
discard b4331c6 Add hyphenation support to Javadoc doclet.
discard 814bb4c Renamed CachedAuthorityFactory as ConcurrentAuthorityFactory.
discard ccbbc65 Retrofit 'ThreadedAuthorityFactory' (from Geotk) into CachedAuthorityFactory.
discard 9a83735 Initial port of CachingAuthorityFactory - still incomplete. We commit this incomplete class before to retrofit ThreadedAuthorityFactory into CachingAuthorityFactory in case we want to re-separate those classes in the future.
discard de783a7 Add @see javadoc annotations.
discard 161d4bf SIS-305 : Shapefile reader should be able to use .SHX (shapefile index) Shapefile receives a new method : shp.find(String sqlStatment);
discard de2117f Base class of authority factories.
discard 29c9d48 Port the TransformSeparator class. Fix a subtle bug in AbstractLinearTransform.equals(Object).
discard 8a7e3ac Add missing parameter types and remove unneeded IOException.
discard 917e002 LinearTransform.inverse() should return an instance of LinearTransform.
discard 95212ab Use the SIS_DATA environment variable for the directory where to search for datum grid files.
discard c17b509 Fix erroneous example in documentation.
discard 532af65 Add the two-dimensional case of InterpolatedTransform.
discard 9566b2a Add support for NADCON datum shift grid files.
discard 9bc9ee7 Add InterpolatedTransform class and support for NTv2 datum shift grids.
discard 46e3699 Redesign DatumShiftGrid API in an attempt to make it safer: - Unit of measurement are explicitely declared. - Input units are no longer required to be radians. - Separated the interpolation method in two methods: 1) one expecting "real world" coordinate (only a convenience method which delegate to the method below), 2) one expecting a coordinate in grid units. This is the method really used by InterpolatedGeocentricTransform.
discard 50ada30 Reorder the files to be ignored and add some ide-project subdirectories to the list of files to ignore.
discard 0644b99 Renamed the GR3DF97A.txt test file as GR3DF-extract.txt for making clear that it contains only a small subset of the data (less than 0.14%). Minor rewriting of bilinear interpolation code in DatumShiftGrid for reducing the amount of multiplications.
discard 9f6712b Complete FranceGeocentricInterpolation support:
discard d7ec6d9 Add more tests, especially comparing Molodensky with Geocentric translations. Molodensky method is an approximation of Geocentric translations and we want to quantify better how good the approximation is.
discard 94c4e27 Bug : Removal of bytes values lower than space at the end of the string must be made considering byte value as unsigned.
discard 111b401 Initial support of inverse of InterpolatedGeocentricTransform. This inverse operation require an iterative process during the coordinate transformation. For now, we iterate only once as suggested in the NTG_88 document.
discard 31604ea Express the DatumShiftGrids envelopes in radians instead than degrees. Since those grids are "low level" objects, majority of users will not handle them directly.
discard afe3377 Implement InterpolatedGeocentricTransform.equals(Object). This implies implementing DatumShiftGrid.equals(Object) too.
discard 273e4c5 More rigorous checks in situations where an ellipsoidal coordinate system (EllipsoidalCS) is involved:
discard 39998ac Fix inconsistencies between the parameter descriptors and the parameter values set by InterpolatedGeocentricTransform. This fixes exceptions thrown during 'toString()' or 'toWKT()'.
discard 0fd55ba Removal of DEPARTEMENT shape and DBase files.
discard 6740c58 Apply the France-specific TX, TY, TZ geocentric translation terms only if we detect that the datum grid shift file is "GR3DF97A".
discard d2e75ae Move the tests that perform a coordinate transformation into the 'transform' package.
discard 119edfa Fix DatumShiftGridCompressed creation and add more tests.
discard 4dbff65 - Bug : DBase III reader was reading all the records of a DBF, except for the very last. - Shapefile constructor will attempt to respect the same case than ".shp", ".SHP", ".Shp", to deduct a ".dbf", ".DBF", ".Dbf" file associated. - New constructor added to Shapefile to give the ability to design another DBase file with the Shape file than the one the first constructor would deduct.
discard 91598fe Move the FranceGeocentricInterpolation.Grid implementation in a new DatumShiftGridFile class in anticipation for NADCON and NTv2 datum shift grid files support.
discard 682077b Rearrange the Molodensky parameters in a way more consistent with other transforms.
discard 51fa525 Extent the "France geocentric interpolation" in order to allow support for other regions than France (unfinished work). This force us to declare non-EPSG parameters because EPSG defined this transformation only for France. We keep the parameters close to the Molodensky ones (including the OGC parameters) with (TX, TY, TZ) replaced by the grid file.
discard d2b1e51 Remove the flexibility on the number of dimension of 'derivative(DirectPosition)' where is was not needed (MolodenskyTransform). Keep that flexibility only where it was really needed (EllipsoidToGeocentricTransform) and add a comment explaining why that flexibility is needed in that particular transform.
discard 16eef1d Initial implementation of InterpolatedGeocentricTransform (forward transformation only; the inverse transformation will require an iterative approach as documented in NTG_88).
discard d08a208 Support conversion of File, URL or URI to java.nio.Path in ParameterValue.setValue(Object).
discard 9035b2f Added a test case for FranceGeocentricInterpolation.
discard fe69517 Minor documentation fixes.
discard 2f7e71c Moved part of Molodensky formulas in new super-class. The intend is to share the formula with InterpolatedGeocentricTransform.
discard 6e9d196 Move DatumShiftGrid into the datum package and make it public, which remove the need for the CoordinateOffsets interface.
discard 83fb0f4 Partial work toward datum shifts based on grid files (NADCON, NTv2, RGF93).
discard 721ee5c Safer checks against integer overflows.
discard 45d4812 Take in account the way EPSG handles axes of opposite directions in the "Vertical Offset" operation method.
discard c65af70 Modify the DefaultMathTransformFactory API in a way that allow us to infer more accurately which of the "semi_major", "semi_minor", "src_semi_major", "src_semi_minor", "tgt_semi_major" and "tgt_semi_minor" parameters should have their values inferred from the source and target geodetic datum. We do that by introducing a new Context argument, overload the 'createParameterizedTransform(...)' method with a new version expecting that Context argument and deprecating the old one.
discard f88c872 Add "Vertical Offset" (EPSG:9616) operation method.
discard 36413b6 Replace some HTML formatting by Unicode characters.
discard b606e11 Added "Geographic offsets" operation methods.
discard 1eeca46 ShapefileDescriptor lacked the getters to get its useful values.
discard 1b7d8ab Provide link to SIS tasks and remove a method not needed anymore.
discard edc1db4 GeocentricAffineBetweenGeographic now create the Geographic/Geocentric steps directly instead than through the MathTransformFactory, for efficiency and also for robustness since the GeocentricTranslation and other operations created here are designed for working with the SIS implementation of Geographic/Geocentric conversions.
discard 32d79f0 Add a TargetType enum in the EllipsoidToCentricTransform API in anticipation for the support of the spherical case. For now we support only the Cartesian case, but we make the API ready for addition of other coordinate systems later.
discard ec04adf Renamed EllipsoidalToCartesianTransform as EllipsoidToCentricTransform in order to keep room for conversions to spherical CS in addition to Cartesian CS (most of the class is identical; the spherical case could be handle with a small "if" condition). This change also make the class name closer to the OGC operation name, which is "Ellipsoid_to_geocentric".
discard a93104c Avoid the use of the non-standard "DIMENSION" parameters in "Geographic/Geocentric conversions". This force us to improve the concatenation of EllipsoidToCartesianTransform with affine transforms in order to detect if an affine transform is actually a "Geographic 3D to 2D" conversion or conversely. As a side effect, we had to refactor the 'removeRows' and 'removeColumns' matrix operations in order to preserve the double-double precision when it exists.
discard 2c0ebce Bug fix in formatting of "INVERSE_MT[...]": in some cases we concatenated a matrix which was not supposed to be there.
discard 7f96275 Format "Geographic/Geocentric conversion" in the two-dimensional case as a concatenation with the "Geographic 3D/2D" conversion. This is at WKT formatting time only - the objects in memory are different (they are matrices). Opportunistically fix indentation of first element in CONCAT_MT[...].
discard ee1560c Shapefile Features type, descriptor and database fields descriptors are avaiable in the Shapefile object by calling the methods : public DefaultFeatureType getFeaturesType(); public ShapefileDescriptor getShapefileDescriptor(); public List<DBase3FieldDescriptor> getDatabaseFieldsDescriptors();
discard 7333467 Automatic update of NetBeans project configuration.
discard f4f18d9 SIS-260: Implemented the "Geographic 3D to 2D conversions" (EPSG:9659) While this operation is in principle very trivial (just drop the last ordinate value), a difficulty is to ensure that the inverse of that operation set the ellipsoidal height to zero instead of NaN. Since this operation is often just before or after a "degrees to radians" conversions, those two steps have been put together in a new ScaleTransform package-private class as an optimization of ProjectiveT [...]
discard 0cc6efa Simplify the MathTransform WKT in Convention.INTERNAL mode by omitting the unit of measurement if equals to the default unit. This make the debugging WKT much less verbose.
discard ce64475 Replace "excentricity" spelling by "eccentricity".
discard f05ef46 Added tests.
discard 24d3bc9 Try to make the test pass under Windows style of EOL.
discard 7da3fc6 Update in NetBeans project configuration (generated automatically by NetBeans 8.1).
discard a902f1e Developer-guide generator: allow word break in some <code>...</code> expressions, and add some keywords to recognize.
discard 90ce9a0 Multiple calls are made to Polygon.startPath() when a polygon has multiple parts.
discard 7cfcffe Enable Pattern.MULTILINE as an attempt to address end-of-line style issue (Windows versus Unix).
discard 1c4d174 Load multiple parts polygon from shapefile.
discard c8a6e10 Fix wrong French resources for the developer guide.
discard d58e8d8 Added more tests.
discard 9ffa23d Fixed a wrong condition about the FeatureType that can be associated in a Feature object.
discard 647f928 Initial port of the Molodensky derivative formulas.
discard 9d4fef6 Replace the bitmask by straightforward booleans.
discard 6bcf675 Initial support of Molodensky.inverse(), getParameterDescriptor(), getParameterValues() and WKT.
discard 1888fed Minor simplifications: - Molodensky.optional checks for null values instead than catching IllegalStateException. - ContextualParameters does not cache anymore the inverse matrices. Instead we keep a reference to ContextualParameters for the inverse operation and rely on its own caching.
discard 9137140 Rollback the attempt to do too much analysis of unit of measurement in Molodensky. The OGC 01-009 specification said explictly that heights are in metres anyway. In MolodenskyTransform, fix the documentation about units of measurements.
discard 4dc0bfc EllipsoidalToCartesianTransform and MolodenskyTransform force usage of static factory methods (not anymore just convenience methods). Added MolodenskyTransform2D (part of the reason why we need to force usage of static factory methods). Moved documentation about units of measurement in the appropriate contructor or factory method. Complete implementation of Molodensky provider.
discard 84856ed Refactor of MolodenskyTransform using a little bit more of services provided by DefaultEllipsoid.
discard 854ad71 Try to share existing instances.
discard 8cb23e8 Add convenience method for computing the difference between flattening factors.
discard 51a9526 Provide default Parameters.toString() implementation.
discard b618cbe Suppress some compiler warnings and minor formatting.
discard f5fb060 Partial implementation of Molodensky transform. This still a work in progress, but there is enough for running some tests.
discard 9333941 Fix a javadoc warning.
discard 1ae4891 Reorganize test order.
discard e7048c4 Add registration of (Abridged) Molodensky operation method.
discard 13aeef7 Fixed code formatting inconsistencies. This commit contains mostly changes in amount of spaces - there is no significant code change.
discard 83237ef Reorganize the providers for operations performing datum change (internal SIS classes only). The operations that operate in the geographic domain and moved as subclasses of GeocentricAffineBetweenGeographic. Molodensky operations are defined as subclasses of GeocentricAffineBetweenGeographic because they are approximation of the "Geocentric translations (geographic domain)" operation.
discard e425b7a Fix a misplaced closing bracket in the documented Well Known Text (WKT).
discard 6460ed1 Revised charset management on Dbase files. Querying data will allow no charset defined in Dbase file and then default to the system one, with a warning.
discard 6f56ea9 Added a test for PositionVector7Param and documentation.
discard 170e108 Well Known Text (WKT) formatting of datum shift operations.
discard e3d770f Fix WKT formatting of "Geocentric_To_Ellipsoidal" transform.
discard 92cac45 EllipsoidalToCartesianTransform.Inverse.derivative(DirectPosition) implemented in a way which, indirectly, invoke a method that the user can override. The intend is to keep consistency with other methods that the user can override.
discard 141a8b5 Documentation and added serialization test.
discard 45c9a4b A little bit of uniformisation in the loops for iterative methods.
discard 80b92f2 1) Override a wrong charset defined in a DBase file Passing the property record_charset=<a charset> on Driver.connect(url, Properties) function, allows to override a wrong charset defined in a DBase file, or set one when they are none.
discard 071250e Added test for the derivative of Geographic/Geocentric conversion, with bug fix in the two-dimensional geographic case.
discard fbe9521 Complete the implementation of Position Vector Transformation and Coordinate Frame Rotation in the geographic domain.
discard fa68844 Initial implementation of the Geocentric to Geographic conversion.
discard f0fcb5b Initial port of Geographic to Geocentric conversion (SIS-257).
discard 7af725d Abandon the approach consisting in using a special ProjectiveTransform subclass for geocentric translation. The intend was to allow formatting of Bursa-Wolf parameters instead than affine coefficients in Well-Known Text (WKT). Instead, we will try to achieve the same goal by overriding the 'beforeFormat' method. The reason is that we already have various affine transform implementations depending on the affine case, and more may be added in future versions. The Geocentri [...]
discard 71e9f55 Since ProjectiveTransform is not a public class, make final the methods that we do not intend to override.
discard 5f0d9de Slightly more robust check for inverse transforms of linear operations.
discard 25f12bd Added UML annotation for allowing SIS to pickup the right name in XML documents.
discard e1737e9 Fix EPSG codes for operations in the geocentric domain (used by GeocentricAffineTransform).
discard 589e566 Initial port of geocentric affine operations. The EPSG codes are not right (we should use the code for the geocentric domain instead) - we will fix them in the next commit.
discard 891f913 Minor documentation fixes.
discard 7374712 Use @XmlElementRef for RS_Identifier as well.
discard 05fc102 Renamed the "CodeListProxy" internal class as "CodeListUID" (for "Unique Identifier") in order to better reflect its purpose.
discard 3e41f14 Allow substitution of <gco:CharacterString> by CodeList as (un)marshalling time (SIS-124).
discard 235664e GeoAPI interface "Enumerated" has been renamed "ControlledVocabulary".
discard 7803665 Dependency update.
discard 24c829f Minor documentation and a bug fix.
discard 79e3b4c Added tests.
discard 95b111f Allow ObliqueStereographic to delegate to PolarStereographic when the latitude of origin is a pole. Register the ObliqueStereographic projection on the list of supported projections.
discard d21e5cf Simplification of some ObliqueStereographic equations. Attempt to provide more uniformity in projection code formatting.
discard 8ec1da8 Projection : ObliqueStereographic, update tolerance for spherical and geodetic mathematical formulas comparison tests
discard cc5acc6 Rearrange oblique stereographic tests for more uniformity with other tests.
discard 8f0cc42 Projection : Add ObliqueStereographic spherical case and relative tests
discard 94c151a Allow user to override the properties to be marshalled, and do some verification on the integrity of unmarshalled CRS objects (SIS-295).
discard ead162e Clarification on the use of Names at (un)marshalling time.
discard 60c683f Add paths to XSD where the XML definitions of referencing objects come from.
discard 3075245 Minor formatting (no code change).
discard 3fe1d36 Projection : update serialVersionUID of ObliqueStereographic
discard 6f44ed0 Projection : fix unexpected javadoc tag
discard c85aef9 Fix the order of XML elements in MD_Identifier and RS_Identifier (SIS-301).
discard 9907e63 Projection : Add ObliqueStereographic projection and relative tests
discard bac6156 Projection : add Radius Conformal Sphere computing into Initializer class and add relative test
discard eda86ed Update a version number tht we forgot to update in a commit done last month.
discard a30384f Add GML support for PassThroughOperation.
discard 3b8fdaf More documentation explaining the reason for the (object instanceof DefaultGeodeticCRS) check (side-effect of the work on ConcatenatedOperation GML support).
discard 1ee5020 More tests for ConcatenatedOperation GML marshalling.
discard d878eb6 Opportunistically exploit the fact that we had to remove the 'final' keyword on some fields (required for JAXB unmarshalling) for simplifying constructors of various CoordinateOperation subtypes.
discard 45af071 Identifier shall not be marshalled in "urn:ogc:" namespace if the authority is not one of the authorities recognized by OGC.
discard f211479 Renamed OperationMarshallingTest as SingleOperationMarshallingTest since ConcatenatedOperation has its own marshalling test.
discard 2df7670 Add GML support for DefaultConcatenatedOperation (SIS-292).
discard b9ba761 Relax the restriction on use of '_' in resource keys.
discard df3ebf1 Test also gml:id values.
discard d35fb15 Tests also ProjectedCRS marshalling (after unmarshalling).
discard 1bb68a9 Complete GML support for CompoundCRS (SIS-159).
discard cce84bd Initial support of GML for DerivedCRS (SIS-294).
discard bf28be9 Add path to GMD schema.
discard 575cf7f Removed files from the old day when we where generating a Maven web site. Those files were obsolete because not maintained.
discard fe3157e Jetty 9 use a different way to specify the port than what Jetty 8 did.
discard 7ff0527 Avoid a random test failure.
discard 0ff60cd Upgrated the Jetty plugin (SIS-111), but we had to change a little bit its configuration. https://www.eclipse.org/jetty/documentation/9.3.0.v20150612/jetty-maven-plugin.html
discard e7a2c8b Revert the removal of build configuration for the Mojo. It seems to be required by the build on Jenkins server.
discard 997dbeb Updated some dependencies.
discard 38b5de7 Tests suggest that we do not need explicit declaration of maven-plugin-plugin.
discard 8976e57 Replace javadoc annotations by Java annotations in Mojo (SIS-75).
discard d7361c3 Add some missing @XmlSchemaType annotations (SIS-286).
discard 909ca56 Emit a warning of no object is found for a xlink:href. Add some documentation.
discard a0e0bca Avoid ambiguity in a local variable name.
discard c4a05e2 Support xlink:href="#foo" in ISO 19139 documents too.
discard 60fb929 Fix some javadoc warnings.
discard 89b3018 Check also in the list of aliases for inferring a gml:id. Give precedence of gml:id over uuid or other xlink.
discard c7553ba Take advantage of xlink:href in some test files.
discard a7f019c Fixed a NullPointerException when viewing a RecordType which has been read from a GML document.
discard 69e929a Initial support of xlink:href referencing gml:id (SIS-173).
discard 5d35b00 Ensure that gml:id in all AbstractIdentifiedObject subtypes are unique in a XML document.
discard dbac416 Remove a OtherLocales method which was duplicated in CollectionsExt.
discard b281f24 Allow DefaultRepresentativeFraction to be immutable (SIS-107).
discard 4453e5a Refactor the IdentifierMap internal implementations in order to allow construction of unmodifiable map (SIS-107).
discard f2ee4f9 Partial fix of holes in metadata immutability (SIS-107).
discard dafe387 Close SIS-81 as "will not fix". This commit contains documentation changes only.
discard 3c93d53 Refactor TransverseMercator as a ConformalProjection subclass.
discard 73b4938 Minor formatting and javadoc (no significant code change).
discard 5125765 Factor out some more constants (only when rewriting the equations with trigonometric identities) using the same technic than the one we used for Lambert Conic Conformal. Actually the saving of a few multiplications is probably unnoticeable, but the main intend is rather to see some more symmetry emerging from the formulas, which is often a good sign in map projection implementations.
discard 11fa98e Tune the application of trigonometric identities in map projections.
discard 8d411b0 Documentation and variable name fixes (no significant code change in this commit).
discard 6219ade Fix a NullPointerException.
discard 86c5b26 More conservative way to search for an OperationMethod alias: search in the ParameterDescriptorGroup associated to the enclosing object. At least that descriptor has some association (even if indirectly) with the OperationMethod being formatted, as opposed to the previous approach which was searching unconditionally in the hard-coded system-wide aliases.
discard db923a4 Javadoc update, and deprecate a convenience method which is not worth its weight.
discard c8f8e8a Rename the file containing the list of identifiers.
discard 33cae9a Simplify a little bit the developer guide source files by removing the "class" attribute of many (but not all) <code> elements. Those <code class="..."> attribute values are now inferred from a list of known identifiers when building the guide.
discard 0731040 Initial list of OGC/ISO and GeoAPI identifiers to recognize when formatting the developer guide.
discard c2ae3b6 Put comments in light gray and quoted strings in italic.
discard a6e204e Begin replacing manuar code colorization by an automatic one (for now just applied on Java keywords). After completion of this tools for the developer guide, we may use the same tool for javadoc too.
discard 94e604c Added documentation.
discard f921eb7 Localization.
discard 8fa157d Addition of per-chapter table of content.
discard 6f11e93 Use a separated exception for problems related to the content of the files used for building the book (e.g. missing identifier for a chapter).
discard a838525 Add links to previous and next chapters.
discard f6e175f Move CoordinateOperationMethods.html from 'content' directory to 'book/tables' directory.
discard a92c030 Added section numbering.
discard 35c590f Use a little bit more of HTML5 semantic tags in <aside> elements. The <aside> elements that could have been published in separated pages are replaced by <article> elements.
discard a756559 Ported the developer guide GeoAPI section.
discard ab8a9c8 Minor formatting in HTML output.
discard cd769ec Generate table of content.
discard 737dd9b Starting the helper tools for building the developer guide.
discard d4d357a WKT formatting: try harder to use the name of the requested authority when formatting an OperationMethod.
discard d95267a Bug fix: do not cache empty ranges.
discard cbd7a74 Post-release cleanup: remove some deprecated methods.
discard 3e55293 Upgrade version number to 0.7-SNAPSHOT for the next development cycle.
discard 43c396c Port fixes from the SIS-0.6 branch.
discard 053e068 Minor reformating, and apply the same identities to inverse transform.
discard b803aae Refactor Trigonometric identities formulas.
discard ae4724e Bug fix: unmarshalling of Enum value was lost if the name contains more than one word (SIS-297).
discard bbab4ad Minor documentation fix.
discard 5748185 Fix an accuracy problem identified by the test added in the previous commit. As a side effect of this fix, the internal AffineTransform2D class can no longer be mutable.
discard d19daea Added a test for the "South-Orientated" case.
discard 2a2e5d5 Add WKT test for Transverse Mercator.
discard 9dfc710 Register TransverseMercator provider for use with java.util.ServiceLoader and enable ignored tests.
discard e7e2115 Added the spherical implementation of TransverseMercator projection.
discard d7fdb0e Update code formatting for derivative projection implementation.
discard f0db96f Use trigonometric identities and factor some common terms.
discard f925f5c First draft of a derivative function, not yet simplified.
discard ca869ee Updated the list of coordinate operation methods.
discard e000836 API simplification: remove the public 'addDeprecatedName' and 'addDeprecatedIdentifier' methods. Instead, rely on the 'isDeprecated()' status.
discard 5096933 Minor tweak in syntax coloring for the command-line.
discard 8e0433b Use 'StrictMath' instead than 'Math' in tests.
discard da093ab Allow the command-line to display the CRS in WKT format.
discard 5f1cb56 Change default formatting of Convention.WKT2: follow ISO 19162 recommendations regarding short versus long keywords and usage of upper-case keywords. Users can still congigure WKTFormatter explicitely if they want another formatting style.
discard 40afac6 Added comments and a check against too strong restriction on parameter values.
discard a4d7bc8 Fix a hole in support of <gml:OperationParameter>: take in account that identifiers and aliases are collections when merging two descriptors.
discard 0f11ca0 Update for GeoAPI change (renamed 'assertTitleEquals' as 'assertAnyTitleEquals').
discard b142db5 A little bit more tests.
discard dfedfb5 Test consolidation.
discard 427e296 Initial support of <gml:ProjectedCRS> (un)marshalling.
discard bcae5c5 Safety checks against some NullPointerException.
discard 1d12b54 Complete test files.
discard c8e7c71 More liberal use of afterUnmarshal(Unmarshaller, Object parent) when needed. Experience suggests that the JVM does not load JAXB dependencies as aggressively as we feared.
discard b2a967d More accurate description about where the SIS-166 fix can not be applied, and consolidate the workaround.
discard 73c2dd8 Group together the private methods that are provided only for JAXB support. The intend is to isolate what will need to be removed when porting to Android, or to make easier the task for anyone who decide that he doesn't need XML. As a side effect it makes more visible the cost of supporting this format since we can see the amount of code added in some classes.
discard 0c436ab Clearer separation before the part for Geographic Markup Language (GML) support.
discard 74e1ee1 More straightfoward checks for duplicated property assignations.
discard 4fa28a7 Add test case for ImageCRS WKT and XML formatting.
discard 4d95e1d Replace set of methods annotated with @XmlElement by a single method annotated with @XmlElements. https://issues.apache.org/jira/browse/SIS-166
discard bb853f7 Add links to other JIRA tasks.
discard d7f8d25 Add links to the JIRA task.
discard 02fc184 Reconstruct the MathTransform after <gml:Transformation> unmarshalling.
discard 29c7e1f Add GML (un)marshalling of CoordinateOperation.sourceCRS and targetCRS.
discard f433f03 First draft of a <gml:Transformation> test.
discard efb3ff9 Verify the parameter value in <gml:Conversion> test.
discard d83c00e Add JAXB annotations on DefaultTransformation.
discard 8670709 Add test for <gml:Conversion> unmarshalling.
discard b2257f6 Add a test for CC_OperationMethod. For now, we add this test in CC_OperationParameterGroupTest in order to leverage existing data.
discard 56fda1c Use public class as the source of logging messages.
discard c42df29 Complete CC_OperationParameterGroup test with a case for merge operation.
discard 078cfbe Add test for CC_OperationParameterGroup JAXB adapter.
discard 19d440a Add tests for CC_GeneralOperationParameter.java JAXB adapter.
discard ac6072e Fix incomplete tests: missing 'Assert.fail' statement if the expected exception wasn't thrown.
discard 8e4a39b Consolidation of JAXB annotations on DefaultOperationMethod and parameters: - Delegate more works to JAXB adapter classes. - More effort for merging information provided by duplicated parameter descriptors.
discard acc2575 Add JAXB annotations on DefaultOperationMethod.
discard b99bca2 Fix a warning and a typo.
discard 7c0e694 Add a missing @XmlSchemaType, and trivial formatting.
discard 529a951 Allow reusing an internal convenience method for marshalling InternationalString as localized String.
discard e1eee97 Trivial addition of white line for making the formatting consistent with other XML test files.
discard b09148c Renamed XML test files for making clearer which kind of object we are testing.
discard 81c64f1 Relax the restriction on the type of elements in the CoordinateOperation[] argument given in constructor. This is a consequence of the upgrade from ISO 19111:2003 to ISO 19111:2007 model since PassThroughOperation is no longer a SingleOperation.
discard c2b734f Update for GeoAPI change: CoordinateOperation.getOperations() returns list of CoordinateOperation instead than SingleOperation. This is an upgrade from ISO 19111:2003 model to ISO 19111:2007 model.
discard e394cce Upgrade from ISO 19111:2003 to ISO 19111:2007.
discard 59fbe57 Completed JAXB annotations for <gml:ParameterValueGroup> support.
discard 282049e Partial support of <gml:ParameterValueGroup>. Still missing the handling of the ParameterDescriptorGroup under the <gml:group> element.
discard f015d69 Added JAXB annotation to DefaultParameterDescriptorGroup for <gml:OperationParameterGroup> support.
discard 2141a7c Complete the <gml:ParameterValue> support with the (un)marshalling of the <gml:OperationParameter> element. This is a little bit tricky since the DefaultParameterDescriptor.valueClass property is mandatory in SIS but not part of GML, so we have to infer it from the enclosing <gml:ParameterValue>. Since <gml:OperationParameter> may not be always enclosed in a <gml:ParameterValue> element, we also make the code a little bit more robust to null descriptor and null valueClas [...]
discard fe172e7 Partial JAXB annotations for GML (un)marshalling of DefaultParameterValue (SIS-159).
discard 4f4db48 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3005.
discard 82ff037 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3003 and 3004.
discard 5bef663 Javadoc fixes.
discard f9b36d3 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3002.
discard 709d640 OSGi metadata (SPI FLY)
discard d1b9364 Javadoc adjustment: make group in overview closer to the modules content.
discard 9a82842 Enabled the RedundantImport and GenericWhitespace checkstyle rules.
discard 591974c Enabled the NewlineAtEndOfFile checkstyle rule.
discard 5b023d8 Update depencencies to newer versions.
discard fde0b11 Final adjustement (for now) about where to use double-double arithmetic and where it is not worth.
discard 9343a6a Less missleading error message if the user gives the internal Anchor class in argument to the constructor, and if that object is incomplete.
discard 05be2f2 Minor documentation (no code change).
discard dd67aaf Allow NormalizedProjection constructors to know whether the second defining parameter of the Ellipsoid is the semi-major axis length or the inverse flattening factor, and in the later case allow constructors to get the definitive flattening factor in order to compute the excentricity more accuratly.
discard 9b25ac2 Minor consolidation: factor out the computation of semi-minor axis length and inverse flattening factor, provide some analysis in the comment about the accuracy.
discard bd0e6e1 Partial rollback of the use of double-double arithmetic in map projection initialization. Our usage of double-double arithmetic has proven its value in matrix operations, but has less value in NormalizedProjection subclasses after the point where we use transcendental functions (sine, logarithmic, etc.) because we have no double-double versions of those functions. By reducing double-double arithmetic usage in those cases, we keep the code more readable and avoid to give [...]
discard b1b8103 Fix: sqrt() of 0 was producing NaN.
discard 85f2cd7 Moved the code used for map projection initialisation in a separated Initializer class (package private). Opportunistically use more double-double arithmetic. While the digits modified by this extra-precision are not significant, the intend is not to increase map projection accuracy but rather to improve the result of concatenations of MathTransforms (through an attempt to improve the result of matrix multiplications and inversions).
discard ce59b6b Added comments for readability.
discard c2096b6 Added a Builder(IdentifiedObject) constructor for allowing usage of an existing object as a template.
discard 83ad934 Add a tolerance threshold when checking if a "synthetic" matrix computed during WKT formatting is the identity. Add comments explaining why the tolerance threshold is set to ANGULAR_TOLERANCE for those particular matrices.
discard 1c22fd0 Consolidation of the tolerance threshold when comparing objects: try to use thresholds having a physical meaning: - LINEAR_THRESHOLD (1 cm) when comparing the Ellipsoid axis length, - ANGULAR_THRESHOLD (equivalent to about 1 cm on Earth) when comparing the PrimeMeridian Greenwich longitude, - A threshold computed in a way that describe an error of about 1 cm on Earth when comparing map projection excentricity.
discard f925712 Renamed LambertConformal as LambertConicConformal for compliance with common usage.
discard 7f31777 WKT: Convention.INTERNAL should display the real internal parameters used by a map projection implementation. Those internal parameters are very different than the public parameters, but are sometime needed for debugging.
discard 142997a WKT formatting: merge consecutive synthetic affine transforms.
discard b57a206 WKT formatting: use scientific notation for small or large number, but not at the same threshold than the one used by default in the JDK. The reason is that ellipsoid axis lengths expressed in feet are around 2.1E+7 but are still commonly formatted in non-scientific format.
discard cd6a770 Fix the dependency to the ESRI geometry library in IDE project configuration.
discard 2e79738 Minor rewriting of the case handling with standard parallel in North hemisphere. The intend is to be more consistent with the handling done in other projection classes.
discard 3e38561 Fix an ambiguity when determine the projection variant by checking the OperationMethod name instead than the ParameterValueGroup name.
discard a6f9a8f Bug fix in the computation of scale factor at standard parallel in the North pole case.
discard 8e22c0e Make some fields private when possible, and resole some other warnings.
discard 77179fc Reduce the number of compiler warnings by either resolving the warning, or adding a @SuppressWarnings annotation.
discard 3c29f7c Separate the Stereographic North/South pole cases from variant B. We make this separation because the default values are not the same.
discard a00abd9 Add the Polar Stereographic projections in the list of operation methods known to SIS.
discard 82496f8 Added "Polar Stereographic (variant C)" projection method (EPSG:9830).
discard c5601e4 Added some tests and documentation.
discard 6399168 Remove the comparison between elliptical and spherical formulas from the assertions in the main code. Instead, perform the comparison in the test suite with the help of ProjectionResultComparator. The reason is that performing comparisons in the main code was very difficult because of approximations in formulas (especially when using series expansion), for example in TransverseMercator for points far from the central meridian. This resulted in either assertion failures b [...]
discard 9811a83 Fix the PolarStereographic projection (tests pass). Rearrange Mercator and LambertConformal code in order to have a consistent pattern accross all our projection implementations.
discard 64317cd Moved some formulas related to conformal projections from NormalizedProjection to ConformalProjection. Moved the corresponding test methods too, and updated javadoc.
discard 9595ebc Renamed 'AbstractLambertConformal' as 'ConformalProjection'.
discard d185cbc Added a note about surprising class hierarchy.
discard baf9855 Initial version of PolarStereographic projection, written from the equations in the EPSG guide. Not yet producing the expected result: we have a bug to correct.
discard 64404c6 Modify the symbol used in LambertConformal for consistency with the formulas published in Synder's book and other parts of the EPSG guide. In particular, PolarStereographic use "rho" for a variable which is playing the same role. Fix also some documentation holes.
discard 891f61e Fixed a wrong documentation.
discard 1aeedf5 Initial commit of providers for the Stereographic projection. Missing: - Polar Stereographic (variant C) (EPSG:9830) - actual implementation (to be done in next commits).
discard 10b15c9 Rename the CENTRAL_MERIDIAN constant as LONGITUDE_OF_ORIGIN for better conformance with EPSG wording. Add documentation.
discard 47bde77 Add projection identifiers and fix documentation.
discard e83e612 Added "Transverse Mercator (South Orientated)" operation method.
discard 306f73c Add "TODO" comments for code to complete later.
discard bcfe367 Use trigonometric identities for reducing the amount of calls to Math.sin/cos.
discard c4cc3de Do not project the coordinates if not needed.
discard 1ed27c1 Initial version of a TransverseMercator projection rewritten from scratch. We did not port the Geotk code, both for more legal safety and because the formulas changed anyway. The Geotk version use the USGS formulas, while Geomatics Guidance Note recommends the JHS formulas.
discard 6e7b880 Renamed 'GeneralLambert' as 'AbstractLambertConformal'. There is no code change in this commit other than renaming.
discard 0e59e80 Review Lambert Conic Conformal formulas in light of §1.3.1.1 in IOGP Publication 373-7-2 – Geomatics Guidance Note number 7, part 2 – April 2015.
discard c1d4aab Renamed MercatorAlternative as MercatorMethodComparison and updated documentation.
discard dfa57db Use a threshold for checking when the planet's excentricity is too high for the accuracy of the series expansion. In such case, we will fall back on an iterative method.
discard 7ee3bcb Use the series expansion given by EPSG instead than the iterative formulas. The EPSG approach is twice faster, but less accurate for hight excentricity. In this first approach, we try to keep the best of both world by falling back on the iterative approach if the smallest term of the series expansion is not small enough.
discard 7fa319c More explanation.
discard f4a3686 Analyzed the impact of using the series expansion given by §1.3.3 in Geomatics Guidance Note number 7 part 2 (April 2015) instead of the current iterative method. Our benchmarks show that the series expansion is twice faster than the iterative method for an excentricity relatively small like the Earth's one, but its precision decrease as the excentricity increase. Numbers are in the MercatorAlternative test class.
discard f31ce36 Modification in the sorting order of coordinate operation methods.
discard 5d08f16 Add the "Lambert Conic Conformal (2SP Michigan)" (EPSG:1051) projection method.
discard 6dfc6a1 Modify the way we handle the "West orientated" case, keeping in mind that the "kernel" part of SIS projections used normalized (easting,northing) directions. The reversal of the 'x' axis from "easting" to "westing" is done outside the projection package, by the CoordinateSystems.swapAndScaleAxes(...) method.
discard 7734bfa Add a note about the fact that we currently do not serialize the factories.
discard a4155f0 Fix the code that generate the HTML page that list available projection methods. We need to ignore the "mock" methods created only for testing purpose, and to handle the "Affine" case in a special way.
discard 6682a9f Add "Lambert Conic Conformal (1SP West Orientated)" projection method (EPSG:9826).
discard 5d66411 Maniac precision hunting.
discard 440245f WKTFormat.getFactory(Class) should be consistent with GeodeticObjectParser constructor.
discard 1784e81 Allows to specify the factories to be used at WKT parsing time.
discard aaf5d43 WKT formatting using Convention.INTERNAL should show the axes of base CRS.
discard 37c54ba Include the identifier codes in the WKT of CompoundCRS elements. This is a small departure from ISO 19162 recommendation, but still allowed. The reason is that we often need to decompose a CompoundCRS back to its original components, especiall the horizontal component.
discard 016e890 Consolidation in the use of loggers, especially regarding warnings during XML (un)marshalling.
discard ac4156f Log messages at Level.FINE about Coordinate Reference System creations.
discard 94f40bd Consolidation of loggers: declare the name of the logger that we use in an internal 'Loggers' class. Deprecate the Logging methods that infer the logger name from the package name, because it sometime select a logger too close to implementation details (e.g. "org.apache.sis.internal...").
discard 97dc50d Review the logger used by some messages, and test the warning produced by DefaultMathTransformFactory.
discard 45956d5 Move LoggingWatcher in the sis-utility tests so we can use it in other tests than metadata.
discard d9b317e Allow integration tests to shutdown only after all TestSuites.
discard 4527dc5 Apply to 'ensureInRange' the same fix than 'ensurePositive': accepts arguments identified as GML "nil value".
discard c5af1aa Do not log warning for GML "nil value".
discard 10ab812 Build: report the test cases that produced log records.
discard a2a9745 Clarification in documentation.
discard 1270e9b Diversify WKT parsing tests.
discard e434bcd Javadoc fix.
discard 9e8a8c1 Ported the support of WKT fragments.
discard c7ea900 Log a warning when a WKT can not be fully parsed.
discard c6d0890 Verify conformance of DefaultCompoundCRS to ISO 19162 at WKT formatting time.
discard b6d4bca Apply ISO 19162 recommendation to ignore leading and trailing spaces.
discard 9bd45da "Affine" operation can be both a Conversion or a Transformation, depending on the context in which it is used.
discard 4b7bff5 WKT 2: complete parsing of CoordinateOperation.
discard ffe8263 WKT 2: implement parsing of CoordinateOperation (missing only the call to a factory method).
discard 2d39948 Default axis order is (longitude,latitude) in WKT 1 but (latitude,longitude) in WKT 2.
discard d9388fc WKT 2: more homogene behavior regarding contextual default units.
discard 4c2889e Add a warning about the fact that the WKT format is not lossless.
discard f2f894e WKT 2: add a test about the warning in case of invalid character.
discard 84aba45 WKT 2: add check of character validity.
discard ec0394c Adapt test method for name changes in GeoAPI, and add more tests.
discard ceccafe WKT 2: fix parsing of Derived Engineering CRS from Projected CRS. Add an other mock for running GeoAPI test.
discard b8efcda WKT 2: fixed the parsing of "Derived Engineering CRS from Geodetic CRS base" when the Geodetic CRS is three-dimensional. Added a TopocentricConversionMock for allowing us to run the GeoAPI tests.
discard 6e0ef95 Added tests.
discard 22bdc9d Modified order of test methods for more logical order. No change in the code.
discard 9401b99 Renamed test methods for making clearer which kind of CRS we test.
discard 9021262 Added a test for consistency of parsing/formatting using Convention.WKT2_SIMPLIFIED.
discard ad4e403 WKT 2: added support for Derived Vertical CRS and Derived Temporal CRS parsing.
discard 76e20ff WKT 2: add a mock for the "Pole rotation" operation method. This allow us to execute the GeoAPI test for Derived Geodetic CRS.
discard fbb8c7a Moved some mocks to the sis-utility modules in order to keep them together as much as possible.
discard 108fef2 WKT 2: initial support of Derived Geodetic CRS parsing.
discard f59159f WKT 2: CS types are not quoted text. Also fix the detection of "Mean Sea Level" datum as VerticalDatumType.GEOIDAL.
discard cc3ca20 Add a KeywordCase.LOWER_CASE enum for completness with the UPPER_CASE enum.
discard 2adf1b3 WKT 2: parse ImageCRS.
discard cfc0c46 WKT 2: be careful about sexagesimal units. Convert them to degrees when possible. Note that this is possible for parameters and prime meridian, but not fox axes (and consequently not for the unit that apply to a CoordinateSystem as a whole) because axis units apply to numbers outside the CRS definition.
discard a1577d9 WKT 2: tuned parsing of TimeCRS element.
discard b2ddc02 WKT 2: tuned the parsing of EngineeringCRS.
discard ce9e545 WKT 2: added support for parsing of VerticalCRS element in the WKT 2 syntax.
discard 5cd0bb0 WKT 2: test and fix parsing of ProjectedCRS elements.
discard 35a117a WKT 2: Parser shall ignore Convention.WKT1_COMMON_UNITS and Convention.WKT1_IGNORE_AXIS flags when it detects that the format is WKT 2.
discard 6daf136 Javadoc: minor CSS update.
discard 00f1e39 WKT 2: initial support of "ProjectedCRS" element in the WKT 2 way.
discard b3a525e WKT 2: added documentation and more tests for Geodetic CRS.
discard d813e7b WKT 2: replace all-lower case axis names by camel case axis names when the name is known. Axis names are not really free text. They are specified by ISO 19111 and ISO 19162. SIS does not put restriction on axis names, but we nevertheless try to use a unique name when we recognize it.
discard b08d77e Post-merge cleanup (for avoiding some conflicts in next merge operations).
discard 294a85f Avoid usage of TestCase.NO_FACTORY field, which may become private.
discard 411a06c WKT 2: tests using some WKT examples provided in the OGC specification. We are adding those tests in GeoAPI conformance module. Apache SIS inherits them in the WKTParserTest class.
discard 05c60be WKT 2: initial support of "GeodeticCRS" element. This imply the merge of parsing methods for GeographicCRS and GeocentricCRS into a single method.
discard 21606b3 Bug fix: localization of InternationalString according the value of XML.LOCALE at XML marshalling time.
discard 0e7f668 Ignore PNG files in IDE configuration.
discard f205273 Ignore HTML and TXT files in NetBeans IDE configuration.
discard 700d1c6 More accurate links to WKT 2 specification.
discard a71044a WKT: javadoc.
discard 6953dab Add a link to the ISO 19162 section that this class tries to implement.
discard 9c1d328 WKT: minor javadoc.
discard 7c9e4e6 Minor javadoc formatting.
discard ef56329 WKT: delegate the decision to format Geocentric axis name to the transliterator.
discard 56b6b22 Move AxisDirections internal class from 'sis-referencing' to 'sis-metadata' module for reducing the amount of methods in ReferencingServices internal class.
discard 872babe WKT: use the transliterator for mapping the axis names.
discard 80eb326 WKT: give to user more control on transliteration of axis abbreviation to WKT abbreviation at both formatting and parsing time.
discard 3f44cb9 WKT: Renamed 'CharEncoding' class as 'Transliterator'.
discard 6c674bd WKT 2: complete the parsing of AXIS element as specified in ISO 19162, except for the "BEARING" element which is deferred to a future version.
discard 7e0cb9b WKT 2 parsing: all CRS parsing methods use the parseCoordinateSystem(...) method.
discard 543172d WKT 2: implemented parsing of the CS[...] element, and use it in the easier cases where the expected CoordinateSystem type is known.
discard 2f859de Feature: hashCode() shall be consistent with equals(Object).
discard f055b7b Feature: bug fix in the implementation of Dense/SparseFeature.equals(Object).
discard e60252d Feature: bug fix when the value to format is a collection.
discard 7fcc406 Feature: throw more accurate exceptions.
discard 048058a WKT 2: refactoring of the parser in order to have better control on mandatory and optional elements.
discard f543c86 WKT 2: Unit keyword is inconditionally "TimeUnit" for temporal CRS. This is because temporal CRS did not existed in WKT 1, so ISO 19162 does not make provision for backward compatibility in this case.
discard 8520763 WKT 2: fixed the spelling of "Remark" (without trailing "s") and completed the support of "ID" keyword.
discard b5bf68d WKT 2: support parsing of LengthUnit, AngleUnit, etc. in AXIS[...] components.
discard 547aad3 Added tests for Extents.getVerticalRange(Extent).
discard ca5f208 WKT 2: complete the support of VerticalExtent element.
discard acb190e WKT: warning message include the name of the root element.
discard 81bbf09 Improved javadoc.
discard 15c59f5 Referencing: added a CRS.fromWKT(String) convenience method and fixed some related javadoc.
discard 1110d5e WKT: replaced 'ignoreAxisOrder' boolean flag by Convention.WKT1_IGNORE_AXES enumeration value.
discard aa39ca1 WKT: Moved the Parser interface into the org.apache.sis.io.wkt package.
discard 80f3ba7 WKT: provide information about WKT problems in a dedicated 'Warnings' class instead than a plain String. The intend is to allow users to have programmatic access to the issues during WKT parsing or formatting.
discard 96a3ce9 WKT: report warnings about unknown elements.
discard b357132 WKT: consolidation in the way some metadata are constructed and in the report of warnings.
discard 72e0b38 WKT: document relationship between AbstractIdentifiedObject.isHeuristicMatchForName(String) and section B.5.2 of OGC-12-063r5.
discard 5d698b8 WKT: starting the upgrade of the WKT parser to WKT 2. Add support of AREA, BBOX, VERTICALEXTENT and TIMEEXTENT keywords. The vertical extent still need to create its VerticalCRS.
discard 9d1d2c6 Added a MathTransforms.compound(MathTransform...) convenience method.
discard 43a1528 WKT: GeodeticObjectParser should use the java.text.Format instances provided by WKTFormat.
discard 16c0b00 WKT: conversion of geocentric coordinate system axes between ISO 19111 and legacy OGC 01-009 shall preserve linear units of measurement.
discard 8a4295b WKT: tests verify the TOWGS84 element.
discard e06e042 Documentation: add the (presumed) publication years in reference to ISO 19162 chapter, in case those numbers change in future publications.
discard 338cde9 Referencing: removed the parameter checks in MathTransformFactory.createFromParameterized(...) since it duplicates the check done by the actual MathTransform implementations. The check done in createFromParameterized was not efficient anyway, since it was implemented by a copy of all parameter values in an implementation known to perform some checks.
discard 25aa4e7 WKT: workaround for a JSR-275 bug when formatting DMS units.
discard c45fff8 WKT: fixed handling of linear unit in projection parameters and added tests.
discard cd87316 WKT: fixed the handling of units in PrimeMeridian, and added tests.
discard 5e5f453 WKT: added tests.
discard df6751a WKT: added tests.
discard 26a48e2 WKT parsing: fix wrong axis names when axes were not explicitly specified. Declare the ISO 19111 and ISO 19162 axis names as constants in AxisNames class.
discard d9fa8f7 Referencing: DefaultConversion.getParameterValues() should contains the semi-major and semi-minor axis lengths.
discard 6b99ded WKT parsing: Axes names "Longitude" and "Latitude" should be replaced by "Geodetic longitude" and "Geodetic latitude". This is the converse of the work done by DefaultCoordinateSystemAxis.formatTo(Formatter). Added corresponding tests.
discard 9938dc7 WKT parsing: fix a bug in the handling of abbreviation of "South-South-East" and similar axis directions.
discard a133ca1 WKT parsing: parser should parse axis abbreviation in the name, or infer axis abbreviation by itself when the abbreviation was not specified in the name.
discard 58c95f7 Referencing: removed reflection code which are not needed anymore after the migration of GeodeticObjectParser into the "sis-metadata" module.
discard dcdb991 Bug fix: getUnitReplacement return the unit of the enclosing method, not of the inner method.
discard 2cc9bc2 If an optional module is not found, log a better message at Level.CONFIG. This logging service is factored in an internal 'OptionalDependency' parent class.
discard 91f8b5f OSGi: moved GeodeticObjectParser from "sis-referencing" to "sis-metadata" module. As a result of this move, there is no more "org.geotoolkit.io.wkt" package in "sis-referencing".
discard 66f614d OSGi: removed last direct "sis-referencing" dependencies from GeodeticObjectParser, and oppostunistically reorganized method declaration orders in ReferencingServices.
discard f7e1c77 Fixed a NullPointerException when a citation constant is built during XML serialization.
discard dc88ab6 OSGi: moved VerticalDatumTypes from "sis-referencing" to "sis-metadata" module, for allowing us to move GeodeticObjectParser later.
discard c706827 Referencing: added test cases for BursaWolfParmeters.get/setValues(...) methods.
discard f731e91 Added clarification in javadoc about the BursaWolfParameters values.
discard c575b7f Referencing: avoid direct dependencies to BursaWolfParameters and CoordinateSystems (from sis-referencing module) in GeodeticObjectParser. This is part of the effort to make SIS compliant with OSGi.
discard 2934d05 Referencing: avoid direct usage of AbstractCS and DefaultConversion in GeodeticObjectParser.
discard 9f40ac7 WKT parser: removed some more direct dependencies to "sis-referencing".
discard dde1778 Referencing: avoid direct reference to DefaultCoordinateOperationFactory from GeodeticObjectParser. This is needed for allowing us to move GeodeticObjectParser to sis-metadata module, for OSGi compatibility.
discard 7e04a67 Referencing: Register DefaultCoordinateOperationFactory in META-INF/services. Note that the registered implementation may need to change in a future version when we will implement caching by (sourceCRS, targetCRS) pairs.
discard 607f4c6 Referencing: fix a Parameters.copy(...) bug, which was not copying correctly the subgroups. https://issues.apache.org/jira/browse/SIS-202
discard 1a7d12a Referencing: allow AxisFilter to filter out some axes (which is what many peoples would probably expects from its name) and retrofit CoordinateSystems.normalize(CoordinateSystem) into CoordinateSystems.replaceAxes(CoordinateSystem, AxisFilter).
discard b9ab3a4 Referencing: initial version of a CoordinateSystems.modifyAxes(...) method for changing the units of a CoordinateSystem. This is needed for WKT parsing of a GeocentricCRS.
discard 9410c09 WKT parsing: moved MathTransformParser from sis-referencing module to sis-metadata module, in order to avoid splitting a package in many modules (an OSGi restriction). This force us to get ride of the OperationMethods internal class. Its work is now done by ReferencingServices instead.
discard 94f9f37 Metadata: added ISO 19115 version information.
discard ba16af5 Metadata: minor javadoc, and remove the HardCodeCitations.GEOTIFF constant (was used in tests only). We will use the "real" Citations.GEOTIFF constant instead if needed, or the HardCodedCitations.SIS constant if a "dummy" codespace is needed for testing purpose.
discard db147ad Metadata: adjustment in the declaration of ISO 19115 standards. This commit changes the ISO_19115 constant type from Citation to List<Citation>, which allow us to list ISO 19115-1 and ISO 19115-2 together (because SIS's API merges those standards together).
discard 5ff04f8 Referencing: Citations.getIdentifier(Citation) should take Identifier.codeSpace in account (SIS-201). This work is a consequence of SIS-200 (Citations should not provide constant for organisations), more visible with the case of "ISO 19115" citation.
discard 4c89c2b fix(Referencing): try to solve the ambiguity between EPSG and IOGP codespace (SIS-199). The "authority" citation should be EPSG, not IOGP. But IOGP should be declared a the responsibly party of EPSG.
discard 0a3e4f2 Clarifications in Javadoc.
discard 88b6008 Utility: WKT formatting should be consistent with the one provided in the "sis-metadata" module.
discard 6a4f5c7 Referencing: remove the map of axis directions from GeodeticObjectParser. Instead we will rely on the work done by the 'Types' utility class.
discard 7174f6e Referencing: implement WKTFormat.parse(...) method by using GeodeticObjectParser internally.
discard 3ffd914 Referencing: removed the 'Pending' hack. DefaultMathTransformFactory and GeodeticObjectFactory now use the WKT parsers.
discard 1d5c01d Referencing: ported a first test case.
discard 219f86b Referencing: moved GeodeticObjectFactory into a 'factory' sub-package. Other factories will be put there later.
discard b648b34 Referencing: initial port of WKT 1 parser for Coordinate Reference System objects.
discard 14ae9fd Referencing: added a few WKT parsing tests (simple MathTransforms only).
discard be671fa Referencing: ported MathTransformParser (WKT 1).
discard 9de3331 Referencing: complete the tests for WKT 'Element' class.
discard 1a69ffc Referencing: added more test for WKT element.
discard 3b065cb Referencing: starting the port of WKT parser.
discard dd79500 Build: replace the com/sun temporary classes (used at compile-time only) by a dependency to 'com.googlecode.jaxb-namespaceprefixmapper-interfaces' on Maven central. This is used at build time only - those classes are not included in the classpath at runtime.
discard 05e41d3 Referencing: register GeodeticObjectFactory in META-INF/services.
discard 81dad85 Referencing: javadoc.
discard 677be1e Referencing: starting the port of DefaultCoordinateOperationFactory.
discard 61dfd00 Referencing: add a note on SIS tolerance about different datum.
discard d9bf10c Referencing: relax the datum check in DefaultConversion constructor. Explain in javadoc why there is sometime a gray area (example of epoch change between TemporalCRS).
discard 3eea02a Fix the "svn:eol-style" property to "native" before merge with other SIS branches. This is necessary for reducing the risk of conflicts during future merge operations if those files have been modified.
discard 0f54375 Referencing: fix javadoc warnings.
discard adbb581 Metadata: FormattableObject.toString() do not convert Unicode characters to ASCII, since 'toString()' method is often used for debugging. If the user wants a more ISO 19162 conformant string (including replacement of some non-ASCII characters), (s)he should invoke FormattableObject.toWKT() instead.
discard fccc135 Referencing: javadoc.
discard b87895b Referencing: fix a confusion with theory: LongitudeRotation is a transformation, not a conversion, because it changes the prime meridian, which is part of datum. Improved the check in DefaultConversion for making sure that we do not change the datum. This force us to revisit the DefaultConversionTest, which was wrong from a theory point of view.
discard 6ffbf80 Referencing: GeodeticObjectFactory applies default properties for all object constructions.
discard 97d8d48 Referencing: add some javadoc.
discard 57a266f Referencing: use the user-supplied Locale for formatting some error messages, when possible.
discard 11ecfba Referencing: initial port of the factory of all geodetic objects (excluding MathTransform, CoordinateOperation and the AuthorityFactory). Javadoc still needs to be expanded.
discard 77514da Referencing: added tests for WKT formatting of DefaultDerivedCRS.
discard 74e319f Referencing: test and debug the support of "InterpolationCRS" in DefaultConversion.
discard b579350 Referencing: added more tests.
discard 01ed31e Minor editions: - set the "svn:eol-style" property to "native" - set the "svn:mime-type" property to "text/plain;charset=UTF-8" - omit the import declaration since the class is in the same package - follow the convention asking to use the third person form in the first sentence of methods: "Construct" -> "Constructs" - expand a little bit the first sentence in order to differentiate the two constructors
discard 67d6a2e Test: promote the 'STRICT' constant to the 'TestCase' parent class, since it is shared by more than 30 test classes.
discard 214e27b Referencing: minor tests consolidation.
discard c8ac9fd Referencing: more consolidation and tests.
discard df837d2 Referencing: consolidation and first tests for DefaultTransformation.
discard 65dd9f7 SIS-189 : InvalidDbaseFileFormatException should extend DataStoreException
discard 67f0f49 Referencing: WKT formatting should be more tolerant to malformed CRS, since we would like at least the 'toString()' method to work for investigating the problem.
discard 92b4578 Referencing: removed an assertion which was too strict.
discard 7f41574 Referencing: check for number of dimensions can make an exception for "Affine" operation, since it can easily be extended to any number of dimensions.
discard 568d1ae Referencing: fixed a ClassCastException in the WKT formatting of some ProjectedCRS.
discard 68d72a5 Referencing: the "defining conversion" constructor now accepts a ParameterValueGroup argument in replacement to the MathTransform. This is needed when creating a ProjectedCRS since the "semi-major" and "semi-minor" parameter values are usually not yet known at Conversion construction time.
discard 2cc8c55 Referencing: DefaultConversion.specialize(...) method should accepts a MathTransformFactory argument. This factory was previously hidden because it was used only for axis swapping or scaling. But we will need also for creating a MathTransform when the defining conversion has been created with only a ParameterValueGroup instance (no MathTransform instance), in which case the need to control the MathTransformFactory instance to use become clearer.
discard bd46162 Add a few clarifications in javadoc.
discard 8f1b400 Referencing: add the missing 'forConvention(AxisConvention) method in DefaultDerivedCRS and DefaultProjectedCRS. This required additional checks for axis order in DefaultConversion and subclasses constructors.
discard 8268e67 Referencing: more tests and documentation.
discard ffe96bd Referencing: define WKT keywords as static final constants. Some of those keywords are already used more than once (e.g. "Param_MT", "GeodeticCRS", etc.), and all of them will be used again in the WKT parser.
discard cd308ee Referencing: better support of DerivedCRS WKT. According ISO 19162 a DerivedCRS can itself be a GeodeticCRS, VerticalCRS, TemporalCRS, ParametericCRS or EngineerindCRS.
discard 69cef21 Referencing: added links to WKT 2 online specification. We link to the most specific section when possible.
discard b4346a7 Minor documentation update and typo fix in method name.
discard 82b41d1 Referencing: make AbstractDerivedCRS more type-safe.
discard 8050426 Add a historical note.
discard b086032 Referencing: clarified usage of Formatter.getEnclosingElement(int).
discard fbbd1e3 Referencing: use consistent parameter order in constructor.
discard 6d814eb Referencing: move the restriction about non-null transform into the CoordinateOperation base class.
discard 9a40e38 Referencing: partial support of WKT 2 formatting for DerivedCRS. This work implies a change of strategy in the way we handle "baseCRS" formatting, because almost all CRS can be used as "baseCRS". We also restrict the 'sourceCRS' and 'targetCRS' types allowed in 'Projection' in order to reduce the risk of errors.
discard f2db60a Referencing: added missing "castOrCopy" methods.
discard d61722b Referencing: more steps toward GML support for ProjectedCRS.
discard 9721c93 Referencing: add @XmlTransient annotation to all subclasses of DefaultConversion, since they are not part of GML schema.
discard 8a0941e Referencing: fixed some JAXB annotations for the recently added CRS and operation classes.
discard 3f96a05 Utilities: provide a way do disable the "this operation requires the sis-temporal module" warning in SIS releases.
discard 3727c65 Feature: added AbstractOperation.getDependencies() method. This information is needed for writing the "SELECT" SQL statement to send to a database server.
discard a9ea7f4 Feature: added a test case for LinkOperation (missing file).
discard 4d7e239 Feature: added a test case for LinkOperation.
discard 5e923b3 Feature: in the special case of LinkOperation, we can redirect to get/setPropertyValue in a more direct way.
discard d4b3187 Feature: initial support of parameterless operations used as "virtual attribute". Existing tests continue to pass, new tests still need to be written for the new capability.
discard f5d74d4 Feature: renamed AbstractOperation.invoke(...) as apply(...) for compatibility with JDK8 BiFunction interface.
discard a93847e Feature: renamed DefaultOperation as AbstractOperation, since an abstract "invoke" method has been added.
discard 96c9a18 Feature: accepts short tip (instead of requirying fully qualified names like "head:tip") when there is no ambiguity.
discard 0f4c051 Referencing: store the original parameters, in order to preserve original units of measurement.
discard c7d714a Referencing: first WKT2-compliant formatting of ProjectedCRS.
discard 843f8bd Referencing: provide a GeodeticObjectBuilder for making easier to create ProjectedCRS. For now we keep this class in the test directory because it may need more experiment before we freeze its API. But we may move this class to the main source code once we feel it is stable enough.
discard c80e581 Referencing: fix accuracy problems when formatting map projection scale factor in a ParameterValueGroup.
discard 408058f Omit PrimeMeridian element in WKT2_SIMPLIFIED mode if the meridian is Greenwich. Added test for WKT 1 formatting of ProjectedCRS.
discard a1d9339 Feature: add a column for "characteristics" at formatting time.
discard 3f208e2 Referencing WKT: added support for ORDER[...] element inside AXIS[...] element. https://issues.apache.org/jira/browse/SIS-163
discard 1766d30 Referencing: better replacements of non-ASCII characters in WKT formatting, as required by ISO 19162. The replacement of axis abbreviations can be controlled by users.
discard ef55657 Referencing: consistently invoke public methods instead than fetching the values directly from the private fields during WKT formatting.
discard 19da99a Referencing: initial port of DefaultProjectedCRS.
discard 30cada0 Referencing: initial port of DefaultDerivedCRS.
discard 7390097 Utilities: leverage a little bit more ArgumentChecks.
discard d2f4575 Referencing: Moved internal methods closer to methods doing similar work, and added DefaultConversion.specialize(...) method.
discard 5060b47 Referencing: more 'castOrCopy' implementations in CoordinateOperation sub-types.
discard 6b3cf99 Referencing: add projection subtypes (Cylindrical, Conic, Planar or Azimuthal).
discard 73ae1e5 Referencing: ported support for "defining conversions".
discard c826644 Referencing: initial port of pass-through and concatenated operations.
discard 5c959c9 Referencing: make implementation slightly more straightforward.
discard 0194177 Referencing: initial port of DefaultConversion and DefaultTransformation.
discard 1401d28 Referencing: clarify support for 'interpolationCRS' in CoordinateOperation.
discard 337f171 Referencing: initial port of AbstractCoordinateOperation, together with an opportunist improvement of WKT2 formatting of axes.
discard 8cb2c24 Workaround for a JSR-275 bug: Unit.toString() sometime throws IllegalArgumentException.
discard c49d7f4 Remove some of the deprecated methods.
discard abc9195 Referencing: removed the code that tried to infer automatically the parameters to use in NormalizedProjection constructor. This was more a risk of confusion than a help.
discard 4d7cbf7 Referencing: added "Scale factor at natural origin" parameter to "Mercator (Spherical)" since it was used in EPSG:3785 (the legacy "Popular Visualisation CRS / Mercator").
discard f2a404b Needs to accept non-SIS factory implementations since the port from Geotk is not yet completed.
discard a032a2a Referencing: LambertConformal2SP "scale factor" parameter needs to be declared optional, since it is not formally a parameter of that projection.
discard e3ffa38 Referencing: bug fixes 1) be less aggressive about unmodifiable ContextualParameters (we should be able to get a parameter default value if the parameter is not present). 2) ParameterizedAffine should return the "Equidistant Cylindrical (Spherical)" parameters when queried from a ProjectedCRS element no matter axis swapping.
discard 0b78aea Referencing: bug fix in ConcatenatedTransform.getParameterized(): the ContextualParameters instance was not correctly recognized as a Parameterized object.
discard ad02523 Referencing: provide a mechanism allowing non-SIS subclasses of NormalizedProjection to specify explicitly the semi-major, semi-minor, central meridian, scale factor, false easting and false northing parameters.
discard d8313cb Minor documentation updates.
discard 626c5cf Referencing: renamed MatrixSIS.concatenate(...) as convertBefore(...) and added a convertAfter(...) method. This allow us to bring a little bit more consistency in NormalizedProjection constructor, by doing all the work for the common parameters (central meridian, scale factor, false easting, false northing) without the need for subclasses to invoke 'scaleAndTranslate2D' themselves (the later method can actually be removed).
discard 46942e5 Referencing: fixed the special default values in HTML report.
discard 1cefe36 Referencing: LamberConformal constructor does not need to make special case for spherical formulas. Avoid negating the 'n' field in transformation methods.
discard e1d9faf Referencing: initial port of Lambert Conformal map projection formulas. As a side effect of this port, tuned again parameters handling.
discard 863b77a Referencing: added parameters for "Lambert Conformal (2SP)" and the Belgium case. Not yet connected to the actual map projection code.
discard db69e62 Referencing: added a provider for "Lambert Conformal (1SP)". Not yet connected to the actual map projection formulas.
discard 3d94e9a Remove ImmutableIdentifier.remarks, which is replaced by 'description' (SIS-198). Allows parameters to be declared deprecated. Review Mercator parameters, declaring "scale_factor" in Mercator2SP as a deprecated parameter.
discard 8eb3efa Referencing documentation: Generates a slightly more compact HTML.
discard 02e2c4f New HTML generator for the page listing the map projection parameters.
discard 1ade19a First draft of a tools generating a HTML page listing projection parameters, for SIS documentation purpose.
discard 7506a8c Referencing: NamedIdentifier should not create automatically a NameSpace anymore. https://issues.apache.org/jira/browse/SIS-197
discard 44f1f69 Referencing: rename "OGP" as "IOGP" in XML files as well (SIS-196). This action is taken after feedback from a member of EPSG group.
discard 5cb18aa Referencing: defines a constant for the "IOGP" string (internal usage only).
discard 856602b Renamed "OGP" as "IOGP" since the organisation name is now "International Association of Oil & Gas Producers". This replacement is not yet done in XML files. Added tests.
discard 3ec5e96 Referencing: added test for Equirectangular projection, in particular its WKT formatting. This implied a change in the way matrices were formatted in WKT (no more special case for Matrix, use a more generic mechanism for MathTransform instead).
discard 3b0d01e Referencing: complete the implementation of Equirectangular projection (actually implemented by an affine transform). As a side effect, tuned again the way we manage parameters, especially the calculation of radius of conformal sphere.
discard bd0847a Referencing: minor fix in parameter names, and added tests for "Mercator (variant C)" and "Mercator (Spherical)".
discard 2c01cdb Referencing: renamed EquidistantCylindrical as Equirectangular. We reserve the "Equidistant Cylindrical" name for the ellipsoidal case.
discard 85ccc1f Referencing: added parameters for "Mercator (Variant C)" and "Mercator (Cylindrical)". As a side effect of those new parameter groups, try again to re-organize the way we manage parameters in an effort to make easier to find which OperationMethod use which parameters, and which parameters are defined by EPSG and which are extensions found in GDAL.
discard c5ecb35 Referencing: simplified a little bit by removing the Builder.replaceIdentifiers(...) method. It is less likely to be used than Builder.replaceNames(...). Also renamed "replaceNames" as "rename".
discard 960db5d Temporary useless local variable put in comment. (to check the ability to commit in SVN).
discard 63ce243 Referencing: add parameter definitions for EquidistantCylindrical projection. As a side effect, added 'replaceNames' method in ParameterBuilder in order to make easier to use an existing ParameterDescriptor as a template.
discard 9442324 Referencing: scale factor of Pseudo Mercator projection should have only the EPSG name.
discard bd97499 Fix a bug identified by the port to the JDK6 branch.
discard 30416da Referencing: added a test case for WKT formatting of the "kernel" part of Mercator projection. This was initially not planned to be part of MercatorTest, but since the WKT of the "kernel" part is highly implementation dependant, it may be better to keep it with the specific test class.
discard 3aedd4b Referencing: last Mercator tests.
discard a852989 Referencing: change in our construction of CoordinateDomain (a class used only for testing purpose). We now store the domain bounding box, for making easier to use it with 'verifyInDomain' GeoAPI test.
discard c42ca44 Referencing: added test case for derivative of Mercator projection.
discard 14f48f1 Referencing: added tests and bring some parameters in closer conformance to what seems current usage: - "Mercator (1SP)" and "Mercator (2SP)" no longer deprecated since EPSG added them as aliases in their database. - Common usage for "Miller Cylindrical" seems to be "central_meridian" rather than "longitude_of_center".
discard b992d01 Referencing: first real test of Mercator projection. The test is defined in the GeoAPI conformance module from the example provided by the EPSG database.
discard fc72b58 Referencing tests: attempt to simplify a little bit the MathTransformTestCase base class: - Removed the 'messageOnFailure' field, which was rarely used and rarely honored. - Renamed some "verifyFoo" methods as "assertFoo". - Moved 'assertIsIdentity' to ReferencingAssert.
discard 8a812fc Referencing: added a minor test, and prepare for WKT parsing (to be implemented later).
discard 86fe4d6 Use META-INF/services registration instead than hard-coded reference for DefaultNameFactory. The intend is to prepare the ground for dependency injection in a future version.
discard d9512aa Referencing: register DefaultMathTransformFactory implementation in META-INF/services.
discard d7c1570 Referencing: register the Mercator projection in the list of transforms known to DefaultMathTransformFactory.
discard e10a87c Referencing: review our policy about the tolerance threshold in map projections.
discard 4f6a732 Referencing: clarified that in the particular case of Mercator projection, latitude of origin is always 0°. Begin the port of Mercator projection tests.
discard b3e3646 Referencing: completed ContextualParameters implementation, added documentation and tests.
discard 40a09e6 Referencing: protect the ContextualParameters matrices by wrapping them in an unmodifiable view after construction has been completed. Also added more javadoc.
discard 0d7178f Referencing: call to ContextualParameters.completeTransform(...) mark the parameters as unmodifiable. This method is invoked after we finished to build the ContextualParameters and need to keep the reference.
discard 1c12663 Referencing: trivial javadoc fix (include: fixed wrong Unicode character).
discard 657ec13 Referencing: documentation fixes and minor code tuning (e.g. no need to cache the non-linear part of the concatenated transform).
discard 2ce7512 Referencing: renamed "UnitaryProjection" as "NormalizedProjection".
discard 036b56b Referencing: partial port of Mercator initialization operations (construction of normalization and denormalization affines).
discard 7d57ef7 Referencing: clarified what the formulas mean.
discard 185577a Referencing: rewrite some equation in a way closer to EPSG Guidance Note Number 7, part 2, Version 49. This has the side effect of bringing the equations meaning closer to a "real world" meaning. For example the former "t function" is now more clearly related to a part of the Mercator projection (Note: we define that equation in the parent class because Mercator is considered a special case of Lambert projection with the equator as the single standard parallel, so we wil [...]
discard 5852df8 Minor constant declaration and renaming for sharing existing methods.
discard 47eabe4 Referencing: initial and incomplete port of Mercator projection. Missing the initialization in the constructor for now.
discard 9902bbc Referencing: ported code to be needed for assertions in map projections.
discard 6d3541e Referencing: added some verifications of parameter names.
discard bd77cc4 Referencing: added parameters for "Miller Cylindrical" projection.
discard ed9a7e1 Referencing: added parameters for "Popular Visualisation Pseudo Mercator" projection (EPSG:1024).
discard 5c858f1 Parameters: write remarks in footnote when formatting the parameter descriptions. The intend is to flag the parameters which are not formally defined by EPSG.
discard ca84a7d Removed empty javadoc tags.
discard 6eb9094 Referencing: added parameter declaration for the "Mercator (variant B)" case.
discard 5898451 Referencing: added parameter declaration for the "Mercator (variant B)" case.
discard 9a618a3 Referencing: ContextualParameters need to create matrices with extended precision.
discard f95fb8c Referencing: enabled the JUnit tests in UnitaryProjection which were ignored.
discard b5098e7 Referencing: documentation fix, and added missing methods in UnitaryProjection.
discard eddc1a1 Referencing: partial port of UnitaryProjection, which is the base class of code performing the map projection on a ellipsoid having a semi-major axis length of 1. Note: the class name may be changed. For example maybe "NormalizedProjection" would be more understandable. We will submit the question on the mailing list after we ported the Mercator projection.
discard 7148544 Referencing javadoc: try to explain better the purpose of ContextualParameters.
discard cdd2eb3 Referencing: Rename NonLinearParameters as ContextualParameters since its purpose is not to describe the non-linear parameters (this is done directly by the MathTransform implementation), but rather to put those non-linear parameters in their context. Also start a refactoring as an implementation of ParameterValueGroup instead than a container for an other ParameterValueGroup. This eliminate one level of indirection, which we hope will help to simplify a little bit the API.
discard d54a2bb Javadoc: other replacements for consistency.
discard a2a6f6f Javadoc: move the quotes inside the <cite></cite> elements for better rendering. This change has been applied by an automatic search-and-replace.
discard 0e57266 Javadoc: minor formatting updates for a little bit more consistency with the new usage of <div> for section header.
discard 353aeb0 Javadoc: replaced {@section} custom taglet by <div class="section"></div> HTML. Rational: - The custom taglet was not understood by IDE, thus showing broken javadoc in IDE windows. - The custom taglet produced <H5> and <H6> HTML tags, which should not be used at least in member javadoc because javadoc produce a structured document, and our heading tags break the structure. - Since JDK 8, javac can ensure that the comments are well formed but can not verify what our [...]
discard bd4925a Javadoc: more corrections in stylesheet.
discard bff4020 Javadoc: fixed a bug in our stylesheet, and removed some <p> elements which are no longer needed after this fix.
discard 2c30651 Matrix: added a test case for MatrixSIS.concatenate(...), and documentation fixes.
discard 1618137 Matrix update before to port first map projections: - Moved normalizeColumns() in the super-class for saving place (maybe at a slight performance cost) since this method is rarely used. - Moved equals() and hashCode() in the super-class for saving place in Matrix3 and Matrix4, since we rarely put matrices in a HashMap. - Initial version of a 'concatenateAffine' method, to be needed by map projection constructors.
discard 3c24890 Method was public by accident (should be protected).
discard 67c03e2 Renamed normalize(boolean) as normalization(boolean) because "normalize" was suggesting that the method performs a normalization, which was not the intend. Instead, the method returns information about the normalization.
discard a4aa26d Consider the transform as affine only if the matrix is square.
discard 2276d59 Referencing: reduce the number of casts needed before to multiply of inverse a matrix.
discard ba5eda4 Referencing: tries to bring more consistency in the equals(...) and toString() methods of various LinearTransform implementations.
discard c755c38 Referencing: after call to NonLinearParameters.createConcatenatedTransform(...), stores the normalize/denormalize transforms as immutable matrices if possible.
discard c855ec0 NetBeans project configuration: fixed a dependency path.
discard 993f0f4 Referencing: take in account the separation between linear and non-linear parameters before WKT formatting.
discard ed4e179 Tests shall use StrictMath instead than Math.
discard 0659646 Referencing: port the code to be used for hiding the (linear / non-linear) separation at WKT formatting time.
discard 5c61894 Initial port of the class which will separate the linear parts from the non-linear parts of map projections.
discard 21ff9f3 Minor formatting and warning fixes.
discard 21c939e Referencing: added a small test for Mercator parameters.
discard 79f490c Referencing: add MapInfo identifiers to Mercator projection.
discard d26590a Referencing: consolidate the creation of legacy (deprecated) names and identifiers into the Builder base class.
discard 0dcad30 Added a test and links to JIRA tasks.
discard e53f135 Metadata bug fix: DefaultResolution.isEmpty() and prune() need to detect when RepresentativeFraction is empty [SIS-194].
discard 2c4d38b Referencing: added a test for the case where a parameter group contains sub-groups.
discard d51a2e1 Referencing: use the dedicated "createGroupForMapProjection" methods when creating Mercator parameters.
discard 9012e2a Referencing: remove the "UniversalParameters" class. We will try to achieve the same goal with the help of ParameterBuilder, as seen in the Mercator1SP class.
discard 9f4b6fb Referencing: initial port of Mercator1SP projection parameters. Not yet complete, since the projection code itself is not yet ported.
discard 731c7ce Diamond operator and lambda expression.
discard b9c7ba3 Remove a parameter name which is used only in the ESRI's "New_Zealand_Map_Grid" map projection. This projection will not be ported to Apache SIS for licensing reasons.
discard 1ba7251 Minor Javadoc updates (include formatting fixes).
discard 341799b Added javadoc and a test case for "Longitude rotation" operation method.
discard 1fbe6d2 Referencing: moved a test closer to where the tested objects are defined.
discard 5fa8602 Referencing: added the LongitudeRotation operation method. This is probably the simplest operation.
discard 839b8e5 Added JUnit tests for MapProjectionParameters.
discard 42a26af Javadoc formatting: replaced the table by a more classical list. A few tests suggest that the list is more redeable.
discard 2468463 Javadoc refactoring in an attempt to clarify the usage of ParameterBuilder.
discard f1b1aea Javadoc updates and changed some method declaration order for keeping related methods closer. No significant code change in this commit.
discard 53e81c8 Refactoring: moved MapProjectionParameter classes to org.apache.sis.parameter in the hope to make easier to find them. Removed some complicated "UniversalParameter" code (we may remove more later); we will try to use ParameterBuilder instead.
discard 916b2ab Initial port of a collection of map projection parameters.
discard d02d637 Re-target the Parameters class as the base class of DefaultParameterValueGroup, but providing an API which is more convenient to use at least for the referencing module.
discard 478e95c When reporting an error about a class, do not show the name of private classes. Instead, go up in the hierarchy until we find a public class or interface.
discard 7acd50f Register the Affine method in META-INF/services and added more tests.
discard 51768e0 Adjustement to the workaround for java.util.ServiceLoader bug.
discard 97debfd Missed test class in the previous commit.
discard a9a7e9d Workaround for a JDK bug: ServiceLoader does not support usage of 2 iterators before one iteration is finished. To workaround this bug, we use the LazySet internal class.
discard a7909e8 Allow the user to control the logging configuration of the SIS command-line tool.
discard 7bde9c4 Renamed "Affine general parametric transformation" as "Affine parametric transformation". A verification in http://epsg-registry.org/ show us that the "general" word has been dropped.
discard 84c792c Affine.parameters(Matrix) now select the appropriate parameter set (EPSG or OGC) depending on the matrix characteristics (size and whether it is affine).
discard d4dc621 Partial rollback of previous commit, which was an attempt to adjust automatically the ParameterDescriptorGroup content according whether the matrix content matches the EPSG:9624 definition or not. This was complicated and probably at risk to cause confusion to the users. Instead, we will accept that the parameter description provided by:
discard f262b02 Adapt the parameter group name depending on wether the matrix is compliant with EPSG:9624 definition or not. EPSG:9624 is only for affine matrix of size 3x3, while OGC definition is does not put any restriction.
discard 4257ac8 Replaced a few String litteral by static final value from the Constants internal class.
discard 6faeb1c Better separation of matrix using WKT1 and EPSG parameters. - The WKT1 case is implemented by MatrixParameters and still a general case, despite understanding the EPSG names (but only as alias). - The EPSG case, which contains a little bit of "magic" that depends on the matrix size, is isolated in MatrixParametersEPSG.
discard 5f8b36a Better formatting of "Affine parametric transformation" parameters in Well Known Text (WKT) format:
discard b50a089 Usage of getIdentifier(...) versus getUnicodeIdentifier(...) - Document better the policy. - Replace getUnicodeIdentifier by getIdentifier when used only for WKT or toString() formatting purpose.
discard 4cd19d6 Minor javadoc formatting: separator between the EPSG and WKT example, put the note about EPSG prameter names closer to the EPSG example.
discard 678c057 Clarified the way codeSpace are inferred from Citation objects: - Added a getUnicodeIdentifier(Citation) method which guarantee that the returned String is a valid Unicode identifier - Remove ignorable identifier character for better compatibility with XML identifier - Documented the relationship between Unicode identifier and XML identifier - Make use of the above-cited getUnicodeIdentifier(Citation) in most places where we need to infer a scope or codeSpace, except w [...]
discard 90df6a4 Allow the "Affine general parametric transformation" coordinate operation method to understand the parameter names used by EPSG:9624 in addition to the OGC syntax.
discard feb504e Removed accidental references to Geotk in the documentation.
discard c65a6fa Ported the "Affine" operation method. This is our first provider ported to SIS - we are comming closer to a working MathTransform factory providing real coordinate operations support.
discard 0f19910 Documentation editions.
discard 0f52517 Added documentation.
discard cfd062a Initial draft of DefaultMathTransformFactory tests. Will be completed later.
discard a8e5364 Javadoc fixes: expected <div>, not <span>.
discard b421473 Redimenion the OperationMethod before to return the MathTransform.
discard dc1b977 Change in the contract of DefaultOperationMethod.redimension(...). The javadoc tries to explain better its purpose, with "Affine" and "Molodensky" methods as examples. This is an incompatible change compared to Apache SIS 0.5 release, but this class was the very last one added before the release (maybe too late) and we hope that since it will not be used before SIS 0.6, few users would be affected.
discard c14f3fa Suppression of "3.2" in "http://www.opengis.net/gml/3.2" does not work (SIS-192).
discard 30352d4 Documentation updates.
discard 68c9685 Continue the port of DefaultMathTransformFactory.
discard fc31800 Added a CoordinateSystems.normalize(CoordinateSystem) method, which will be needed by the MathTransformFactory implementation.
discard 45cd038 Ported the ParameterizedAffine internal class, to be needed by MathTransformFactory implementation.
discard 83e4d8f Partial port of DefaultMathTransformFactory. Abstract for now, will become a concrete class after the port has been completed.
discard 2174d95 Location of GeoAPI project changed: it is now hosted in the OGC group on GitHub.
discard bb75af8 Additional javadoc clarification.
discard 4cfaa2b Added javadoc. Restricted DefaultOperationMethod.getOperationType() to SingleOperation subtypes.
discard 7361c1e Explain a design choice about OperationMethodSet.contains(Object).
discard 267929a Ported OperationMethodSet, to be needed by DefaultMathTransformFactory. Added tests (this is new code).
discard 071e5c2 Ported MathTransformProvider, refactored as a functional interface.
discard 62ab9e8 Javadoc, consistency in the way to access AbstractIdentifiedObject members, and parameter renaming for clarity.
discard 7a73250 Upgrade version number from 0.5-SNAPSHOT to 0.6-SNAPSHOT, so we can start next development cycle while waiting for the vote to complete.
discard a6dde87 Do not copy stylesheet.css if the javadoc failed, in order to avoid adding an other confusing error messages after the first one. Typo fix in MetadataUtilities.
discard 8cd974b Specify the boot class path to the javadoc tools in addition to javac.
discard 80934e7 Ant script used for the release process need to be adapted to a code change in the Version class.
discard e3168bb Missing format in @preformat custom javadoc tags.
discard 587b1e9 Updates identified as a side-effect of preparing the 0.5 release.
discard a3e4a40 Move the DOAP (Description of a Project) file from the source code repository to the web site repository, following the suggestion on http://projects.apache.org/create.html#submit
discard 2c85c07 Rewrite the private 'getConfiguration()' method in a way which will make easier for the JDK7 and JDK6 branches to be compilable with JDK8. The difficulty come from the fact that the way to get the Configuration object is different on JDK8 than on JDK7 and JDK6.
discard dd78bc6 Slight increase of tolerance threshold based on empirical tests.
discard 3c2861f Minor javadoc adjustments for slightly more uniform package descriptions.
discard 617ad64 More accurate for the style change.
discard 0842880 Allows to specify the bootstrap classpath. This will be needed for compiling the release targeting JDK6 using a JDK8 compiler.
discard 1c07c3d Fixed javadoc warnings.
discard edaa25a Documentation updates. In particular explain better what a MathTransform is, and its relationship with Formula.
discard a50d50c When formatting in the WKT 1 format, try to check if using the "PROJECTION" keyword actually make sense. Note that WKT 2 does not have this problem, since its "METHOD" keyword is more generic.
discard 1a8a9ca Updated copyright year in NOTICE and README files, and enabled inclusion of "since" information in javadoc.
discard 68832f2 Removed the "(derived from geotk-##") part in the "@since 0.#" javadoc annotation. I think it is not in ASF usages to carry such links to an history outside Apache, and removing them will also allow us to enable the "since" tags in the generated javadoc without distracting the users with an information not relevant to the Apache SIS project.
discard e2d708f Moved org.geotoolkit.referencing.operation.provider to an internal package.
discard 87c4def Enable the check for identifier (before to check the name) for Datum and OperationMethod.
discard cc126e7 After more though, removed IdentifierMatching from the public API. Writing a test case with real-world data (the EPSG identifiers of the "Mercator (variant A)" projection) shows that the previous enum did not worked as intended. For now we keep a simpler implementation as internal API.
discard fde1717 Provide more information in LinearTransformBuilder.toString().
discard f5f0b7c Add support for the one-dimensional case in LinearTransformBuilder.
discard 8f607db Partial port of the Line class. Does not yet include the methods computing shortest distance between a point and the line, etc.
discard 3bf0aec Plane fields are no longer public - use accessor instead. The intend is to keep room for improvement if a future version want to store values with double-double arithmetic (for now only the 'fit' method needs such arithmetic), or if we want to support planes with vertical orientation (sx ou sy term tending toward infinity). Also rewrite the equations in the javadoc for using the more common order where the constant is last.
discard 18187a7 Added tests.
discard ed6bae4 Clarifications in Javadoc, and added a check against values very close to zero in Plane.
discard 2a4b96f Initial draft of a LinearTransformBuilder.
discard f2da70c Ported the Plane class, which will be needed for approximating an AffineTransform from a collection of source and target points.
discard 18d8135 Initial draft of an enumeration representing the result of checking if two IdentifiedObjects are the same by looking at their identifiers. According ISO 19162, identifiers shall have precedence over names at least for OperationMethod and ParameterValue instances.
discard 30866aa Clarify which components of Identifier are compared by Citations static method. Add comparison of Identifier.codespace (new in ISO 19115:2014) when possible.
discard 826b801 Add a not about why Parameters.getOrCreate(group, name, index) is not a public API.
discard 0efddfa Make Parameters.copy(...) robust to multi-occurrences of a parameter value.
discard 189bcd2 Ported Parameters.copy(...) and tuned formatting of multi-occurrences of a parameter value.
discard ce384f3 Use pre-defined constant.
discard 2db4d45 More accurate error message in case of mismatched source/target dimensions.
discard b91052d Removed MathTransforms.getCore(...) from public API, because its contract is not clear enough. Its functionality moved to the internal OperationMethods.checkDimensions(...) method, since the only purpose of 'getCore' was to help checking the source/target dimensions compatibility.
discard cf1ff7f Fix a NullArgumentException in DefaultOperationMethod(MathTransform) constructor. This force us to take a slight departure regarding ISO 19111 regarding the obligation of OperationMethod.parameters.
discard f708887 Add tests.
discard 2d7b6f5 Added tests for DefaultOperationMethod. Consolidated some other tests as a side-effect.
discard 89b0670 Fix a javadoc error.
discard 189465b Ported DefaultOperationMethod.
discard 27ea8b6 Ported the DefaultFormula class.
discard f16885b Minor clarifications about WKT 1 versus WKT 2.
discard 9904cc3 Update for a change in GeoAPI pending interfaces (org.opengis.temporal).
discard a9ca7da ISO 19162 requires that we replace non-ASCII characters by ASCII ones for all WKT elements except REMARKS["..."]. Note that we make an exception to this rule when formatting a WKT using the SIS-specific Convention.INTERNAL mode.
discard a164b48 toASCII(...) now replace also various kind of space characters.
discard e98ee95 Provide 'equals' and 'hashCode' implementation on the metadata Collection that are view on other metadata elements.
discard 7f39658 Update for GeoAPI change: Attribute[Type].characteristics() now provided in the interfaces.
discard 6d061a5 Renamed DefaultMetadata.getDates() as getDateInfo() for compliance with ISO 19115:2014 identifier name, which is "dateInfo".
discard 5a27a3b Removed completely the check for BursaWolfParameters.targetDatum.primeMeridian. Document in the javadoc who is responsible for applying longitude rotation. Re-use the old error key for an other error message to be used in a future commit.
discard 01dff48 Temporarily disable the check for prime meridian in Bursa-Wolf parameters. We need to revisit this policy, since NTF datum (for instance) have TOWGS84 parameters. We need to make clear that longitude rotation shall be applied by the callers.
discard 191d578 Apache header added.
discard 7426717 Remove trailing spaces for reducing the risk of conflicts during merge. There is no code or formatting change in this commit.
discard 0302239 Apache header added.
discard 7610ebb Make LogarithmicTransform1D method names consistent with ExponentialTransform1D field names.
discard 1e11538 Test adjustments.
discard 573f7c2 More extensive tests, and fixed a bug identified by those tests.
discard c626388 Apply "svn:eol-style" properties on Shapefile classes and remove trailing space. This commit does not contains any code or formatting change.
discard dbe8dcd Added tests.
discard 15c48cd Added tests.
discard 4d4a51a Refactoring : changing package of AutoChecker class.
discard 2d3f99d End of refactoring : - Rename AbstractUnimplementedFeaturesOfDatabaseMetaData as AbstractDatabaseMetaData. - Rename AbstractResultSet into DBFResultSet. - Rename AbstractUnimplementedFeaturesOfResultSet into AbstractResultSet. - Rename AbstractBuiltInMemoryResultSet as BuiltInMemoryResultSet. - Rename AbstractClauseResolver as ClauseResolver.
discard 0ad9846 Second intermediate commit for internal.shapefile.jdbc renaming.
discard a830077 Initial draft of a Checkstyle verification as part of the build. For now, only enforce the replacement of tabulations by spaces.
discard 2dcf4ab Documentation clarification: represent the projected envelope by a red rectangle.
discard 9d96b45 Change in the custom doclet implementation strategy, trying to avoid wrapping the standard RootDoc. With the previous implementation (using a wrapper), the doc-files directory were correctly copied on JDK6 and JDK7, but not on JDK8.
discard b54e821 Intermediate commit for internal.shapefile.jdbc renaming.
discard 6afbb06 Minor documentation tuning.
discard 71c6506 Re-enable custom doclet and fix more javadoc warnings.
discard 799ba9e Temporarily disable the custom doclet, which seems to block the copying of doc-files directories.
discard 183fb87 Fixed some javac and javadoc warnings.
discard f2d2e01 Updated version numbers of a few plugins and dependencies.
discard 667c5aa Avoid dependency to Java2D in the Envelopes class. Added documentation and bug fix in ShapeUtilities.toPrimitive(Shape).
discard 21d3f4d Coding conventions.
discard adc1055 Ported the class that perform the link between our ISO 19115 implementation and a few services provided by the sis-referencing module.
discard d317626 Port the code performing Envelope transformation.
discard 41d783e Port more geometric formulas, some of them needed for Envelope transformations (next commit).
discard 41b1fd5 Added test, documentation update, tuned error message.
discard fc8585a Added tests for toNormalizedGeographicCRS(CoordinateReferenceSystem).
discard 9c2b5fe Trivial change of method declaration order (no significant code change). The intend is only to keep related methods together.
discard 92c1a97 Documentation update and added tests for the Paris prime meridian.
discard 2dc7737 Clarify in the AxesConvention contract that we do not rotate the prime meridian. Instead provide two methods which, used together, simplify a little bit the task of handling longitude rotation: - CRS.getGreenwichLongitude(GeodeticCRS) which take care of converting the prime meridian to angular degrees. - GeneralEnvelope.translate(double...)
discard 804a456 SIS-185 : Feature values taken from Database are temporary recast to String instead of their true type.
discard f1ff8cb SIS-185 : Shapefile content is read through an InputFeatureStream.
discard 3375701 Clarify that Bursa-Wolf parameters shall be between two Geodetic Datum having the same Prime Meridian. This commit contains also some error messages to be used in a later commit.
discard 222b70f AxesConcention documentation, and renamed a few test methods for distinguish whether we are testing CONVENTIONALLY_ORIENTED or NORMALIZED enum value.
discard 1f5128d Introduce a new AxesConvention.CONVENTIONALLY_ORIENTED constant more clearly targeted to Web Map Service (WMS). This new constant is functionally between AxesConvention.RIGHT_HANDED and AxesConvention.NORMALIZED. This give us more freedom for tuning NORMALIZED, for example by forcing the prime meridian to Greenwich (whatever this would be a good idea or not is still an open question).
discard 585796e Moved ReferencingUtilities from sis-metadata to sis-referencing module. This move has been made possible by the extraction of URN-related methods in a separated class (NameMeaning) in the previous commit.
discard 256e404 Moved into a separated class (NameMeaning) the ReferencingUtilities methods related to assigning a meaning to parts of OGC URN.
discard 1f6fd00 SIS-185 : Removing duplicated resources tests files.
discard 922e111 Ported the AxisDirections.indexOfColinear method.
discard 4a8f76a Ported CRS.getComponentAt(...) - previously named CRS.getSubCRS(...) on Geotk.
discard 496f88b SIS-185 : Correcting previous commit.
discard 62358f2 SIS-185 : - Database object removed. - Access to fields description by DatabaseMetaData.getColumns(...) method. - Many internal objects hidden. - Most error message reduced their level from SEVERE to WARNING.
discard 5adc80a Change in the contract specified by javadoc: in SpatialTemporalExtent, the temporal component is no longer mandatory as long as if have at least one of spatial, vertical or temporal parts.
discard 27a1018 Add parsing of unit symbols from NetCDF files.
discard 4c8c4a7 Support parsing of "degK" symbol for Kelvin. This symbol is used in some NetCDF files.
discard 37a2449 Comment-out (for now) the copy of 'sis-shapefile' resources in NetBeans project configuration.
discard 794202f Trivial renaming of test methods, and added one test about the "String to Integer" case.
discard a12fcaf SIS-185 : - getRecordCount() changed to getRowCount(). - Method return HashMap in database now returns a Map.
discard f7a2422 SIS-185 : - ShapeFile public variable members reduced to private. Method getFeatureMap() added to allow a test to continue working. - FieldDescriptor public variable members reduced to private. - Database methods : close, isClosed, loadRowIntoFeature and readNextRowAsObjects marked as deprecated to warn programmers against using them.
discard 9775d94 Refactoring for SIS-184 : (properties refactoring were missing) MappedByteBuffer is ejected from Database class and put into internal classes in order to be upgraded to something better later.
discard e4e24d3 Refactoring for SIS-184 : MappedByteBuffer is ejected from Database class and put into internal classes in order to be upgrated to something better later.
discard 06da537 Refactoring on SIS-184 : Changing from java.util.Logger.getLogger(...) to java.apache.sis.getLogger(...).
discard 71b2efd Fixed SVN properties. There is no code change in this commit (the apparent changes are only a result of SVN adjusting automatically the EOL style to the platform).
discard dc7885b Fixed wrong argument order when formatting error message.
discard da5eeb4 SIS-184 : Ability to run SQL request on DBF 3 Database. SELECT * FROM <DBase> [WHERE] simple condition
discard ca7f671 Trivial update for GeoAPI correction.
discard 9600097 Update for GeoAPI change (one more upgrade to ISO 19115:2014).
discard eba78ed Bug fix: need to inherit the range of values from the super-class.
discard c920e78 Update for GeoAPI changes: - Added StandardOrderProcess.getCurrency() method for integration with JDK standard class. - Moved Band.getTranfertFunctionType() and getNominalResolution() up in the hierarchy into SampleDimension. - Changed ScopeDescription.getOther() return type from String to InternationalString.
discard 9818d8f Removed the hack about the "defaultLocale+otherLocale" UML identifier, which does not exist anymore since GeoAPI now provide the version number of specifications used.
discard f30ec49 Update for GeoAPI change: Obligation code list replaced by Obligation enum, for compliance with ISO 19115.
discard 28135af Allow Types.getCodeValues(Class) to work with Enum in addition to CodeList.
discard 56c3e21 Replace usage of reflection by a more efficient call to a method available in java.lang.Class.
discard aa56ad8 ISO-19115 TopicCategory and PixelOrientation shall be Enum, not CodeList. http://jira.codehaus.org/browse/GEO-199
discard 4ef556b Feature: 'newInstance()' method added in GeoAPI.
discard 0f9169d More tests.
discard 7dbd2aa Attribute.equals/hashCode should take characteristics in account. Added more tests.
discard 59196bb Added tests.
discard cc7769e First draft of DefaultAttribute.characteristics() method.
discard acd94a5 Added an AbstractMap with slightly different assumptions and implementation strategy than java.util.AbstractMap. This is strictly for internal usages, only in some specific cases, and shall be invisible to users.
discard 8438f30 Removed useless call to String.valueOf.
discard 85a925a Cache entrySet reference shall be volatile. Trivial formatting fix.
discard 5c17060 Initial implementation of AttributeType.characterizedBy association. This association is part of ISO 19109, and will be useful for providing information about accuracy of measurement. Corresponding association has not yet been added to Attribute.
discard b34eb1e Factor out default implementation of 'equals', 'hashCode' and 'toString' for Map.Entry. This change fixes a hole in DefaultRecord.
discard 5e1e8f9 Fixed two resource strings.
discard 2721929 More informative message in case of error.
discard f55953e Update for GeoAPI change.
discard 57fb8d6 Flag automatically generated code.
discard db281f5 Reduce memory usage by avoiding the creation of unused empty collection in equals, hashCode, toString, freeze, isEmpty and prune methods.
discard a242116 Need to use a different ClassLoader than the APIVerifier one, because we do not want to inherit its GeoAPI dependency in this case.
discard 6224281 Added the benchmark class that we used for measuring the memory usage of Feature implementation.
discard 8ce7e03 Added the missing DefaultKeywordClass implementation.
discard 1097ab8 Added test.
discard 5301aae Added documentation.
discard 1290d83 Consolidation of checks for property values in metadata objects.
discard fb8192b Consolidation of logging messages occuring at XML (un)marshalling time. This is cleaning work prior the consolidation of ArgumentChecks call in metadata implementations.
discard 56f7cc5 Trivial cleaning.
discard b01cc49 Minor simplification.
discard 4054128 Replace explicit declaration of DefaultResponsibleParty by a @XmlSeeAlso annotation. This allow less surprising behavior for applications that use Apache SIS with their own JAXBContext. Credit: this is a proposal from Guilhem Legal.
discard 1054049 Added a test and minor cleaning.
discard 9646e06 Allow implementation to alter the API defined by interfaces.
discard 0e8ded3 Add the code that we used for generating the "api-changes.properties" file. This may be used again if we need to upgrade an other part of the library for an other standard some day.
discard 738b35b Update for GeoAPI changes.
discard 56382a7 Added a test for verifying API changes.
discard cb4c796 Consolidation of deprecated method implementations: - Setting a null value should remove the wrapper object if the later became empty. - The deprecated getter methods invoke only the non-deprecated getter replacement. - The deprecated setter methods invoke only the non-deprecated setter replacement (unless the invoked methods are final). This means that if a deprecated setter methods need the old value, it will read the field directly. The intend is to avoid surprising c [...]
discard 03be36f Post-merge cleanup.
discard aebf7de Avoid usage of deprecated methods.
discard 77bc6b2 Review of JDBC base driver class: - Retrofit resources in to the SIS system. - Do not log exceptions. - Provide default implementations for some methods. - Rearrange method order for keeping together related methods.
discard 7bc593d Avoid usage of some deprecated metadata methods.
discard 8c5cb83 Complete the support of cyclic FeatureType graphs.
discard 50f88bc Try to improve the resolution of feature types in case of cyclic graph.
discard f4ad7c6 Upgraded parent POM dependency.
discard aacca5e Make 'prune()' and 'isEmpty()' operations tolerant to metadata properties of unknown type.
discard 22f0c69 Minor formatting.
discard d647001 Initial commit of Marc Le Bihan's work on JDBC driver. https://issues.apache.org/jira/browse/SIS-180
discard 3473398 Removed CmdLineDriver since it was not yet implemented. Updated version number of other classes.
discard 6068f84 Commited the refactoring done by Marc Le Bihan https://issues.apache.org/jira/browse/SIS-180 This commit does not include yet the JDBC classes. Those classes will be the subject of a separated commit.
discard 4064e75 Partial implementation of bidirectional feature association. Still work in progress.
discard 183348d Bug fix in ScopeAdapter: the value was lost if the MetadataScope was not an instance of DefaultMetadataScope. This bug has been identified by the port to trunk (it has not been identified by the tests on the JDK8 branch, but the fact that the tests on trunk sometime follow a different code path has made this bug visible).
discard c4e8590 Added more tests.
discard a14edc2 Factored out the handling of "defaultLocale+otherLocale" special property in a separated OtherLocales class. This is currently used only by DefaultMetadata, but we will need to leverage that OtherLocales class in the DefaultDataIdentification class too when we will implement ISO 19115:2014-3 XML marshalling.
discard 03b61a6 Added a special case for the "language" property, which is not handle in the same way than what ISO 19115:2014 said. Those difference exists because JDK already has its own java.util.Locale, which we want to use and which is different than the ISO 19115 PT_Locale construct.
discard bbf2afb Updated DefaultMetadata to ISO 19115:2014.
discard 7e0f337 Documentation update from ISO 19115:2014 reading (especially the example sections).
discard 7d06010 Upgrade NetCDF dependency.
discard 3ffe34a Minor adjustments making easier the merge to trunk.
discard c7fb0c7 Merged ReferencingIdentifier with Identifier. This reflect a change in ISO standards, where MD_Identifier and RS_Identifier (from ISO 19115:2003) have been merged in the MD_Identifier type in ISO 19115:2014. Concequently all usages of ServiceIdentifier in Apache SIS have been replaced by usage of the Identifier parent type.
discard 658631f Bug fix: first property value was always null. Bug identification and patch by Marc le Bihan. https://issues.apache.org/jira/browse/SIS-178
discard 949108a Trims trailing space and null characters in attribute names and values.
discard a5f217a Added a test for PositionalAccuracy constants.
discard 820cabe Added PositionalAccuracy constants to be needed later by the referencing module. Adding them now in SIS allows us to start preparing the Geotk code for migration.
discard a388144 Fixed a few warnings (mostly javadoc).
discard bda0b03 Reordering of some properties. No significant code change in this commit.
discard a826f38 Fix a NullPointerException.
discard b6abe93 Apply Rémi Maréchal's patch for RangetSet.remove(...) implementation. https://issues.apache.org/jira/browse/SIS-79
discard c00dc5c Normalized version of EPSG:4326 should have the "CRS:84" identifier.
discard d627700 Minor anticipation on GEO-199 resolution (replacement of 2 CodeList by Enum).
discard 6c2c133 Javadoc (no code change).
discard f8a7695 TreeTableFormat checks for more types to localize.
discard 56f035f Deprecate CharSequences.toString(...) since as of JDK8 its functionality is provided by java.util.StringJoiner.
discard 1d12c77 CharSequences.split(...) create String[] array for String, StringBuilder and StringBuffer input. This is a convenience for some Apache SIS code, but still considered an implementation details not to be published in the API (for now).
discard 132a4b2 Better inferrence of accuracy to use in TemporalExtent and VerticalExtent WKT.
discard eacf693 Reorder properties in the more common (x,y,z,t) order. No significant code change in this commit.
discard 4378086 Added support for dependencies in MetadataStandard. For example ISO 19111 standard depends on ISO 19115.
discard f1d225e Added a test case for pseudo-WKT 1 temporal CRS formatting.
discard 5931d82 Added a test case for TemporalCRS WKT formatting.
discard 8b4609e Reduce usage of deprecated methods or patterns.
discard a24c3b8 Rearrange property order (no significant code change in this commit).
discard a80ef4e Add 'TimeOrigin' element in temporal datum WKT.
discard 18ef480 DefaultParameterDescriptorGroup.getDirection() infers the value from the parameters that it contains.
discard 932b1d9 Replace the 'maven-resources-plugin' (previously declared in the root pom.xml) by Java code in our custom doclet. The reason is that I didn't found a way to get 'maven-resources-plugin' executed when 'mvn javadoc" is executed, rather than when "mvn install" is executed. The better alternative would have been to use the <javadocDirectory> or <javadocResourcesDirectory> maven-javadoc-plugin configuration, but I have been unable to get it to work even with absolute paths.
discard d9284bb Removed link to stylesheet.css, since they are no longer needed without custom Doclet.
discard 3b691f8 CSS with a warning logo for API that may change.
discard 13b6fe2 Port from trunk some changes which were necessary for the merge. Those changes are mostly for helping the trunk to deal with the changes in GeoAPI, which are not yet known to the trunk since the later is nailed down on GeoAPI 3.0.0.
discard 7da901c ParameterValueGroup implements LenientComparable.
discard 6bccb2d Minor javadoc fixes.
discard 6f845a1 Minor adjustments as a side-effect of the ongoing "merge to trunk" work.
discard 92420c6 Javadoc.
discard 51b16d5 Moved the service interfaces in the org.opengis.metadata.identification package. This avoid the ServiceIdentification dilemna (should it be in service or identification package?), reduce the amount of deprecated interfaces by 1 (we no longer need to deprecate the ISO 19115:2003 class), and avoid the addition of one more package with only 4 classes.
discard 38068e0 Complete AbstractParameterDescriptor with code that moved from subclasses.
discard 4d8f387 Connect ServiceParameter (an internal class) to DefaultParameterDescriptor (the public class). The later is defined from ISO 19111, while the former is used only internally for ISO 19115 support.
discard 6b70bbc ServiceParameter shall infer the ReferenceIdentifier from the MemberName. This is the reverse of the "MemberName to Identifier" mapping done previously.
discard ac4f034 Stricter check for equality.
discard e9789c2 Accept to parse also OGC type name in global namespace (rather than only in "OGC" namespace). This is needed for parsing of web service parameters from XML document, because TypeName does not marshal its scope in current standards.
discard c5e9e4c Start using the Identifier <-> TypeName mapping in ServiceParameter. An open issue in this commit is the fact that ISO 19139 does not include the namespace of TypeName objects in XML document, so we currently fail to infer the java.lang.Class from an unmarshalled XML TypeName because of the missing "OGC" or "class" namespace.
discard 0d8ce7c Added a test.
discard 4db8222 More robust check about whether it is safe to associate a value class to a TypeName.
discard 7f652c3 Complete the support of a TypeName <-> Class mapping.
discard a4891ee Synchronization problem.
discard ccfecd3 Missing class from previous commit.
discard d729e1b Consolidation of parameter work: we will move the Class <-> TypeName mapping in a dedicated class outside of DefaultRecordSchema, so we can use it for ISO 19115 <-> ISO 19111 parameters as well. This work is still in progress.
discard fe83333 Adapt SIS code for the GeoAPI change http://jira.codehaus.org/browse/GEO-242 This is about trying to provide a unified parameter API for ISO 19111, ISO 19115 and WPS standard.
discard 2178919 Moved ReferenceSystemMetadata (an internal class) to its own package, in order to prepare for the addition of ServiceParameter in that package too.
discard b6ddcc3 Document the new type hierarchy.
discard b8fdc62 Renomed some tests method for making clearer which names are XML names (as opposed to UML names).
discard 380ce6f Update for a GeoAPI change (DQ_Scope moved to MD_Scope).
discard afa2ce9 Upgrade GeoAPI dependency from 3.1-SNAPSHOT to 4.0-SNAPSHOT.
discard d033d4c Fix dependency version number (must be consistent with pom.xml).
discard 70f856c Fixed a NullPointerException at unmarshalling time.
discard 48efca8 Update for GeoAPI changes (upgrade to ISO 19115:2014).
discard 381315e Added Christina Hough to the list of contributors.
discard 257835a Added a minor design note in comment.
discard 04374e5 Updates for GeoAPI changes (review upgrade to ISO 19115:2014).
discard 546a302 More accurate return type in MetadataStandard.getInterface/getImplementation(...) methods, and added a trivial Characters.isHexadecimal(int) method to be needed later for a JSON parser.
discard ff4f9be Update for GeoAPI changes (more review of upgrade to ISO 19115:2014).
discard 2f092f4 Update for GeoAPI changes. Those changes are corrections for various errors in the upgrade to ISO 19115:2014.
discard f01e533 Removed developper guide (docbook), since it moved to the main web site as HTML5 page.
discard 1d25b25 Fixed a NullPointerException.
discard 77b4ee2 Isolate a branch-dependant import.
discard 0c3de2c Update for GeoAPI changes: replaced MD_CharacterSet code list by direct use of java.nio.charset.Charset. The reason for this change is that ISO 19115:2003 defined its own code list for character sets, while ISO 19115:2014 still define an MD_CharacterSetCode but the new definition does not enumerate any element and instead refer to IANA registry (http://www.iana.org/assignments/character-sets/character-sets.xhtml). Consequently there is no need anymore to handle the ISO 1 [...]
discard 0dd5644 Minor simplification.
discard 811f1ee Replaced the 'Name' temporary object by a more generic <gml:CodeType>. This allowed us to get support for the 'codeSpace' attribute in NameAdapter.
discard 715e58a Moved the GML internal package from sis-metadata to sis-utility, because some GCO objects (e.g. LocalName) have a dependency to it
discard 285a208 Added @XmlTransient annotation on classes that can not (in current Apache SIS version) be (un)marshalled directly without the help of a JAXB adapter. The intend is to avoid accidental misuse.
discard 6552fce Documentation.
discard 4459ab3 Added tests and fixed XML (un)marshallig bugs accordingly.
discard 569a90a Bug fix: enum shall not be marshalled when null.
discard df8eea4 Ported the ServiceIdentification test from Geotk, and fixed XML bugs in this process.
discard 1025ddf Upgraded MD_Identification to ISO 19115:2014.
discard 243143d Minor vocabulary tuning.
discard f9bf136 Fix the way to search for the test file.
discard 3e1ae45 Added test.
discard 0152c3c Missing JAXB adapter for DCPList.
discard 7c4fc4b Added ServiceIdentification implementation.
discard df1dbd2 Upgraded more implementation to ISO 19115:2014 (SIS-94), in particular DefaultResponsibleParty which now delegates its work to DefaultResponsibility.
discard 84d0c67 Make MD_RestrictionCode tolerant to both "license" and "licence" spelling. The former was used in ISO 19115:2003 while the later is used in ISO 19115:2014. XML document shall continue to use the "license" spelling for now, until ISO/OGC publish the new XML schemas.
discard 8637ed1 Upgraded DefaultTelephone and DefaultContact to ISO 19115:2014. Those 2 classes were tricky, because those 2 standards changed the places were multi-occurrences of telephone numbers were managed. Keeping compatibility between both the old and new standards required DefaultTelephone to know about the DefaultContact instance that contains it.
discard 6bd0208 DefaultRecord uses array of primitive type when possible.
discard bbee7aa Completed DefaultRecord implementation (except for XML (un)marshalling) and added tests.
discard 08ad237 Initial DefaultRecord implementation. This commit implied a reorganization of DefaultRecortType internal for making it more convenient to DefaultRecord. We also tried to make implementations Serializable, but DefaultRecordSchema appears to be a blocking point (difficult to make it Serializable in a reliable way).
discard cc99d85 Missing class in previous commit.
discard 677928b Merged DefaultRecordFactory with DefaultRecordSchema in the hope to simplify, and added tests.
discard 681bdef Complete a little bit more the support of Record and RecordType (not yet tested). This is needed for support of ISO 19115 metadata - the lack of RecordType support was a problematic hole. However XML (un)marshalling is not yet implemented.
discard 4cb2e76 Slight generalisation.
discard 5cd0f8d Document better why we skip deprecated setter methods.
discard be94acc Side effect of upgrade to ISO 19115:2014: PropertyAccessor shall been able to read/write using deprecated getter/setter methods, while keeping the deprecated methods hidden from the list of standard properties.
discard 3f8b8a2 Added classes from the service package (SIS-94). Fixed an erroneous information in package javadoc.
discard 64aa7d1 Conversion from Double to Float needs to be tolerant to the precision lost.
discard 14b0174 Needs public access to ImmutableAffineTransform for code to be ported later.
discard 5194c11 Better implementation of DefaultSource.getSourceExtents() in order to avoid an UnsupportedOperationException at unmarshalling time.
discard 55ad68d Fixed bug in the number of dimensions of identity transform.
discard ef44c32 Added a (hopefully temporary) tolerance threshold when checking if the result of MathTransform concatenation is the identity transform.
discard 7e02919 Inline the matrix comparison. This is safer since it make more obvious where the infinite recersivity may happen (in the call to Matrices.equals(this, ...)).
discard 521b193 Fix a never-ending loop. Opportunist replacement of hard-coded values by constants.
discard 3838b37 Store the error terms for double-double arithmetic in AffineTransform2D and ProjectiveTransform.
discard 0293814 Missing methods.
discard d06c6d3 Ported a test.
discard 3088e5a Update for the changes in GeoAPI interfaces for the upgrade to ISO 19114:2014 (SIS-94).
discard 6cc8e6b Applied more patch for upgrading to ISO 19115:2014 (SIS-94).
discard 1c3e586 Uncommented the JAXB annotation for the new classes only (not yet for attributes in existing classes).
discard 284aa44 Javadoc.
discard ba3390e Renamed LegacyProperties as LegacyPropertyAdapter.
discard 568e4f9 Javadoc fix.
discard 75f5ac2 Added DefaultMetadataScope (SIS-94).
discard 356cdf7 Upgraded DefaultCoverageDescription to ISO 19115:2014 (SIS-94).
discard 49ab35a Fixed a NullPointerException.
discard 439fd09 Minor bug fix.
discard 6470cf8 Deprecate DefaultResponsibleParty, to be replaced by DefaultResponsibility as of ISO 19115:2014.
discard 7771d3e Integrated more SIS-94 patches (from Rémi) for update to ISO 19115:2014.
discard 1c07013 Declares the new metadata class as an implementation of GeoAPI interfaces.
discard f4aa362 Starting integration of new ISO 19115 classes from Rémi's patches.
discard b8edcd8 Simplify LogarithmicTransform1D by removing the explicit support of arbitrary logarithm bases. Instead, for the rare cases where someone wants a base other than e or 10, we concatenate the natural logarithm with a linear transform.
discard cb5a29d Completed and added tests for TransferFunction.
discard de43e1f Consolidation of Exponential / Logarithmic Transform1D.
discard 1fc6dcc Initial port of LogarithmicTransform1D and ExponentialTransform1D. Will need revision - we may simplify LogarithmicTransform1D by fixing the base to 10 or e, which are the majority of cases. Other cases can be handled by concatenating a LinearTransform1D.
discard b5cc10c Post-merge cleanup: rearrange import statements in order to isolate the test classes not available in GeoAPI 3.0.
discard 7f7931b Cleaning and port of a first non-linear class.
discard a8cb88f Ported PassThroughTransformTest.
discard 1b8b730 Ported LinearTransformTest.
discard 2eaf3d2 Ported ProjectiveTransformTest.
discard f2dcf92 Ported CopyTransformTest.
discard 6f1a797 Javadoc.
discard fb9d94d Minor javadoc formatting fixes.
discard d43c82a Ported PassThroughTransform.
discard 124631a Completed implementation.
discard 8354ebe Moved AffineTransform2D to the "j2d" internal package, for making clearer its dependency toward Java2D and for allowing reuse by other packages than org.apache.sis.referencing.operation.transform.
discard 52bb7d4 A little bit of consolidation.
discard d695e60 Maven incremental compilation has results opposed to the expected one.
discard 236cc98 Javadoc.
discard da6d7b8 Exclude provider package from javadoc.
discard 04981a3 Initial port of ProjectiveTransform and its dependencies.
discard ce2d0d3 Packaging change: moved ShapeUtilities in its own package. The purpose is to put in a separated package the internal classes having a dependency toward Java2D, in order to make easier to identify which parts may need to be replaced in a JavaFX application.
discard 6644199 Ported the code that apply a transformation on a Java2D Shape.
discard 8453aed Ported ConcatenatedTransform implementations and some of their dependencies.
discard f752375 Ported AbstractMathTransformTest.
discard 030983a Ported some tests.
discard 39056ae Back to referencing work: initial port of AbstractMathTransform.
discard cf01150 Rollback the restriction of FeatureType name to TypeName. While FeatureAssociationRole.valueType in ISO 19109 was suggesting that FeatureType names were instances of TypeName, the evidence is not strong enough. So we keep GenericName for now as a conservative approach.
discard 37e2f6c Restrict the FeatureType name from GenericName to TypeName.
discard 6db176e Trivial formatting: replace "// Related to JDK7" or "JDK8" or "GeoAPI" comment by a single "// Branch-dependent imports" line, in order to have a single label and to be more explicit about the purpose of keeping those imports together.
discard ccb5c19 Javadoc: replace the artificial example by an example closer to the URN that we actually deal with in spatial information systems.
discard a5b1bff Javadoc clarification attempt.
discard fdf3e56 Remove warnings that do not apply anymore to this branch. Those warnings will stay on trunk however.
discard 66a648c AbstractAssociation now implements the GeoAPI FeatureAssociation interface. This was the last SIS class to retrofit in a GeoAPI interface.
discard d84fbca AbstractFeature now implement the GeoAPI Feature interface.
discard 7bd9110 AbstractAttribute now implements GeoAPI Attribute interfaces.
discard f1df005 Implement the GeoAPI Property interface.
discard 4a29f81 Documentation updates.
discard d9cd97f Update for a GeoAPI change: the Set returned by ScopeDescription are now Set<CharSequence>.
discard 05bcbad Omit for now the convenience method without separator argument. Javadoc formatting.
discard ab62142 DefaultOperation now implements Operation. This complete the implementation of GeoAPI interfaces derived from ISO 19109. The next step will be to implement GeoAPI interfaces for feature instances (as opposed to feature types).
discard 2a41856 DefaultAssociationRole now implements FeatureAssociationRole.
discard 516d4bf DefaultFeatureType now implements FeatureType. We had to disable the check against infinite recursivity in 'isAssignableFrom'. The previous check was wrong anyway (we need to compare feature pairs, not only the base feature type). We will implement a new recursivity check later.
discard d9f75f8 Removed accidental ID.
discard 12e8df3 Added a converter for Units. This is needed for some feature operations.
discard 28404e6 Minor javadoc fixes.
discard da4bf17 Relax the result type of feature operations from 'AttributeType' to the more generic 'IdentifiedType'. This allow operations to return features.
discard d77166c Forgot this class in the previous commit.
discard a8f7f46 Added tests and documentation for the Names convenience class.
discard ad60d28 Move toGenericNames to DefaultNameFactory, nail down tests to SIS name factory, and add javadoc.
discard 53e22c4 Renamed FeatureType.getProperties as getPropertyTypes for consistency with getSuperTypes and hopefully for clarity.
discard 06d6b4f First draft of a set of convenience static methods in Names class.
discard d261c57 Use GeoAPI FeatureType interface. Like the previous commit for PropertyType, this is branch-specific.
discard 7b103c4 Use the GeoAPI PropertyType interface. This is a branch-specific change; the trunk will need to use the current hacks, since those feature interfaces are not part of GeoAPI 3.0 (the will be submitted for next GeoAPI version).
discard 89360f8 Retrofiting in GeoAPI step 1: class AbstractIdentifiedType implements IdentifiedType.
discard c92c86b Clarifications.
discard f15bef7 Added a justification of org.apache.sis.feature internal design.
discard ce240ae Ensure that the feature is not abstract before to instantiate it, and do not use reflection anymore for some clone implementation. The reflection was used for cloning a final field. But given that the classes that used them are not so big, the risk of removing the 'final' keyword may be reasonable.
discard dc6c40e Apply to association the same pattern than for attribute (2/2): added MultiValuedAssociation.
discard 9618eeb Apply to association the same pattern than for attribute (1/2): renamed DefaultAssociation as AbstractAssociation, and implement as SingletonAssociation.
discard 228c430 Added tests related to MultiValuedAttribute.
discard a25fccd Renamed an erroneous method name, and added test.
discard 45a9471 Continue on MultiValuedAttribute support.
discard 359900b Initial support of multi-valued attribute.
discard cdeb393 Added tests.
discard b209953 Trivial javadoc fix.
discard 4c43056 Test the plugin of custom Feature quality evaluation procedures.
discard c201044 Additional test and bug fix in the evaluation of Feature quality.
discard a69ca99 Added tests.
discard 16395e5 More tests.
discard a399f48 Document better the Feature.quality() contract and fix a hole in their implementation. The new implementation can now invoke the user-overridden methods, if any.
discard a67666a Missing test file in previous commit.
discard 2eb5665 Refactored DefaultFeature in two different implementation: DenseFeature and SparseFeature. The intend is to have an efficient storage method in the common case where all attributes are expected to be present (also known as "simple feature").
discard 30416b9 Minor javadoc.
discard 54e09da Attempt to make DefaultFeature more robust.
discard 2672e7f Implemented the String representation of Feature in a tabular format.
discard 8a20493 Modified PropertySingleton for its new use in DefaultAttribute.getValues() (later method not yet provided).
discard d232772 Added a convenience 'getName()' method in Property. The previous GeoAPI model did the same.
discard 0a23269 Renamed 'properties(boolean)' as 'getProperties(boolean)' and 'superTypes()' as 'getSuperTypes()' for consistency with other feature classes, and also for analogy with java.lang.Class.
discard 73b9d56 Added tests for 'toString()' implementation.
discard 5c36bad Javadoc.
discard cc70cde Added a test for a property overriden in the sub-type.
discard cc6dcd4 Test consolidation.
discard 9dbe7d0 Avoid javadoc references to items that may not be provided.
discard cb18574 Added a multi-inheritance test.
discard d37f50f Added more tests.
discard 28a4019 Renamed FeatureType.characteristics as FeatureType.properties for conformance with common usage (I'm not sure that ISO 19109 "characteristics" was exactly the same thing, since ISO seems to use "characteristics" in a broader sense than "properties"). Also provide better check about whether a property overrides a property of the super-type, and whether is overriding is legal.
discard 16ebf2a Moved common dependencies to core/pom.xml file.
discard 3fa2ed5 'validate()' method now return a DataQuality report instead than throwing an exception when a property does not met the constraints.
discard 4d938f3 Use IllegalArgumentException instead than planing to add an IllegalAttributeException. If we want a more specific exception, we will define it in SIS rather than GeoAPI.
discard 1f59d82 FeatureType.isAssignableFrom(FeatureType) needs to be safe. While in theory checking the name should be sufficient, in practice we may have FeatureType of the same name (even if the name is scoped) but different properties. So we will also check the property names and types.
discard e7d140e Trivial formatting.
discard 5710de2 More efficient implementation of DefaultFeatureType.isAssignableFrom. Document the fact that the check is based of type name only.
discard ff81cfc Added basic tests for Feature Associations.
discard 2278bfe Added DefaultAssociation as a complement of DefaultAssociationRole, so we have the complete set of expected java classes. The intend is to help to take those properties in account while working on DefaultFeature internal.
discard 6f5f2dc Added AssociationRole and Operation (derived from ISO 19109). We are not yet sure about what will be the final version of those types, but we are better to add them now in order to allow our code to take them in account.
discard cda51cf Consolidation: add package-internal class as place-holders for GeoAPI interfaces not yet standardized. The intend is to allow us to write the code in a way that anticipate the fact that Attributes will not be the only kind of Properties in a Feature (other properties will be Associations and Operations).
discard 41138d7 Removal of the PropertyList class, since the approach allowing a [0 ... n] cardinality for Attribute instance has been abandoned (see comment in commit 1593149 for more details). The case of PropertySingleton still needs to be re-evaluated.
discard 30ec45c Attempt to simplify the feature model. The ISO 19109 specification said that attributes may have a [0 ... n] cardinality, but does not said how multi-occurrences should be represented. There is 2 ways to represent an occurrence of n attributes:
discard 5622eab Renamed SingletonValue as PropertySingleton (previous name was confusing, because we make a distinction between property and value), and provide an initial draft of PropertyList.
discard c5ef28a Replaced the 'NumberRange<Integer>' cardinality by a pair of minimum/maximumOccurs as int. This is an anticipation for the GeoAPI interface which would not know about the Range type, and also for performance reason since the maximumOccurs appear to be requested often.
discard de91e51 Fixed a hole in type checking: need to wrap subList. Note that this is only a partial fix since it does not protect agaisnt null value. Furthermore, other holes still exists (e.g. in listIterator()). We are only performing the checks on a "best effort" basis.
discard 13bd65b Added more verifications of attribute validity.
discard e4c6b01 More documentation.
discard 0f41d32 Fix broken links in javadoc.
discard fb3c31e Initial support of Attribute in Feature, for now only in the case of [0...1] cardinality. This cover the vast majority of cases and is handled in a special way for lower memory consumption. We still need to implement the multi-values case (cardinality [0...n]) and add test and documentation.
discard 8c2d498 Added more Feature tests.
discard 081cf0f Removed the @scmUrl taglet, since JDK 8 does not accept tags inside <a href="..."> element.
discard e44734c Initial draft of SingletonValue, to be used under the hood by DefaultFeature implementation.
discard df9f4d4 Minor JDK 8 specific change: inherit Iterator.remove() implementation when appropriate.
discard 2a3d251 Created an initially empty sis-javafx module for Google Summer of Code development.
discard 6ff570e Attempt to fix encoding issue when viewing from a web browser.
discard e7e077a Enable javac and javadoc HTML checks. This implies: - Moving MathML formulas in a separated file - Avoid using the <s> tag in CommonCRS - Fix misplaced <p> tags in NetCDF AttributeNames
discard 9ddc2e1 Added tests for units of measurement.
discard 77f77ad Added an @include taglet for allowing us to reference MathML formulas in an external file. Note that the Javadoc team in OpenJDK is also considered to add an @include javadoc tag, but we do not know if and when this may happen. This commit allow us to get this functionality in the mean time. This is needed in order to workaround the javadoc tools in JDK 8 which does not accept unknown HTML tags.
discard 37bb2a2 Added tests and package javadoc.
discard 9c340f5 Complete the DefaultFeature changes proposed on February 24th. It is not yet a complete Feature class, but should have enough for Shapefile reader needs for now.
discard 0ef7b98 Starting application of DefaultFeature changes proposed by email on February 24th: Replaced getRecord() et setRecord(Map) methods by getAttributeValue(String) and setAttributeValue(String, Object).
discard 2229d29 First version of support classes for DefaultFeature.
discard 6d4cf24 Bug fix: can not seek in the area between buffer limit and capacity.
discard cb7845f Test a code path for non-seekable channel.
discard 63586d5 More tests when seeking ahead in the output stream.
discard 3da3a04 Upgraded the NetCDF version.
discard 17a0402 Minor post-merge cleanup.
discard 8becb02 More tests.
discard c903331 More tests, especially regarding mark/reset operations.
discard d62a289 Fixed ChannelDataOutput.getStreamPosition().
discard 14bbdc8 More tests. We have an issue with the getStreamPosition() when writing individual bits, which will need more investigation.
discard d049e52 Added more tests (contribution by Rémi Maréchal).
discard abde40d Renamed static constants.
discard 1a56b15 Added 'writeBits' method.
discard 683bedc Share common test code.
discard bccb4fd Move more common code to the ChannelData parent class.
discard c856ae6 Factor the common parts between ChannelDataInput and ChannelDataOutput.
discard 3ab43c8 A (buffer, channel) pair similar to ChannelDataInput, but for write operations (contribution by Rémi Maréchal). This will be needed for adding write capability to our data stores (Shapefile, NetCDF, GeoTIFF, etc.).
discard 40f7fd0 JDK8-specific: use the new .BYTES constants where appropriate.
discard 80b6490 Added a README file for helping peoples to find the source code.
discard 7e99d1a Removal of all Maven APT pages except the root one, since we do not generate Maven site anymore. The APT content moved to Javadoc or to SIS web site.
discard db66243 Update the SIS Javadoc stylesheet for JDK8. In this commit, we also modify the way stylesheet is provided: instead than overwriting the standard stylesheet with our own, we keep the standard stylesheet and provide a separated file which overwrite only the part that we need. This protect us from future stylesheet change in the JDK (there is some changes from JDK 7 to JDK 8) and also avoid the licensing issue of commiting a file derived from the Oracle file on the SVN. The [...]
discard 7dd602a Change in the approach: do not ignore anymore javadoc build failure. Instead reduce the amount of checks. We make this change because the previous approach were leaving temporary files in the javadoc directory. The inconvenient is that we lost warnings about invalid HTML or references.
discard 6820566 Moved the javadoc configuration from <reporting> to <build>. The intend is to generate javadoc with "mvn javadoc:aggregate" instead of "mvn site".
discard 8d59e98 Fixed more javadoc errors identified by JDK 8.
discard 6cbe6e3 Fixed wrong @link references.
discard 1d2b30e The "initialize" phase for the "reserve-network-port" goal was too aggressive: it trigged network port reservation even for simple tasks like "compile" or "javadoc". Use "pre-integration-test" phase instead. One possible issue is that the "start-jetty" task also uses the "pre-integration-test" phase but need to be executed only after the port reservation. A quick test suggested that tasks in the same phase are executed in declaration order. We hope that this assumption i [...]
discard 3462b22 Fixed more JDK8 javadoc warnings.
discard db4b324 More JDK8 warning fixes.
discard f0b5b0d Fixed other JDK8 javadoc warnings.
discard 75d49f1 Added <caption> elements or summary attribute in HTML tag, because they are now required by JDK8 javadoc tool.
discard a0cfec7 Replace the JDK8 placeholder by use of java.time package.
discard 564bf5a Move the "date string to ISO 8601" method to the NetCDF module, because it was used only in the context of NetCDF file. This move will make easier to replace the JDK8 methods by java.util.time formatter.
discard 5d90cbc Resolved a few warnings.
discard 6d98043 Complete missing information.
discard cf5b26d Added browse link for Git mirror.
discard c34d258 Add ISO 19162 to the list of (partially for now) implemented standards.
discard 95e9857 First draft of a DOAP for SIS.
discard 746aa95 Update for JDK8 changes: Logger.logrb(..., String bundleName, ...) deprecated in favor of logrb(..., ResourceBundle bundle, ...).
discard 79c42e3 Use version 0.4 of the sis-build-helper plugin for better stability on Jenkins.
discard c5f821a Replaced masks by calls to JDK 8 "toUnsignedInt" methods for readability.
discard b15c7af First round of replacement of JDK7 placeholders by JDK8 API.
discard 34800f8 JDK8 javac needs this transitive dependency at compile-time.
discard f332d66 Fixed compilation errors.
discard f2908a7 Workaround the removal of ConfigurationImpl.getInstance() method in JDK8.
discard ecc7066 Updated NetBeans project.
discard f077819 Change artefact versions from JDK 7 to JDK 8.
discard d6ce9bf Cleaning for new development cycle: remove deprecated methods.
discard d93242f Minor corrections.
discard dae8272 Prepare for next development cycle: update version number.
discard 84ba53a Upgrade the parent pom.xml version.
discard d258573 sis-build-helper inherits from the root pom.xml instead of core/pom.xml. This avoid a cyclic dependency reported by Maven 3.2.
discard ed04ea6 Upgrade for NetBeans 8.0 (optional).
discard 14388b9 Add explicit resources for English locale, even if they just inherit all their resources from the default locale, in order to allow the "--locale en" option to work on non-English systems.
discard 648d7ba Minor corrections related to the release process.
discard 1517bf1 Trivial javadoc formatting fix.
discard 3f9dc58 Remove the CHANGES file because not unmaintained. This file still exists on the branches and tags prior to SIS 0.4. Update the copyright year in the README file.
discard 3dc1bb5 Added a warning in javadoc of contains(Envelope, boolean) and intersects(Envelope, boolean) methods that their API may change (see SIS-172 for this issue). Users are advised to use contains(Envelope) and intersects(Envelope) instead for API stability.
discard 62329a2 Added AbstratEnvelope.contains and intersects method expecting only an Envelope argument, without boolean. Those convenience methods cover the vast majority of cases, and are added in anticipation to SIS-172. The intend is to reduce the risk that a fix for SIS-172 would be an API break.
discard 51bb343 Update the URL to the NetCDF Attribute Convention for Dataset Discovery web page. Link provided by David Neufeld on the mailing list.
discard af705ac Moved LatLonPointRadius to the same package than DistanceUtils (for now - pending refactoring as a geometry class), as suggested on the mailing list.
discard 1391a41 Omit unecessary class name in static method calls.
discard 5a3c602 Added a 'crs' sub-command, bug fix in colorized formatting, and javadoc.
discard 7459492 Partial revert of LatLonPointRadius to its state before we made it a GeneralDirectPosition subclass. I wrongly interpreted 'radius' as the radius from Earth center, while it was the radius around the circle center. Note that this class may be refactored as a geometric object in a future SIS version.
discard cc05756 Minor javadoc.
discard 47df7db Added tests.
discard 18ee422 Javadoc.
discard d849288 Upgraded maven-surefire plugin.
discard 8fe9a4e Minor javadoc fixes.
discard 9d2bddc Updated the copyright year from 2013 to 2014.
discard 73a1b37 Added package info documentation.
discard 9e6d6e1 Completed TensorParameters. Still need more tests.
discard dab9631 TensorParameters API tuning.
discard e0abb20 Renamed MatrixParameters as TensorParameters, which describe better what the class is.
discard a6d14dd ParameterFormat should include a column about parameter obligation (mandatory / optional).
discard 4d2669e Missing datum detection when SIS is used with non-SIS implementations.
discard 5ef8f13 Wrong names in OGC parameter names for False Easting / False Northing.
discard 9e9f770 Initial port (incomplete) of matrix parameters support.
discard c13b39d Provides a pseudo-WKT for parameter descriptors, for compliance with AbstractIdentifiedObject contract.
discard 703e0f1 ParameterGroup.toString() now delegate to ParameterFormat.
discard e40451a Complete the support of ParameterFormat.setPreferredCodespaces(String...).
discard 4f7d480 Complete the cleaning of ParameterFormat. We still have to add some more tests.
discard bcadd34 Added a debugging tool.
discard 6bf9564 Initial port of ParameterFormat (in order to implement ParameterDescriptorGroup formatting), and partial cleaning (not yet completed).
discard ba08d9f Implemented the clear() method and added javadoc.
discard 4adad2c Added tests and javadoc.
discard 882d412 Added tests.
discard 3546cd7 Improve implementation of parameter groups.
discard 4954e3e Initial port of DefaultParameterDescriptorGroup together with a few tests.
discard acf1821 Fixed javadoc sentence.
discard 3469dc2 Initial port of parameter groups, to be used as inspiration for DefaultFeature and DefaultFeatureType implementations.
discard 0484fcb First draft of a DefaultFeatureType implementation containing the attributes.
discard 9ec326a Change in method name policy in Builder class: explict "add" and "set" verb for differentiating the methods that overwrite the previoius values from the properties that accepts multi-values.
discard 6ed9bd7 Use the Map approach in AbstractIdentifiedType for allowing extension with new properties in the future. This is the same approach than AbstractIdentifiedObject. We will provide a builder in next SIS version for making construction easier, similar to the ParameterBuilder we just experimented.
discard adefd18 Added an example in Builder javadoc, minor other javadoc fixes and tests.
discard 5745d66 Continue Feature work: complete DefaultFeatureType based on the DefaultParameterDescriptor experience. Despite the API being intentionally similar, there is no relationship between those two classes because they are different concepts.
discard 082bfda Added more tests.
discard 69285a2 Refactored the builder: moved all identification information (i.e. properties related to IdentifiedObject) to a new super class, to be shared by the Datum, CS and CRS builder to be provided in a future SIS version. Renamed the remaining of DescriptorBuilder as ParameterBuilder for clarity.
discard 0540ab0 Clarification of GenericName <-> ReferenceIdentifier mapping. Attempt to simplify DescriptorBuilder with an API which handle "name" and "aliases" as just "names", like GML does.
discard ec5275b Renamed some 'DescriptorBuilder' methods and added new methods for metadata properties.
discard 25754d3 Added a ParameterDescriptor builder in the hope to make the task easier. Provided an example in javadoc for "Mercator (variant A)" projection.
discard 9a5bd5d Bug fix in validation of ParameterValue of type double[].
discard 70fffb2 Added a test.
discard 09d0b26 Added a test case.
discard 1bbb681 Change in DefaultParameterDescriptor implementation: replace the minValue, maxValue and unit properties by a Range property. The Range objects contain information about whether the bounds are inclusive or exclusive. This change also simplify a little bit the DefaultParameterDescriptor implementation.
discard 81a206b Initial draft of support classes for DefaultFeature.
discard 90897be Missing dependency for test executions.
discard 6045c90 Maven site simplification: remove CSS customization in all sub-modules (note: this is unrelated to Javadoc CSS). Keep CSS customization only in the root (because easy to define and less intrusive than CSS in sub-modules). Rely on Maven default for all sub-modules. This allows us to remove '<module>/src/site/resources/css/site.css' symbolik links from all modules. Most of the time this change allows us to remove the whole 'site' directory. We make this change because Mave [...]
discard b0ed5aa There is no module javadoc.
discard 5e57775 Maven site: menus need to be inherited.
discard adfa748 Maven web site simplification: use a single site.xml configuration for all modules, and remove API pages that we do not plan to maintain.
discard 6894692 Complete the replacement of {@note} and {@example} custom taglets by CSS.
discard 9b3f0f1 Javadoc simplification: replace some custom {@note} tags by CSS. Advantages: * Easier to maintain since editing the CSS produces immediate result (no need to recompile plugin and javadoc). * More control on the title ("Note", "API note", "Implementation note", "Note for implementors", "Compatibility note", etc). * Allows to use {@link}, {@code} and other usual javadoc tags. * Better rendering in IDE help window.
discard e354701 Remove the site/apt/index.apt files that do not provide any useful information, or APT files that repeat the information existing in the package-info.java file.
discard 6f96d6b Removed the @website taglet, because the Maven generated site is not the SIS main web site. The javadoc to be released should not contain links to the Jenkins builds.
discard 8d06d38 Choice of WKT 1 keyword needs to be performed by GeodeticCRS, not by subclasses.
discard b9af1af Version numbers must match the ones declared in the pom.xml file.
discard 1be3126 Try to upgrade more Maven plugins in case it would help avoid exceptions reported by the Jenkins server.
discard b09ed6a Needs a more recent maven-site-plugin for fixing the NoClassDefFoundError during site generation.
discard 7309af1 New attempt to declare the UCAR repository only in the NetCDF module, since a few experiments with Maven 3.1.1 suggests that the exception previously seen with Maven 3.0.4 has been fixed.
discard c0c177e Faster surefire-report, and disable UCAR repository when searching snapshots.
discard dddd3f1 Minor javadoc: override getDatum() in order to show it at the right position in subclass javadoc.
discard c2b42fd Be more specific in the choice of 'castOrCopy' static method to invoke depending on the object type. This is necessary for avoiding never-ending loop if the user choose to implement both CoordinateSystem and CoordinateReferenceSystem interfaces in the same object.
discard 8564d34 Look at the type explicitely declared by GeoAPI in order to determine if we shall check for the "Abstract" or "Default" prefix in the implementation class name.
discard e854886 Fixed javadoc warnings.
discard 5ee2146 Attempt to fix reported performance issues in logging: - Use a single monitor instead of two. - Cache MessageFormat and use the existing StringBuffer.
discard d6f3f8c Renamed Convention.versionOfWKT() as majorVersion(). Removed Convention.getNameAuthority() from public API.
discard 13ec4cf Fix indentation of PrimeMeridian and Axis in WKT 2 formatting. assertMultilineEquals(...) does not ignore anymore the leading spaces (i.e. the indentation). Fix tests accordingly.
discard 63c8812 WKT 2 formatting of CompoundCRS.
discard 7c724e5 Added test for GeocentricCRS WKT 2 formatting.
discard 961b8ad Modified the Formatter.setContextualUnit method in a way that allow us to set the unit even when we do not know the quantity type. Miscallaneous correction in javadoc and added/moved tests.
discard 2677bb2 WKT 2 formatting for other CRS that inherit the AbstractCRS default implementation.
discard 12429f9 GeocentricCRS and GeographicCRS now share their WKT formatting code.
discard 81ae40e Minor javadoc formatting.
discard d6e2917 Javadoc, and add units in WKT 2 formatting of parameters.
discard 15bdaaf Implemented WKT 2 for ImageCRS and TemporalCRS.
discard deb6510 WKT 2 keywords for VerticalCRS and EngineeringCRS.
discard f6c5101 - Format "Anchor" element for all Datum. - Documentation fixes in "@return The WKT element name, which is..." descriptions.
discard 57ce188 WKT 2 formatting for DefaultPrimeMeridian.
discard 4802d89 WKT 2 formatting for DefaultEllipsoid.
discard d7dcbd5 Minor adjustment to GeodeticCRS WKT formatting.
discard 72a4488 WKT2: initial support of GeodeticCRS formatting, except for its datum.
discard 3fed741 Added formatting of UNIT[...] element inside AXIS[...]. This requires knowledge about whether the enclosing CRS has specified a CS-wide unit.
discard fe7be99 Added formatting of MERIDIAN[...] element inside the AXIS[...] one.
discard a5fcbbd WKT bug fix: the citation element inside ID[...] needs to be wrapped inside a CITATION[...] element.
discard 1a76d09 WKT: switch to camel case for easier reading of keyword made by combination of two words (e.g. TIMEEXTENT -> TimeExtent, BASEGEODCRS -> BaseGeodCRS). Provide a KeywordCase enum for letting the user choose his preference.
discard 8cd67cc Added check for coordinate system validity, more conformant code list, and documentation fixes.
discard 3c2f8c3 Partial support of WKT2 formatting of AXIS elements.
discard e25dfd5 Javadoc update, and check for compliance of WKT CS element.
discard fa8d27a Partial support of WKT2 CS element.
discard 4cfe024 ISO 19162 requires use to consider negative conversion factors as invalid.
discard 4ab4705 Tuned WKT formatting of UNIT elements.
discard e440499 ISO 19162 compliance: there is restrictions on the places where SCOPE, AREA, REMARKS, etc. can appear.
discard ab4ad05 Simplified the check for whether we need to add a separator before the next element. Javadoc fixes.
discard 30f0af8 WKT2 formatting: - Completed ID[...] with the URI[...] inner element. - Formatter provides information about the enclosing element (necessary for the above URI[...]). - Consolidation of Formatter.getLinearUnit()/getAngularUnit() in a single getContextualUnit(...). - Explicit requests for new lines instead of trying to guess automatically - the later was too convolved. - Javadoc.
discard 0bc8689 Implemented WKT in DefaultParameterValue.
discard 3b5b765 Simplification: try to be less surprising to the users: - Getter methods clone the returned array, like what many libraries do. - If no value (i.e. setValue(null) is invoked), unconditionally use the default value. Do not check anymore if the parameter is mandatory or optional.
discard 62d4720 Simplification: removed an other abstract class which was not so helpful.
discard d7b5675 Simplification: removed an abstract base class which doesn't implement enough services. Various javadoc fixes.
discard 57eb36f Added an implementation note related to previous commit.
discard 2efad66 Move axis minimum and maximum values in the property map for consistency with the policy adopted in the rest of SIS regarding ignorable / non-ignorable metadata. This is also consistent with the factory method in GeoAPI.
discard 4674aef Minor javadoc formatting problems.
discard 3916b69 Moved some explicit DefaultParameterDescriptor arguments to the properties map. Javadoc clarification, and modification in the stylesheet for matching the most common usage.
discard 6936ba1 DefaultParameterDescriptor.equals was not comparing 'valueClass'. Also clarified javadoc.
discard 70c9b09 Moved a ParameterDescriptor test which was actually a ParameterValue test.
discard 86b8e5f Ported more tests.
discard 144a639 Added tests.
discard 042daa5 Ported DefaultParameterDescriptor.
discard be38488 Ported AbstractParameterDescriptor.
discard 70c4dea DefaultParameterValue cleaning.
discard a19085d Initial port of 2 basic map projection parameter classes. While not really in the scope of SIS 0.4 RC, we need those classes in order to move GeneralParameterValue WKT formatting code out of the Formatter class.
discard e95816e Minor javadoc.
discard 47bb837 Moved 'getName' private method back to its original location. This has been made possible by the previous commit on WKT Formatter.
discard 6ab8f41 Simplification attempt of Formatter: remove the GeneralParameterValue special case (this case will be handled by the 'formatTo' method of implementation class) and remove 'getName(IdentifiedObject)' (case now handled by implementation class).
discard 1941e0d Moved some Formatter code to the appropriate FormattableObject subclasses, in order to reduce the size of Formatter.
discard d6b25fa Trivial javadoc uniformization.
discard cdf07ea Moved mocks to the modules that use them.
discard 0d06359 Moved org.apache.sis.io.wkt from the sis-referencing module to the sis-metadata one, in order to allow us to use it with identifiers. This is because the WKT 2 syntax is slightly more complex than the WKT 1, so it may be worth to define ImmutableObject as a FormattableObject subclass for letting it do its job itself.
discard d129ef5 Initial implementation of ID[...], except for the URI inner element.
discard 0202cf7 VERTICALEXTENT shall apply rounding toward floor and ceil as appropriate.
discard b4f3785 Partial support of TIMEEXTENT element. Non-supported aspects are documented in SIS-163.
discard e93543c REMARKS element not allowed in WKT 1.
discard 85d5a46 Syntax colors for SCOPE, EXTENT and REMARKS elements.
discard 1055704 Switched the tests to stricter WKT2, and minor javadoc fixes.
discard a5dd12c Initial support of WKT2 UNIT[...] elements.
discard cc4fdbb Initial support of VERTICALEXTENT.
discard 3c17151 WKT2 formatting support for SCOPE, AREA, BBOX and REMARKS.
discard 97717a0 Enable a previously ignored test.
discard f699342 Remove internal 'Immutable' subclasses. Make Colors and Symbols cloneable instead.
discard a4c19b2 Define WKTFormat as a subclass of CompoundFormat, in order to give control on the creation of the NumberFormat or DateFormat to be used for the WKT values.
discard 19e5af9 Fixed GeoAPI version in documentation.
discard 0fee7e1 Removed unnecessary ObjectStreamException from the method signature. Despite the Serializable interface mentioning this exception, it is omitted in the JDK code itself when not needed. Even the JDK public API sometime force us to use an other exception type (e.g. java.text.Format.Field).
discard 1d6f40e WKT formatter needs to double the quote character if it appears inside the quoted text.
discard 0eb0a14 Remove the 'PENDING_NEXT_GEOAPI_RELEASE' flag from the development branch. This flag will need to stay on trunk.
discard 24e0264 Switch to GeoAPI-SNAPSHOT on the development branch, for synchronizing the WKT2 work. This applies only to the SIS development branches - trunk will stay on GeoAPI 3.0 official release.
discard f2cb79c Removed the text about "Apache SIS extensions to WKT 2", because it appears that latest ISO 19162 draft now support DerivedCRS.
discard b1f053d Fixed an ArrayIndexOutOfBoundsException and added tests.
discard 5e32f9c Minor resources (typographic quotes) and javadoc (examples formatting).
discard 3754d27 Added a check in the GeneralEnvelope class for range validity, and added JUnit tests.
discard bc51b5c Javadoc and more complete implementation of CRS.getHorizontalComponent.
discard f98ef1f Renamed 'getFooCRS()' as 'getFooComponent()' and completed javadoc.
discard 7d70e59 Port of CRS.isHorizontal, CRS.getProjectedCRS, CRS.getVerticalCRS and CRS.getTemporalCRS methods.
discard 1200d38 Tuned the API for setting paired brackets and code symbols, and use it in tests for more redeable String constants.
discard 4964fe5 More refactoring for taking in account the WKT 2 format.
discard d9cedd2 Refactored and simplified the Convention enum in light of the upcomming WKT 2 standard. Partia port of WKTFormat.
discard b94677b More javadoc clarifications about whether we are talking about WKT 1 or WKT 2.
discard 3db8f27 Modified some javadoc in order to said whether we are talking about WKT 1 or WKT 2.
discard ca1edb5 Documentation clarification, fixed EPSG codes for geographic 3D CRS and added tests.
discard 91d3cc9 Upgraded NetCDF dependency.
discard 492a0eb Added test.
discard 1682c5d Added CommonCRS.geographic3D() method.
discard 70b1fbe Renamed GeodeticObjects as CommonCRS.
discard 2410d17 Added GeodeticObjects.geocentric() method.
discard e861a66 Modification in axis comparison: when comparing in "ignore metadata" mode, ranges of values are not ignored if the range meaning is "wraparound".
discard cb62b94 Provide Extent information for world-wide CRS.
discard 1f7de15 More tests.
discard 6a80964 Added more tests.
discard e1e9ae9 Javadoc fixes.
discard 82bc863 Added tests.
discard 6dcb17c Better names for vertical CRS.
discard 7f96e68 Added tests.
discard bb23eb7 Added crs() implementation for vertical and temporal enums.
discard ca20e1c Javadoc and minor code tuning.
discard 1c5b0d2 Missing check.
discard fc42069 Implemented DefaultCompoundCRS.forConvention(...).
discard 134cd02 Provide a partial implementation of CRS.forCode(String).
discard bb1777f Enable the tests that were ignored because of the lack of "CRS:84".
discard fa171f4 Added GeodeticObjects.normalizedGeographic() method.
discard fa69845 Added overridden methods and a test case for AbstractCRS.forConvention(...).
discard 1bff667 Initial support of AbstractCRS.forConvention(...).
discard 24b29d9 Override AbstractCS.forConvention(...) in each subclass in order to ensure correct return type.
discard 521d134 Implements the AxesConversion.POSITIVE_RANGE case.
discard 9587e91 Moved AbstractCS.forUnit(...) to the internal implementation of AxesConvention.NORMALIZED. If we want to provide the functionality of 'forUnit' in public API in a future SIS version, we will be better to do that in an ReferencingObjectBuilder class instead.
discard 6059685 First draft of an AbstractCS.forUnits(...) method.
discard d17145f Implemented AbstractCS.castOrCopy and added documentation.
discard 552dcae First draft of AxesConvention.RIGHT_HANDED support.
discard 3fe3c12 More conservative check for perpendicular axis: accept grid coordinate systems.
discard a0424f5 Modify CoordinateSystems.angle(...) API in order to let user know when the angle sign give no indication about whether the coordinate system is right-handed or left-handed, and clarify javadoc.
discard 8b7aecd Javadoc.
discard ada77a3 Initial port of ComparableAxisWrapper, and try to make AxisDirections utility methods more 3D-aware.
discard f7b3816 Javadoc.
discard b19a6ae Trivial javadoc clarification.
discard 834ba4b Initial proposal of an AxesConvention enumeration.
discard b774742 Removed the AbstractIdentifiedObject.setNames(Collection<ReferenceIdentifier>) because whether that method was invoked or not was JAXB-implementation dependent. Instead design AbstractIdentifiedObject in a way that should work the same on all supported JDK versions.
discard 432a88d Missing file for the previous commit.
discard 3178571 AbstractIdentifier.getNames() collection should be live, because JAXB implementation writes directly in that collection at unmarshalling time.
discard 882c830 First draft of a GeodeticObjects.geographic() method.
discard b61c5f2 Added a note in javadoc about immutability and thread-safety.
discard 7f6cf92 Added tests for DefaultGeodeticCRS.
discard 0bdfe55 Ported DefaultGeographicCRS and DefaultGeocentricCRS.
discard 354152e Minor javadoc formatting.
discard fe66515 Added partial GML 3.1 tests, and a note about our incomplete support of GML 3.1.1 (SIS-160).
discard fa657a2 Ported EngineeringCRS.
discard f41c40c Trivial renaming of local variables for more consistency.
discard 45ec466 Minor javadoc clarifications.
discard 631cac6 Fixed wrong package names in {@link} javadoc tag.
discard f96125f Enable test of 'gml:id' value.
discard e9c7198 Added missing adapter for allowing <gml:verticalCRS> inside ISO 19139 metadata, and added tests.
discard 041e5f9 Minor javadoc formatting.
discard ed543f2 Ported DefaultImageCRS.
discard 6b19333 Minor refactoring: define the datum field in subclasses instead than in the AbstractCRS parent class.
discard 2e5f079 Ported DefaultTemporalCRS.
discard 9cb3933 Ported DefaultVerticalCRS.
discard 63ceecc Ported DefaultCompoundCRS.
discard 974b3ee Retrofit the AbstractSingleCRS subclass in its AbstractCRS parent class in an effort to simplify our class hierarchy. This is based on Geotk experience where it appears that the distinction between SingleCRS and "general CRS" is useful in interfaces, but not necessary in the implementation classes.
discard 0109dad Ported AbstractSingleCRS.
discard a558b2a Omit a javadoc {@link} more distractive than useful, and added some javadoc to AbstractCRS.
discard 3e0387e Ported AbstractCRS.
discard 0913eb5 Added safety checks against accidental changes of immutable objects.
discard 8efc914 Complete JAXB annotations in the Coordinate System package and add tests.
discard 1cec75f Test classes shall use strict math.
discard e3e77f0 Misplaced file.
discard 2294ade Consolidate the styling of Maven web site.
discard 1b12926 More reliable comparison of geodetic objects, which need to check more carefully about their type.
discard 7732884 Added WKT formatting of matrix parameters.
discard 4d07e15 Removed a temporary hack which is not needed anymore.
discard 0bdf854 Added missing JAXB annotations for DefaultCoordinateSystemAxis, and marshal its "uom" attribute in the same way than <gml:MeasureType>.
discard 1cfe2a4 Completed the JAXB annotations for datum.
discard 3057aab Replaced accidental nobreak spaces by ordinary spaces. Changes appear only in comments.
discard 462a7cb Completed unmarshalling test for DefaultEllipsoidalCS.
discard e8f3948 Consolidate XML tests and first draft of an DefaultEllipsoidalCS test.
discard dac4f76 Added package JAXB annotations for coordinate systems (forgot to apply "svn add" before previous commit).
discard 9dd2b66 Added package JAXB annotations for coordinate systems.
discard 216d8f6 Added tests.
discard 701c484 - getPositionVectorTransformation was assigning the 'tZ' value to the wrong matrix element. - toString() should prefer Unicode identifier (opportunist consolidation of CharSequences in this process).
discard d832770 Added a serialization test for NamedIdentifier.
discard 119a5c5 Replaced AbstractIdentifiedObject.hashCode(...) by a simpler computeHashCode(), because the previous approach did not worked well for caching hash code values.
discard 7da5f46 Bug fix: equals(Object) shall not use the "cached hash code check" optimization for any comparison mode other than strict.
discard 9fd4c68 Need more accuracy when formatting numeric parameter values in WKT: do not round if the trailing fraction digits are not likely to be rounding errors.
discard c0da42d Isolate the hack related to WKT 1 parsing/formatting to a separated class (namely "Legacy").
discard 3eb846e Minor API adjustment: - BursaWolfParameters.targetDatum is optional - Formatter.setInvalidWKT(...) accept IdentifiedObject or Class argument.
discard d3162e1 Added JAXB adapters for coordinate systems.
discard 346afda Added test for VerticalDatum unmarshalling.
discard fef8847 Added a few missing javadoc overview.html.
discard 69a5b6e Compliant (un)marshalling of realizationEpoch.
discard be3206e Maven web site update: list modules explicitely, because links in Jenkins are broken (SIS-112).
discard cb6dfee Added tests for DefaultGeodeticDatum XML (un)marshalling, and fixed some bugs discovered in this process.
discard a4e6a85 Added a "stop jetty" execution after tests in the hope to improve build stability.
discard 64ea294 Update the RAT plugin, and filter the amount of reports produced by Maven. We omit reports on the plugins used for the build, which are considered build implementation details.
discard 823ef03 Exclude org.apache.sis.util.resources package from javadoc. Generate only aggregated javadoc, without per-module javadoc, for avoiding a build failure in sis-build-helper and also for reducing disk usage consumption and possible confusion caused by all the duplicated HTML pages. Note that we may need to define a profile for releases, since the later require per-module javadoc (we will revisit this issue during the next Apache SIS release).
discard 13e98b7 Removed redundant 'if (element == null)' check.
discard 95a8ebe Make CodeListSet tolerant to empty 'codeListValue' attribute at unmarshalling time (SIS-157). A warning message will be emitted.
discard 7872e99 Minor javadoc formatting.
discard d71fb13 Replaced the @Immutable annotation by javadoc, because the classes were immutable only under some conditions (SIS-156).
discard f199c27 Replaced the @ThreadSafe annotation by javadoc, in order to explain better the context or conditions (if any) for thread-safety to hold (SIS-156).
discard c390411 Removed 2 erroneous @ThreadSafe annotations.
discard 0669be0 Remove synchronization on XLink, since org.apache.sis.metadata.iso object are not synchronized anymore.
discard dcdd29c Minor javadoc improvement.
discard ff759d6 Removed Decorator annotation, which probably doesn't worth is weight (SIS-88). This annotation was used for documentation purpose only.
discard e1e5a8a Minor refactoring of <gml:identifier> support. This provides slightly better division of tasks and avoid creation of an intermediate object.
discard 31fae13 AbstractIdentifiedObject.getIdentifier() now build a URN in OGC namespace.
discard 886307a - Moved URIParser.xpointer to its own XPaths internal class. - Renamed URIParser as DefinitionURI, which describe better what this object is about. - Replaced the annotation on AbstractIdentifiedObject.identifiers by a pair of getter/setter methods, in order to get more control on the URN to be marshalled.
discard 2b4e062 Format gml:id in a way closer to the epsg-registry practice.
discard 11fbf47 Added tests.
discard 1f4071a Added a test for IETF BCP 47 language tag string parsing.
discard 09e164a Leverage more of the new JDK7 capabilities for parsing Locale.
discard 4fa2c67 More efficient replacement of ISO3 codes by ISO2 ones (avoid linear scan on all Locales).
discard fe47354 Parsing of dates need to take in account the XML.TIMEZONE value (patch by Guilhem Legal).
discard 9ef7e81 Added tests and more consistent references to http://schemas.opengis.net/iso/19139/20070417/resources/
discard 7b2b1b5 Revert the 'parse' method name change in Locales. The 'parseLanguage' was not really better, because it gave the impression that the method does not parse country and variant codes.
discard 0c03e88 When a warning occurs at (un)marshalling time, leave the 'source' argument to null for now. The previous attempt to provide a non-null value added more complexity than initially though, and we had no consistent value. In a future version, the Marshaller or Unmarshaller instance may be a more appropriate argument than what we had - but for now we wait to see a need for that.
discard ef034b1 PT_Locale.unmarshall(...) shall use language and country codes together when building the Locale.
discard 1f08761 Marshal country codes using the 2-letters code instead than the 3-letters ones (SIS-153), and consolidation of the way we handle language codes.
discard 17fbb3a Uses shorts intead than integers for resource keys. This is sufficient and avoid to fill the constants pool in ".class" files.
discard e36bbc4 Minor bug fix in the information that are reported in case of test failure.
discard ed1df35 Reorganized the metadata XML (un)marshalling tests in order to put them closer to the implementation classes used for the tests. The initial intend of previous layout was to keep together the XML tests. However this appears to be confusing (the test classes were not directly related to any SIS implementation classes) and not always practical since XML bindings with JAXB are sometime closely related to package-privated methods. The sis-referencing module was testing XML c [...]
discard 63ce761 Allow ReferenceResolver to check for empty metadata.
discard e6edc25 Slight modification of the policy about xlink:href. By default, write XLink attributes even if the metadata object is not nil. The XLink is then for informative purpose. This change is made on the assumption that this behavior will be less surprising for the users than omission of the metadata object from the XML output.
discard cda6d52 Minor consolidation in JAXB annotations, and complete JAXB binding on AbstractIdentifiedObject with capability to (un)marshall more than one name.
discard 5eb9c90 Adjust the GML version number when the namespace changed (was GML 3.2.1).
discard 135b818 Bug fix: the flag telling whether XML namespaces should be replaced needs to be copied to (un)marshallers.
discard 760633a More intelligent parsing of <gml:identifier> elements.
discard a0450fb Fix JAXB annotation on the identifier, and add tests.
discard b99c7f6 Remove the JAXB elements for GML 3.1 namespace.
discard 76fa791 Modified the semantic of APPLY_NAMESPACES_REPLACEMENTS property: if the boolean value is present, force or disable replacements.
discard bb59d62 Enable unmarshalling objects from an older GML namespace.
discard 0904cb6 Added FilteredStreamReader and modified the other FilterFoo classes in order to have a more uniform pattern.
discard a102a88 Use the encoding specified by the JAXB_ENCODING property.
discard c3c9ffa Allow disabling of namespace replacements.
discard b4de3ab First draft of namespace URI replacements done at marshalling time.
discard b35c42e Consolidation before to work on the GML versions problem.
discard 14d1c30 Patch by Guilhem Légal for supporting geometry objects in the GML 3.1 namespace. This is hopefully a temporary patch until we find a better way to support evolution of GML schemas.
discard ea0a65c Patch by Guilhem Légal for partial support of temporal objects in GML 3.1 namespace. This is hopefully a temporary hack, until we find a better way to support the evolutions of GML schemas.
discard 3fb1852 Patch by Guilhem Légal needed for allowing two different GML versions to co-exist. We do not yet know if this patch is temporary or if we will be able to find a solution for avoiding code duplication.
discard 0b6382e Added a temporary workaround for avoiding JAXB annotation conflicts while porting Geotk to SIS.
discard 237bef2 Added @XmlTransient annotation on classes that are not part of standards.
discard 14aebc9 Consolidation of the way we are handling units of measurement in XML (un)marshalling: - Units.valueOf(String) accepts URI with #xpointer(//*[@gml:id='m']) syntax as found in ISO 19115. - Consolidated the parsing of above URI and other syntax in a URIParser internal class. - Remove some unit checks from internal classes, to be moved as checks done by public classes in the hope to produce better error messages in case of wrong or missing units. - Unmarshall and test the [...]
discard aabcab8 Consolidation of XMLTestCase as a preparation for adding tests of referencing XML objects. Added some JAXB annotations for referencing objects and fixed the RS_Identifier adapter. Added a partial test case for PrimeMeridian as a proof of concept.
discard 9659b8b Added empty constructor for JAXB in datum objects. Added some JAXB annotations in the root referencing package.
discard 4903b8f Added tests.
discard 90db31f Ported more coordinate system types.
discard ddae8e6 Consolidation of the way axis properties are validated.
discard ede33ec Ported DefaultEllipsoidalCS.
discard 688cdce Ported DefaultCylindricalCS, and opportunist javadoc fixes.
discard 87342ab Renamed 'nameMatches' as 'isHeuristicMatchForName'.
discard f66047b Javadoc clarification, trying to emphase on the heuristic nature of 'nameMatches(String)' method. Also put the implementation in-line with what javadoc said regarding diacritical signs.
discard 7fbda75 Implemented the special case for the "D_" prefix in ESRI datum names.
discard 5aa0f78 Consolidation of IdentifiedObject.nameMatches specification.
discard e878337 Added tests.
discard 8d4c50b Added DefaultCompoundCS.
discard 956a55f Javadoc fixes and added tests.
discard 5769b09 Add missing 'equals' implementation. Rename 'dimensionOf' as 'parseAxisDirection'.
discard 5c3819c Ported the method for parsing a String to an AxisDirection.
discard f5431eb Partial port of DefaultCartesianCS.
discard f40038e Ported the swapAndScaleAxes static method.
discard 776f340 Partial port of AbstractCS.
discard 9d87fef Javadoc: try to provide more descriptive package description.
discard e6ef587 Initial port of DefaultCoordinateSystemAxis.
discard a5cbbc3 Ported DirectionAlongMeridian.
discard 6238d31 Consolidation: merged Directions with AxisDirections static class. Simplified the Directions methods by invoking the appropriate CharSequences method where appropriate.
discard 15b17ed Initial port of an internal class to be needed for parsing axis directions.
discard 2b0c79d Ported JAXB adapters for datum objects.
discard bd112b2 Added a few tests.
discard e409544 Added GeodeticDatum definitions for some common ones.
discard 739a9d4 Moved 'ellipsoid()' method before 'primeMeridian()'. There is no change of functionality in this commit. The intend is only to declare the methods that are more likely to be of user interest before the other methods.
discard 60a5367 Minor change in implementation of 'equals': check for (x instance Foo) before the call to super.equals. Not sure what would be the impact on performance, however this reduce the risk of errors.
discard 00a0daf Tolerance value relative to DoubleDouble.error is not reliable. Need to make it relative to DoubleDouble.value instead.
discard e596eff Simplification attempt: remove the Formattable interface. This interface was initially introduced for making easier to format subclasses of java.awt.geom.AffineTransform. However SIS will try to reduce direct dependencies to Java2D, which remove the main motivation for Formattable interface.
discard c2cde98 Added DefaultGeodeticDatumTest.testToWKT() test case.
discard 31ee549 Provides 'castOrCopy' methods in parent class. This will be needed for the WKT formatter.
discard 1f46412 Added some WKT formatting tests.
discard 2d6e8d0 Licensing: fixed erroneous header.
discard 9c3a26e More tests.
discard 38ad8de Added a creation and serialization test.
discard 80f89b4 Compute the date where to evaluate the position vector transformation from the given extent.
discard 933c6cc GeodeticObjectsTest.testGeodeticDatumMock() was actually more a StandardDefinitions test.
discard daf5677 Do not allow anymore null target datum in BursaWolfParameters.
discard ae6b18b Complete DefaultGeodeticDatumTest.testGetPositionVectorTransformation()
discard 730f2c5 Added GeodeticDatumMock for testing purposes.
discard 2fa8c09 First draft of DefaultGeodeticDatumTest (not yet completed).
discard e764c7b Added DefaultVerticalDatumTest.
discard 9f36f08 Added VerticalDatumTypesTest.
discard 26c37d4 Added GeodeticObjectsTest.
discard b69ef7b Added DefaultEllipsoidTest.
discard 1dd07ab Brings more consistency in property lists. Contains also an opportunist NullPointerException fix.
discard be6d174 Added import statements for javadoc links.
discard 166f698 Misplaced HTML attribute.
discard 068cff5 Copied properties reminders in javadoc.
discard 1e8cf2c Identified the magnitude of the difference between our calculated values and the EPSG ones. Verified that we get the same result when calculating from the pre-corrected values given in the EPSG example.
discard 4db406e Initial version of time-dependent BursaWolfParameters. The test case does not yet match the expected result according EPSG.
discard e311399 Let BursaWolfParameters be mutable (make defensive clones instead) in order to simplify their construction, make the code easier to read (easier to see which values are assigned to which fields), and protect the setPositionVectorTransformation(...) method from future constructor changes if any. The need to simplify the construction became more apparent with our first draft of time-dependent parameters.
discard d267cf9 Increase accuracy of BursaWolfParameters(Matrix, double, GeodeticDatum, Extent) constructor and add test case.
discard 2cc3510 getPositionVectorTransformation(...) API shall have arguments for geographic and temporal extent.
discard 0654c9f Javadoc formatting.
discard 95cb975 Trap zero values in matrix multuplications.
discard 4ce1e2c Minor javadoc updates.
discard 727affa Remove the boolean 'inverse' argument in BursaWolfParameters.getPositionVectorTransformation(). Instead, we will compute the inverse by a call to MatrixSIS.inverse(). The intend is to get a result closer to the identity matrix when concatenating transformations A -> B followed by B -> A.
discard afd8f91 BursaWolfParameters.getPositionVectorTransformation() now uses double-double arithmetic.
discard f0ed152 Removed the DoubleDouble hard-coded constants that can be calculated by deltaForDoubleToDecimal.
discard 7e8ef81 Take sign in account, and check for the domain of validity.
discard 0c1ff99 More tests.
discard ad459e1 Added a test case for deltaForDoubleToDecimal
discard 90abd42 Initial version of a 'deltaForDoubleToDecimal' method for estimating the difference between an IEEE 754 double value and its definitive value as defined in base 10 by international standards.
discard 4543572 Precompute all values of 10^n. This consume 5 kb of memory, but simplify the code and guaranteed performance. The performance issue was not a concern for fractionDigitsForDelta and fractionDigitsForValue, because those methods are invoked only once for a dataset. But performance become more an issue for floatToDouble and the upcomming method for completing the error term in double-double arithmetic (to be committed later), since those methods will be invoked for all data [...]
discard 1ad064c Slightly more extensive test of Numerics.getSignificand(...). In particular, we needed to ensure that it behaves as expected with infinity values.
discard 2358906 The previous commit accidentally contained sis-referencing changes which were not yet ready. Instead than reverting the commit, just add "TODO" comments for what need to be completed.
discard 5def6cc Renamed DecimalFunctions.convert(float) as floatToDouble(float), and minor change in the algorithm for improving the accuracy.
discard 0d37cdb Deprecated the MathFuctions.sgn methods, because standard JDK provides equivalent methods.
discard 0e4923c Added an utility method for widening conversions of values parsed from an ASCII file.
discard fef7fee Missing file from the previous commit.
discard a919cd3 Moved in a separated class the methods that are related to the string representation of IEEE 754 values. Those methods are not really "mathematic", and some more are going to be added. Having a separated class for them also clarify method and constant names (e.g. it is not clearer that DecimalFunctions.fractionDigitsForValue is about the fraction digits of the decimal representation of a IEEE 754 double).
discard 598c3fb Numerical functions.
discard 6cd27e8 Bug fix: ordering of metadata properties was ignoring the ordering specified in parent classes.
discard 2033c28 Minor javadoc changes (making some provision for planetary CRS). Moved some code for keeping static method together (no real code change).
discard 2877993 Added in the javadoc the note sent by email.
discard e3cad35 Union or intersection of NaN values shall produce NaN. Extends.area(GeographicBoundingBox) supports anti-meridian spanning (SIS-143).
discard 088e8f9 DefaultGeographicBoundingBox.intersect now handle anti-meridian spanning (SIS-143).
discard 7a7ffe9 DefaultGeographicBoundingBox.add now support anti-meridian spanning (SIS-143).
discard 5fd9a38 Partial work for SIS-143: DefaultGeographicBoundingBox shall support spanning of anti-meridian. This fix allow the box to stores such value, but the operations (union, intersect, area) are not yet anti-meridian aware.
discard e3c1de1 Relaxed again the tolerance threshold.
discard 4a71322 Added a null-safe Extents.intersection(GeographicBoundingBox, GeographicBoundingBox) convenience method.
discard e5e2179 More conservative fix for rounding errors: round to exactly the number of digits to be formatted, no more.
discard fcf1bb8 Added a Extents.area(GeographicBoundingBox) for providing a surface estimation.
discard fcfc0d8 Fixed a rounding error when formatting angles.
discard bc12f82 Minor javadoc fixes.
discard f042c87 MathML fix.
discard 3669456 Math functions.
discard 3701667 More javadoc.
discard 18e04b1 Added javadoc.
discard dfb63b5 Abandon the @EPSG annotation experiment. It was polluting a bit the javadoc and source files, and was more difficult to apply than initially though because the relationship was not always one-to-one. We will rely on javadoc instead.
discard f3cfd27 Matrices.toString(...) shall not append more '0' characters than the accuracy of IEEE 754 double precision.
discard 3772ea2 Fixed broken formatting.
discard 6f44d18 Added some tests for BursaWolfParameters class.
discard 18487ff Removed the convenience constructors. The original intend was to make direct instantiation of 'DefaultFoo' types easier, for example by avoiding the need to invoke Collections.singletonMap(DefaultFoo.NAME_KEY, name) in the common case where the user just wants to specify a name and no other properties. However experience has shown that it still not convenient enough. We should probably provide a 'GeodeticObjectBuilder' instead.
discard 7ebe3b8 Added an EPSG annotation for documentation purpose.
discard 4c5995f Case for sqrt(2).
discard 1ca2fff Renamed getAffineTransform() as getPositionVectorTransformation(), which is a more accurate description of what this method is computing. The corresponding EPSG operation method is 1033.
discard 75bc251 Fix a hole in DoubleDouble.sqrt accuracy.
discard 7213c76 Added a test case.
discard f0ccb50 Initial port of DefaultGeodeticDatum. The getAffineTransform(GeodeticDatum target) method will need to be revisited, since current implementation has no safety against concatenation of datum shifts between unrelated geographic areas.
discard cfae302 Minor javadoc rephrasing and compiler warning fixes.
discard 51b9bcf Added a note in documentation about the target datum, saying that target datum having a world-wide domain of validity are preferred.
discard 4325491 Trivial reformating for making the lines a little bit shorter.
discard 74974f5 Replaced the non-standard SIS sphere by the EPSG definition of GRS 1980 Authalic Sphere. The difference is 7 metres in radius length.
discard c9abff5 Moved VerticalObjects and TemporalObjects enumeration as inner enum of GeodeticObjects, as suggested on the mailing list.
discard b56e8a9 Minor refactoring in temporal datum name and in position of copy constructors.
discard 73616f0 Make the test string a little bit longer in order to test with an index different than zero (safety against regression).
discard f846c7f Fixed an IndexOutOfBoundsException when a call to LineAppender.flush() is interleaved between two append (SIS-140).
discard 3669131 Moved DefaultVerticalDatum constants to VerticalObjects enumeration.
discard 9524bb9 Javadoc uniformisation, and minor API simplification in constructors.
discard a36a830 Moved temporal datum constants to the TemporalObjects enum.
discard dc304a2 Javadoc updates following the move done in previous commit.
discard 8a60180 Moved StandardObjects.Geodetic inner class as a standalone GeodeticObjects enum.
discard 8792b0b Minor refactoring: put the code that actualy create the Greenwich prime meridian closer to where it is invoked.
discard 071a217 Minor documentation tuning.
discard 1a8c430 Moved the DefaultPrimeMeridian.GREENWICH constant to StandardObjects.Geodetic.[FOO].primeMeridian(), and added documentation.
discard b51ea3f Moved DefaultEllipsoid constants to StandardObjects.Geodetic.
discard 8efac0d Minor documentation fixes.
discard 79583d7 Use double-double arithmetic in 'normalizeColumns()' method too.
discard b937ed0 Javadoc formatting.
discard 89e562d Initial port of BursaWolfParameters.
discard 40b8ff9 Minor javadoc fixes.
discard 09dd4ad Added missing TestSuite.
discard 46bee30 Maven execute test suites instead of individual test cases, for control on test order and test dependencies.
discard a385999 Slight reduction of test execution time.
discard ff6072a Special case for inversion of matrix having less columns than rows.
discard 7c49380 Support for NonSquareMatrix.solve(Matrix), and preserve DoubleDouble.error terms in NonSquareMatrix.inverse(). Added documentation and a few more tests.
discard a9451bb Initial port of Geotk code for inversion of some special cases of non-square matrix. Still need more work for better handling of DoubleDouble.error values.
discard e380b8e Specify the threshold for zero value as constant, for clarity.
discard fc46fe3 Minor simplification in the iterator over the flat matrix array.
discard e197a14 Ported from Geotk the handling of NaN values.
discard 69d20c6 Slightly more efficient 'getElements' for internal usage, and a little bit more documentation.
discard 0104cef MatrixSIS.solve(...) delegate to Solver.
discard d518bca Leverage double-double arithmetic in magnitude computations.
discard 2208e10 Improvement in Matrix string representation for making easier to spot "interesting" values.
discard b21928f Safety against some rounding errors.
discard 10d3b5d Fix the seed of random number generators for ensuring stable builds.
discard a2b95c3 Cleaning: remove unused 'precision' argument.
discard a9eba3a Post double-double arithmetic cleaning: trivial renaming of local variables for more clarity.
discard f063f84 Complete the use of double-double arithmetic in matrix inversion.
discard 046acb5 Renamed the STRICTFP constant as DISABLED. The old name was giving the impression that non-STRICTFP calculations were platform-dependant (by analogy with the Java 'strictfp' keyword), while it was not the case.
discard 3d27788 Add convenience method in DoubleDouble working on array. This make the code more readable in GeneralMatrix and Solver.
discard 56ed44a Added a STRICTFP static final flag for verification purpose only. First piece of double-double arithmetic in matrix inversion.
discard 88f49f9 Revert the previous commit that removed 'equals' and 'hashCode' from Matrix3/4 (more investigation has show that it was not a so good idea), and simplify in an other way by removing 'MatrixSIS.getExtendedElements()'. Instead, we perform that work in GeneralMatrix in a way that put unconditionally the error terms. Tthis simplify the actual computation by removing a bunch of '(foo == 0) ? foo : foo' operations. This is more apparent in the Solver class (not yet committed).
discard c224f55 Slight simplification of Matrix3 and Matrix4 by the removal of their large 'equals' method, replaced by a default implementation provided in SIS.
discard aebf9b0 Matrix multiplications now use double-double arithmetic.
discard 64f6877 Set error terms to "inferred" values, and stricter check for the error terms in isAffine() and isIdentity().
discard 40b741f Added a convenience 'warningOccured' internal method for a pattern which happen to occurs often in practice.
discard 2c0934e Reduce the logging level from "warning" to "config" when the Supervisor MBean is already registered.
discard f662dc4 Prepare for double-double matrix arithmetic: GeneralMatrix can now allocate space for the DoubleDouble.error terms (not yet used in this commit).
discard e3230e1 Forgot to remove extra digits in the previous commit... (last digits were rounding error).
discard e2c75c3 Adds a few constants for double-double arithmetic, especially for values related to PI and conversions between degrees and radians.
discard 4daad07 Fixed a NullPointerException during unmarshalling of an empty collection (SIS-139).
discard d8ec1f0 XML output shall take in account the --encoding argument (SIS-138).
discard efd1dec Added double-double arithmetic support as an internal class. For now we plan to use it only for matrix multiplications and inversions, where (in the particular case of SIS) accuracy is more critical than performance.
discard 6027da6 Moved Matrices.castOrCopy to MatrixSIS and added variants in sub-classes for consistency with what we are doing in other classes. Added missing 'swap' method for consistency with the rest of the ArraysExt class. Added a link to the pending part of GeoAPI for the javadoc parts that talk about grid coverages.
discard a528cee Javadoc (in particular, emphase that those methods does not check the Envelope CRS).
discard f6332ef Make Matrices.createTransform(Envelope, ...) more robust to envelopes spanning the anti-meridian.
discard 30cd3fa Added more test cases for Matrices static utility methods.
discard 48fdd8c Added tests for Matrices.createTransform(AxisDirection[], AxisDirection[]).
discard e582598 Ported more code from Geotk.
discard b75be3c Renamed createDimensionFilter as createDimensionSelect, and Javadoc editions.
discard 6e555eb Ported Matrices.createPassThrough(...) method.
discard 565d95f Use italic for single letter variable in math expressions.
discard a820390 Make sure that the comparator detect mismatched namespaces.
discard 5fdb966 Ported createDimensionFilter
discard bd66808 Minor tunings: * Renamed Matrices.create(int,int) as createDiagonal. * Removed dependency to java.awt.geom.AffineTransform in Matrices (the method will still work using the more generic checks). * Added a test case. * Trivial javadoc.
discard 3ae6831 Tests need to ignore the prefix when comparing element names (patch by Guilhem Legal).
discard df3c7d0 Fixed a few javadoc warnings.
discard 57e5c11 The DOM builder needs to be namespace-aware in all tests. This requires the prefixes to be bind to namespaces in XML tests.
discard f287ab7 More lenient comparison of XML documents in tests (patch by Guilhem Legal).
discard 2e765198 Initial port of JAMA code for matrix inversion.
discard 70c1fd7 Renamed SingularMatrixException as NoninvertibleMatrixException because the matrix can be non-invertible for other raisons than being a singular matrix.
discard 297c252 Added a 'solve' abstract method (not yet implemented) and test cases. Also modified the test case for running the arithmetic tests more than once with different random matrices.
discard 418b683 Replaced some inline values swapping by an explit 'swap' method for making the code easier to read. This helps also in Matrix.inverse() implementation. We rely on Hotspot optimization for producing the same performance than when the swapping was done inline.
discard 3a1360c Trivial javadoc adjustment.
discard b0f7cb5 Ported tests for AffineTransforms2D static methods.
discard 4285223 Ported static methods working on java.awt.geom.AffineTransform.
discard e868a8b Matrix-related exception extends the coordinate operation exceptions, because this matrix package is designed for use as CoordinateOperationStep.
discard da3b8be Added test cases.
discard dbc3e4b Added a test case for the transpose operation, and a bug fix.
discard fc56ddb More simplification attempts:
discard cd20916 Differs the report of random generator seed number only in case of test failure.
discard 35b71f1 Completed the set of tests related to constructors (not yet operation methods).
discard 977f260 Initial draft of test classes.
discard c281f90 Isolate the method related to java.awt.geom.AffineTransform in a separated class (more methods will be added later). The intend is to separate as much as we can the Java2D dependencies, in order to make easier to use SIS with other technologies like JavaFX or Android if we wish.
discard 07d1097 Added a package-private subtype for non-square matrix. The 'inverse()' method of that subtype will perform some additional check for independent axes before to attempt the matrix inversion.
discard e291a89 Simplication: a search in the code base has shown that 'negate()' was not used, so remove (for now) that method. Renamed 'transpose()' to 'setToTranspose()' for making clear that the result replaces the previous matrix.
discard 018f273 Ported some more utility methods.
discard ac72bd8 Remove the 'setToZero()' method, replaced by a 'createZero' constructor. This is because search in existing code base has shown that 'setToZero()' was used only for clearing a newly allocated matrix.
discard ae2329f Added an explanation about why many methods are declared final in this class.
discard f6c4851 Ported the factory methods.
discard 145d50a Initial port of GeneralMatrix, for all cases not covered by Matrix1,2,3,4. The 'inverse()' method will uses JAMA. We do not expose JAMA directly because inspection of the inverse algorithm suggests that JAMA uses a less square algorithm for non-square matrix, while the referencing module will need a different approach (to be committed later).
discard a50b80d Check matrix indices explicitely.
discard 2b15580 More IP review.
discard 9d41e55 Ported Matrix4.
discard ea4a5f4 Added get/setElements methods, and javadoc updates.
discard cdb22ef Javadoc and better error message in case of indices out of bounds.
discard c7b53c7 Fixed a test failure on Windows platform.
discard b22b956 Push Matrix1,2,3,4 in public API, and added a rational in the package javadoc. This is the same than what Vecmath (from Java3D) and Geotk did.
discard f3135d0 Initial port of Matrix3. Missing the 'inverse()' function, which will need to be adapted from JAMA.
discard c33b453 Ported the 2x2 case.
discard a0a14fd Port of a very trivial Matrix implementation of size 1x1. While trivial, this case does occur relatively often when computing derivative of a one dimensional CRS (e.g. the vertical or time axis).
discard cffdd1b Make MatrixSIS an abstract class instead than an interface, and partial port of Matrices utility class.
discard a04861d Moved org.apache.sis.math.matrix to org.apache.sis.referencing.operation.matrix for the following reasons:
discard eab2dd5 Avoid an exception when creating a link between two files on different Windows drives.
discard 5b229ae Initial port of matrix interface. We plan to use JAMA under the hood as the initial implementation (except for very small matrix), but we keep the possibility to change implementation in the future.
discard 37ec8e6 Minor documentation update.
discard b78c20f Modification of natural ordering of AbstractName: now case sensitive instead of case-insensitive. Javadoc clarifications.
discard 8cd395b Fixed a ClassCastException in Cache.get/put/remove(K).
discard e84f612 Renamed Spheroid as Sphere, which match better what the object is.
discard 2f2d01a Initial port of DefaultEllipsoid
discard 0a9c11a Fixed accidental upper-case.
discard 0b603ec Ported VerticalDatum.
discard 959d911 Added an implementation note.
discard d8d42ff Ported DefaultTemporalDatum.
discard 330e6fc Fixed erroneous version numbers.
discard be808b7 Minor javadoc fixes.
discard b98a015 Bug fix in Eclipse integration (patch by Olivier Nouguier).
discard d7477f9 Revisit the hashCode(...) method, since we had an inconsistency with equals(...) in the way to take in account which interface is implemented. While fixing the inconsistency, we opportunistically lined-up the API with the equals(…, ComparisonMode) one, in the hope to be more future-proof regarding possible SIS API evolution.
discard 3dd86d8 Follow the advice of warnings produced at Maven build, by replacing "@parameter expression=" in Mojo by "@parameter property=". Also exclude the META-INF/maven entries from the JAR files.
discard 93df509 Fix erroneous report of test failure.
discard c827ee1 Merge from the trunk.
discard 2507956 Documentation, formatting, and update for NetBeans.
discard 45e4913 Missed that file in the "Ported DefaultPrimeMeridian" commit.
discard 337e93b Minor javadoc fixes.
discard 1ce8059 Ported DefaultPrimeMeridian.
discard 297775e Ported DefaultImageDatum.
discard 2294da0 Ported DefaultEngineeringDatum.
discard 505b7a8 Ported AbstractDatum.
discard ef79411 Minor formatting and link fixes.
discard 12286cd Patch for SIS-133 ResourceCompilerMojo should execute only when properties files are modifiedcontributed by Olivier Nouguier.
discard 2d6ce96 Fix for SIS-132 Better support for eclipse IDE contributed by Olivier NOUGUIER.
discard cfc47f4 Merge from the JDK6 branch.
discard c38ddb3 Merge from the JDK7 branch.
discard 8872b7d Added more tests.
discard 9b29ce0 Ported AbstractReferenceSystem.
discard 59d0ccc Added some tests.
discard e954a6a Clarify a bit the policy on null collections in private fields of AbstractIdentifiedObject, and ported implementation of equals(Object, ComparisonMode).
discard b1d76f9 Documentation clarification (no code change in this commit).
discard aac938b Ported more code for AbstractIdentifiedObject.
discard 54feb8a More conservative inference of code space if not explicitely specified.
discard 5bc81b1 Factor out the localization part of ImmutableIdentifier in a separated method - Types.toInternationalString(Map, String) - so we can share it in AbstractIdentifiedObject.
discard e6007a4 Documentation fixes.
discard 1c3713a Partial port of AbstractIdentifiedObject. Compared to the geotk version, we abandon the case-insensitive search for keys in the property map. This was inefficient, made the code more complicated and appears to be rarely needed in practice.
discard 5a213f3 Ported from the JDK6 branch the workaround for Eclipse compiler, since experience shows that Eclipse still insists for redundancy on JDK7 too despite what the Java specification saids.
discard 3cc0837 Initial port of NamedIdentifier.
discard eb6523b Added capability to provide information about a SIS installation on a remote machine (only if explicitely enabled at remote JVM startup time).
discard e58686e Move the declaration of UCAR repo to the root pom.xml in the hope to fix the anoying exceptions reported by Jenkins.
discard c3a32aa Added tests and fixed a NullPointerException identified by those tests.
discard e22b2f4 Merge from the JDK6 branch.
discard b4d3212 Merge from the JDK7 branch.
discard b2386a8 Moved test resources to the standard Maven location.
discard b6a3feb Replaced the Feature from sis-shapefile module by DefaultFeature from sis-feature module.
discard ba506bc License header, reformating and annotations - there is no code change in this commit.
discard d963445 Fixed erroneous group id: shall be 'profiles', not 'storage' (was a copy-and-paste error).
discard bd9eda0 Removed all remaining reference to the French profile from the core metadata module. The profile is now fully isolated.
discard 2a12bf9 Initial copy of the Shapefile branch to the main development branch.
omit fda8823 Added gitignore file (contribution by Olivier Nougier).
omit e8b440a Added tests. This complete (for now) SIS-129.
omit 3f9043c Added a missing JAXB adapter required by some projects that depend on SIS.
omit 42bd470 Provide static methods for indirect access to the classes that were removed from public API.
omit 8f486ff Refactoring the French profile: moved the two remaining public classes out of public API for now, because their documentation are insufficient and they were extending internal classes anyway. We will provide instead some static methods with the minimal amount of API that we can expose.
omit 26fa11f Moved all French profile classes out of public API except FRA_[In]DirectReferenceSystem. This is because the properties added by this profile seem to be part of the 2013 revision of ISO 19115. Consequently all properties in this profile are expected to become unnecessary except for backward compatibility. The status of the two added classes, namely FRA_DirectReferenceSystem and FRA_IndirectReferenceSystem, is still uncertain because we are lacking documentation about the [...]
omit a3025ef Initial port of "profiles/sis-french-profile" module.
omit 4e03822 Fixed a never ending loop.
omit 4579258 Ported some tests.
omit c1fb8d6 Tuning WKT Formatter.
omit 0bdf3e5 Initial port of FormattableObject.
omit ecf251c Partial port of the IdentifiedObjects utility methods.
omit c57a325 Javadoc and minor tuning.
omit aabd782 Ported the Convention enumeration.
omit 63bbd3d Added skeleton classes to be needed by the WKT package. We will port the concreate implementations for those classes later.
omit 246bc15 Ported the WKT Symbols class.
omit 28fdd53 Move the Colors.Element inner enumeration to a top-level enumeration, since it is not specific to syntatic colors.
omit a136d39 Starting the port of WKT parser/formatter.
omit 62b6ace Ported a class to be needed for IdentifiedObject implementation.
omit ea117b9 Added a note about use of ESRI Geometry library in the NOTICE file, and upgrated the dependency.
omit b3159b5 Improved documentation and added links.
omit 0e5bee3 Merge from the JDK6 branch.
omit a05a87c Merge from the JDK7 branch.
omit c80a8f0 Create the distribution file automatically.
omit 4549b88 Simplify the Pack200 plugin by removing the support for various profiles. If profiles are wanted in a future SIS version, we will try to handle them in an other way.
omit bf784c7 Forgot to remove debugging code.
omit f6194a3 Initial creation of a new sis-feature module, with a copy of the Feature class from the Shapefile branch.
omit eed90e8 Merge from the JDK6 branch.
omit 500db59 Merge from the JDK7 branch, with omission of java.nio.file.spi.FileTypeDetector service.
omit ab3b664 Added test and more accurate detection of MIME type in the command-line application.
omit 9686eae Connect our MIME type detection mechanism to the system-wide java.nio.Files.probeContentType(Path). Make it available from the command-line.
omit da1fb94 Detect the "application/vnd.iso.19139+xml" and "application/gml+xml" MIME types (instead of only application/xml"). More types to be added later.
omit 8f0c3e2 NetCDF provider can now provide MIME type and file version number.
omit 28d980e Renamed 'canOpen' as 'probeContent'. As a side-effect, this change allow us to restore the 'canOpen' method that existed in SIS 0.3 as a deprecated method, to be removed in SIS 0.5. Note that SIS 0.3 javadoc clearly stated that the 'canOpen' method was going to change.
omit aebab17 Changed 'ProbeResult' type from enum to class, in order to allow implementors to specify additional information like MIME type and format version number.
omit d742869 SVN merge info.
omit 380f497 SVN merge info.
omit 8f61bf8 Merge from the JDK6 branch.
omit 0f716e8 Merge from the JDK7 branch.
omit 9fed57d Add support for <gmx:MimeFileType> (completion of SIS-119).
omit 3c865cf First draft of <gmx:FileName> support (SIS-119).
omit 9a760d2 Updated dependencies.
omit fe11885 More robust correction to SIS-120.
omit 317bac9 Make explicit that the date format is the default one rather than a custom choice.
omit bef69fb Force the formatting of leading fields in the case of longitude and latitude values.
omit a69cabf DefaultRepresentiveFraction needs to implement IdentifiedObject (SIS-122).
omit 1c4f459 Bug fix for missing minus sign (SIS-120), and allow optional fields (SIS-121).
omit 1c23509 More tests regarding the declared type of GeographicBoundingBox longitudes and latitudes.
omit e93ca2c In string representation, format the GeographicBoundingBox values as longitudes/latitudes instead than plain doubles.
omit 8926863 Added the skeleton for binary artifact.
omit 1fd1376 Minor adjustment in dependency declarations.
omit 645385d Merge from the JDK6 branch. This merge contains bug fix for problem discovered during the release process: timezone problem, removal of broken links in generated javadoc and adjustment of bundle filenames.
omit 00fed76 Merge from the JDK7 branch.
omit b1b9c20 Removed the link to source code and download from Maven repository in the text generated by the @module tag, because 1) the link to source code work only on the Maven web site, which is not anymore our primary web site (in particular, those links are broken on the web site and for those who download the apache-sis-0.3-doc.zip file), and 2) the Maven repository is not the preferred way to download the binaries for non-Maven projects.
omit 243b627 Change the name of the generated .pack.gz file to the same pattern than the one used for source and javadoc releases.
omit c0952db Fix filename prefix of source-release.zip file.
omit 04883a8 Merge from the JDK6 branch.
omit 38b07ab Merge from the JDK7 branch.
omit 537564e Fix an other timezone problem.
omit f44df1d TreeTableFormat needs to use DateFormat and NumberFormat when appropriate. This is required not only for better formatting, but also for fixing a test failure when executing the tests in various timezones.
omit ced1956 Fix a test failure when the path to the project contains a space (or any other encoded character in the URL).
omit 43f1fe4 Documentation fix.
omit 8832812 Force the GML namespace for the "id" attribute.
omit 472079a Added a XMLStore implementation, in internal package.
omit c18c150 Missing 'return null' statement when the given type is legal but no instance is available. This is different than throwing an exception when the given type is illegal.
omit b799d76 StorageConnector needs to be also able to provide InputStream and Reader objects. This support complicates a bit the task of closing the stream, in part because AutoCloseable is not guaranteed to be idempotent (ImageInputStream in not).
omit e082aea Improve documentation and add an option for document encoding.
omit d036950 Provide a XML.(un)marshall variant accepting the optional map of properties.
omit 2342252 Allow external modules to specialize factories (especially TemporalFactory). This is a temporary workaround while we are waiting for real dependency injection in SIS.
omit 4ff0ff8 Remove an erroneous assertion.
omit b3e79c4 Reduce the scope of the 'synchronized (loader)' block, in order to reduce contention in highly multi-thread environment.
omit e89baba Prefetch more bytes when the ByteBuffer doesn't contain enough bytes for allowing us to recognize the format. We try to prefetch more bytes only if necessary in order to avoid latency on network connections.
omit 66e091e Merge from the JDK6 branch.
omit e02407a Merge from the JDK7 branch.
omit 2d0632c Remove unconditional class initialization of CodeList in JAXB adapters.
omit 9167ea1 Exclude the @XmlType(name="...") attribute for now for allowing external projects to define their own type. This is a temporary patch to be reverted after we implemented the sis-temporal module.
omit 539c69b Revert back to straight Boolean fields instead than bitmask. The reason is that we need the exact reference to Boolean objects in order to determine NilReason.
omit 66c09d6 More conservative approach about exceptions and allowed OpenOptions in internal IOUtilities. Documentation clarifications.
omit 79835b1 Merge from the JDK6 branch.
omit e69e56f Merge from the JDK7 branch.
omit 9fc4232 Revisit the strategy about DataStore OpenOptions: move them as options given to StorageConnector, because we need to know them when the ByteChannel is created (having the options in DataStoreProvider.canOpen(...) was too late). As a side effect, the OpenOption are not anymore directly in the method signature, which will make the port to the JDK6 branch a little bit easier.
omit 2c3ceb0 Replace usage of the JDK7 java.nio.file.OpenOption by our own CodeList for the following reasons: - While java.nio.file.OpenOptions are mostly the same than the DataStore OpenOption for now, we have no guaranteed that it will still be the case in the future. - Sharing the same OpenOption between file and DataStore would allow to pass DataStore-specific OpenOption to java.nio.file, or java.nio.file-specific OpenOption to DataStores. It may not really hurt since java [...]
omit 5d6ddf0 First proposal of 'DataStoreProvider' using OpenOptions.
omit eaafc66 First draft of a DataStores static class creating the DataStore using ServiceLoader instead than a hard-coded class instantiation.
omit 147993a Use one instance of ServiceLoader per MarshallerPool rather than a system-wide instance. The purpose is to avoid issue with class loaders in two applications are loaded as two distinct OSGi modules.
omit 76e4008 Minor documentation clarification.
omit 750ef6b Removed PropertyAccessor.append(...), since it is not used anymore.
omit 334b324 Minor javadoc note.
omit 64ef404 SVN merge info.
omit 3456e99 Merge from the JDK6 branch.
omit 6e9fc67 Merge from the JDK7 branch.
omit edd53fe Second step in replacement of classes by ISO/OGC objects: - Replaced LatLon by DirectPosition (2D case).
omit 28a3a21 First round of removal of classes to be replaced by ISO objects: - Removed LatLonRect - Replaced some LatLon usage by DirectPosition2D.
omit d3e958c Metadata java.util.Map view shall check for NilObjects.
omit 0ecfe81 Implement AbstractEnvelope.toSimpleEnvelopes(), which is equivalent to Envelope2D.toRectangles() in a more general way.
omit b508b20 Some properties were wrongly using GO_Decimal adapter instead of GO_Real.
omit 25bda11 Support NilReason for Float and Double types.
omit a266832 Do not try to support a subset of primitive wrapper anymore. Support all of them (except Char for now), because we are still finding code using various primitive type wrapper in various corners.
omit 8c1b25a Support NilReason on Integer values.
omit 7b6c220 Cache the NilObjects created so far, and add support for nil InternationalString.
omit a73f62b Added comments explaining rational for the implementation choice, and drawbacks.
omit 60021f5 Renamed 'NilReason.getNilReason' as 'NilReason.forObject'.
omit 617dc74 Support 'nilReason' on Boolean values.
omit 4dac191 Documentation.
omit b51ae34 Ported the LatLonRect.toJavaRectangles() method to Envelope2D (part of SIS-69 task).
omit 02b3e18 One more text to move from Maven site to CMS pages.
omit a0974d6 Moved the WORLD constant from DefaultExtent to the Extents static utility class.
omit de2f89f Added convenience constructors for DefaultExtent.
omit 86ca00a SVN merge info.
omit f868945 SVN merge info.
omit 549689c Merge from the JDK6 branch.
omit e39c5e3 Merge from the JDK7 branch.
omit ba734ad Removed the FAQ, since it migrated to the main web site.
omit 06594e8 Removed the "Recommended code pattern" page, since it migrated to the main site.
omit 4c64097 Update the Ant script to reflect the change in release-management documentation.
omit 2ec96ee Updated the Ant script for the changes in release-management page.
omit db230fc Removed pages that migrated to the CMS.
omit 7ca5735 Added public code signing key for 74383E9D (Martin Desruisseaux)
omit 52f5f27 Removed documentation that migrated to the sis.apache.org site.
omit b9b42de More release instructions. The vote procedure is a copy of Suresh's "release management" page, adapted to APT format.
omit 952fff5 Miscellaneous documentation fixes (wording, spelling and formatting).
omit b9532a4 Initial draft of release-process page, derived from Suresh's page.
omit b7f2cca Initial draft of the release setup page. The release process page will be commited later.
omit a6580d6 Removed anchors since the TOC macro ignores them anyway.
omit 73437a1 Let Maven generates the table of content automatically.
omit 06fbef6 Upgrade some Maven build plugins.
omit 7adcd17 Trivial spelling fix: parseable --> parsable. The removal of the "e" is following the recommandation on http://en.wiktionary.org/wiki/parsable, which is also W3C usage according the above-cited page.
omit f9810b3 We will need the converters to work with arrays.
omit 193fa6a Slightly more accurate warning message.
omit c9b75ee More accurate warning message about what happen when a UUID or URI can not be parsed.
omit dd1d91f Simplify ISOMetadata by delegating all String <-> UUID conversion to the IdentifierMap.
omit 46b0756 Clarification about which property has precedence between XLink.href (a URI) and the "unparseable href stored as a string".
omit a5ea7ce Slight simplification of ObjectReference by removing the String representation of UUID, and using only the real UUID object instead. We are not loosing information in case of unparseable UUID because those attributes are used for marshalling *references* to metadata objects, not for marshalling the metadata object themselves. The UUID - even unparseable - associated to metadata are marshalled as String (rather than UUID) by ISOMetadata instead.
omit 5f13db2 Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
omit 768d2d4 Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
omit 0249196 Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
omit 3535e27 Merge from the JDK6 branch.
omit aad249f Merge from the JDK7 branch.
omit 415aecf Changed groupId of modules in the "core" directory from "org.apache.sis" to "org.apache.sis.core". Applied the same kind of change for "application". The "storage" directory was already that way. With this change, the "groupId" match exactly the directory structure.
omit 7ae25e4 Added missing @return javadoc tags.
omit 33876d1 Minor localization in log record, and a javadoc fix.
omit 7f9ca6f Merge from the JDK6 branch.
omit cae193a Merge from the JDK7 branch.
omit 99541f9 Workaround for an element which is randomly missing at XML marshalling time (JAXB bug?)
omit 18e0398 Copy constructors should accept null argument, in which case the behavior is the same than the default constructor. Experience suggest that this is often useful in practice, since the copy constructor is often used for copying an instance which may or may not exist, before to modify the values.
omit a7e2516 Replaced the previous extension mechanism, which didn't worked as expected, by an other mechanism based on @XmlAnyElement.
omit 53d96a6 Merge last-minute bug fix from JDK6 branch.
omit a84ee48 Merge last-minute bug fix from JDK7 branch.
omit c825d10 Bug fix in construction of localized remarks.
omit a7a2ae9 Merge the change from JDK7 branch which removed the automatic inference of OnlineResource.protocol property. This feature is considered not ready for the 0.3 release. See http://issues.apache.org/jira/browse/SIS-110
omit e1ca27c Merge the change from JDK7 branch which removed the automatic inference of OnlineResource.protocol property. This feature is considered not ready for the 0.3 release. See http://issues.apache.org/jira/browse/SIS-110
omit 2bd20fc Removed the automatic inference of OnlineResource.protocol property, because it was the only "automatic" property to date and we may need more though about a generic way to give user control on properties inference.
omit 4664863 Added a check for null argument, and trivial javadoc fix.
omit 4c3b0e4 Merge from the JDK6 branch.
omit 66df10d Merge from the JDK7 branch.
omit 9368e2a Added warnings about methods that are likely to change.
omit a92871a Added link to code review page, and copied wiki instruction for Eclipse integration.
omit 7f7423c Added Apache License header to all APT files.
omit 78d7bee Added deprecation tags for classes to be replaced by OGC/ISO equivalents.
omit c25b672 Merge from the JDK6 branch.
omit 67f9c10 Merge from the JDK7 branch.
omit f27a3df Refactor LatLon, LatLonRadius and LatLonRect as subclasses of DirectPosition and Envelope implementations (SIS-68, SIS-69).
omit f503186 Added Apache License headers.
omit c9cbfe9 Merge from JDK6 branch.
omit 64782e9 Merge from the JDK7 branch.
omit a089ead (NetBeans IDE configuration only): removed the symbolic links to the resources, replaced by a plain copy task, because the symbolic links seem to confuse some tools (RAT plugin, embedded SVN).
omit 81b8f9f Added missing license header in docbook source files.
omit 9a9437d Fixed two javadoc warnings.
omit d42dbbc Enable the {@scmUrl} taglet and document it. Also re-ordered the taglet list in alphabetical order as a side-effect.
omit 3ae9696 Update Maven plugin version, and declare NetCDF dependency as optional.
omit 02f6dea Merge from the JDK6 branch.
omit 367e82c Merge from trunk the removal of "-geoapi3.0" suffix in version number.
omit 7b5dd66 Replaced the "0.3-geoapi3.0" version number by a plain "0.3".
omit 49b42c7 - update and prep for 0.3 release rc #1
omit e8909ba SVN merge info.
omit 18fd90f SVN merge info.
omit 9668646 Merge from the JDK6 branch.
omit bea3f70 Merge from the JDK7 branch.
omit b591d8c Name of root node shall be derived from public interface rather than implementation class.
omit 0631ec9 Copied the introduction from the home page, and replaced the "getting started" instruction by a link to the wiki.
omit 8d326ea One more test.
omit 036c365 Added more tests.
omit 880939c SVN merge info, and post-merge fix.
omit 50926a9 SVN merge info.
omit 63fa941 Merge from the JDK6 branch.
omit 0cdb24a Merge from the JDK7 branch.
omit db9a8a7 Added a {@scmUrl} inline taglet for inserting links to test data in test javadoc.
omit 4073355 More tests.
omit 35969ed More tests.
omit 56d42f0 Ported ObjectReferenceMarshallingTest. Implied more work on gco:uuid support.
omit f083d32 Trivial reformating (indentation). No significant code change.
omit fce6740 Merge from the JDK6 branch.
omit 2a7fef4 Merge from the JDK7 branch.
omit fda98c8 More tests.
omit 4405629 More tests.
omit 9c3d148 Use CodeListSet / EnumSet in metadata objects when appropriate.
omit 61d5da6 Remove "xsi:schemaLocation" from the 'ignore' list, since this attribute is not used in those tests.
omit 6ce304e Added more tests.
omit bb3361a Merge from the JDK6 branch.
omit 19e8787 Merge from the JDK7 branch.
omit 06e3ba0 Refactoring of the test infrastructure in order to fix XML prefix, test Locale and test TimeZone more easily. For this purpose, we modified MarshallerPool in order to allow the constructor to parse all properties given in argument, build a template for them and use the template for all (un)marshaller creations. This is likely to be useful not only for tests, but also in production environment.
omit ca11ea9 Merge from the JDK7 branch.
omit 5aea830 Make the LocalName adapter consistent with the GenericName one.
omit 0a18af1 Test GenericName unmarshalling.
omit 13415e6 Fixed wrong marshalling of <gco:ScopedName> element.
omit ebaaf27 Added missing @return javadoc tags.
omit 4fdb1f1 Test GenericName marshalling.
omit 56fdfc0 Move mock objects in dedicated test package, and provide package-info javadoc.
omit 6d3b918 Safety against infinite recursivity.
omit 2e0e6ec SVN merge info.
omit a03d413 SVN merge info.
omit 2953ee6 Merge from the JDK6 branch.
omit 4047f8f Merge from the JDK7 branch. This fix a test failure which was caused by differences in JAXB implementation between JDK6 and JDK7.
omit b72e360 Be tolerant to JAXB implementation that do not insert the "gml:" prefix in element names.
omit 5b692aa Declare only the namespaces that are actually used in the package.
omit 781a4ec Merge from the JDK7 branch.
omit 8e48cfe TimePeriodTest must fix the timezone of its test.
omit ccc830d Added in the javadoc a warning about a shortcomming of AdapterReplacement, and try to take in account classpath changes in OSGi environment.
omit c173dba Added a few tests.
omit f0e1660 Replaced two ImmutableIdentifier private methods by a call to Citations static method for more consistent behavior.
omit de584b7 Need protected access for allowing other modules to define Vertical Coordinate Reference System implementations.
omit c994a66 Enable partial (un)marshalling of SC_VerticalCRS.
omit dbe7fee Enable XML (un)marshalling of TM_Primitive (temporal schema).
omit 1b1257c Ported the TM_Primitive adapter (temporal schema).
omit df6ea4f Replaced erroneous header.
omit 9a7ad0a Ported basic GML adapters, to be needed for TimePeriod.
omit c30f813 Minor javadoc fixes.
omit 62f96c9 Ported the GO_RecordType adapter, and enabled the metadata properties which were commented-out because of the lack of RecordType implementation.
omit 15f6f7a Complete the DefaultRecordType implementation.
omit 2d706ba Provides a real implementation for the automatically generated skeleton provided in the previous commit.
omit 2e774f7 Add the auto-generated stub for licensing reason (making clear that we start this class from scratch).
omit 40d0524 Ensure that we cleanup the thread-local variable even in case of test failure.
omit 867f52e SVN merge info, and post-merge fix.
omit 69b8b05 SVN merge info.
omit fda282e Merge from the JDK6 branch.
omit 3258941 Merge from the JDK7 branch.
omit 16ae918 Add tests.
omit dea492c Resolve a few "todo" flags.
omit 99d56c5 Add an internal method (to be removed on the JDK8 branch) to be needed later for some XML elements.
omit 00f5d36 No need for the propOrder attribute for unions.
omit adf0723 Added adapters for some quantities and unit of measurement.
omit c5d6936 Added adapter for ISO 19139 formatting of URI property.
omit 14566f7 Minor javadoc formatting.
omit 32fd7d3 Added JAXB adapters for ISO 19139 formatting of java.util.Date.
omit adcffc5 Marshal the userDefinedMaintenanceFrequency property.
omit 401a427 Use the WarningListener mechanism provided in the previous commit for reporting parsing errors.
omit 97524b7 Added a XML.WARNING_LISTENER property key in order to watch what may be going wrong during (un)marshalling. Also re-ordered the property order for using consistenly the same order everywhere.
omit 7dcb011 Relax method access from protected to public for allowing external projects to implement metadata factories.
omit 78c5883 Fixed a test failure due to a missing dependency to JDOM2 after the upgrate of NetCDF dependency.
omit 4487e82 Needs protected access for allowing the French profile "http://www.cnig.gouv.fr/2005/fra" to be defined in external project (for now) or separated SIS module (later).
omit fcee915 Ported a test.
omit 145951a Ported JAXB adapters for (un)marshalling of some metadata elements without their enclosing type. Those adapters are needed for the support of other OGC standards built on top of metadata.
omit 290ad45 Ported missing adapter for PT_Locale.
omit 2addea5 Added tests for PropertyType (part of 'gco' namespace in ISO 19139 XML).
omit 3f727ab Ported two tests.
omit e611b72 Safety guard against infinite recursivity in AbstractMetadata.toString().
omit 41bc67e Added checks against infinite recursivity and/or test cases for AbstractMetadata.equals(Object), hashCode(), isEmpty() and prune().
omit fb4a484 Fixed a random bug in the test case (was not a bug in the library itself).
omit f7a9854 SVN merge info.
omit ccfe2bd SVN merge info.
omit 96c1e8b Merge from the JDK6 branch.
omit 957cc4a Merge from the JDK7 branch.
omit 22e7c2e New method that needs to be implemented since the upgrate of UCAR library 4.3.16 to 4.3.17.
omit d9b5e5d Keep trace of cached object which were created with the default locale or timezone. Those cached objects would need to be cleared on localization changes, if we had listeners for that purpose.
omit 192c2f2 Declare the throwable in the LogRecord, to be omitted if the log is sent to the logger.
omit aed4b7f Reports the logging implementation.
omit 26d300a Updated NetCDF dependency.
omit 1e5d08a OSGi configuration: unregister listeners of undeployed modules.
omit d12027f SVN merge info.
omit 5901b4a SVN merge info.
omit d6d9c04 Merge from the JDK6 branch.
omit 979fb83 Merge from the JDK7 branch.
omit ecd68b4 Added a few missing @Debug annotations for documentation purpose.
omit 5078edf Replaced JCIP dependency by our own @Immutable and @ThreadSafe annotation for documentation purpose only. The intend is to avoid a trivial dependency which is very easy to avoid, to avoid the Retention.RUNTIME (we use Retention.SOURCE instead), and also because we noticed that some NetCDF library versions (at least the first mavenified ones) were bundling a copy of JCIP in their JAR, which was a potential source of conflict (probably harmless in practice).
omit d8c46f1 Moved the class that perform a system-wide service to the internal "system" package.
omit 46119db SVN merge info, together with post-merge correction.
omit 0495c81 SVN merge info.
omit 9703214 Merge from the JDK6 branch.
omit 7c04154 Merge from the JDK7 branch.
omit 2c014f4 Enabled support for ISO 19139 XML output on the command-line.
omit e6a0187 Simplified install() and added test case.
omit c314a98 Fixed NullPointerException.
omit 433e3a8 Some cleaning in MonolineFormatter.
omit 0fd5e85 Replaced usage of the deprecated "bgbackground" HTML attribute by the "style" one.
omit 7f4b49a More consistent contract for the 'About.configuration(...)' methods.
omit 627d3ac SVN merge info together with post-merge adjustments.
omit b5572f4 SVN merge info.
omit 40e87bc Merge from the JDK6 branch.
omit 3eb4399 Merge from the JDK7 branch.
omit fc88854 Documentation fix.
omit 20e22c8 Initial port of MonolineFormatter from Geotk, to be used in the console application.
omit 8497fd0 Use ISO-LATIN-1 encoding (as specifie by java.util.Properties contract) for more compact files.
omit 0425a6d Complete the "metadata" command and add a test case.
omit 31a41e0 Oups! Missing file in the previous commit.
omit 42bf8cd Initial draft of a metadata sub-command.
omit 50eedbf Tuned the help screen.
omit 537db1a More help information.
omit db768db Merge from the JDK6 branch.
omit 4cf4576 Merge the logo update from the JDK7 branch.
omit 2d32051 Replaced the Apache SIS logo on the build page, and updated sis-console description.
omit 5fbc11d Merge the "sis-app" module renaming from the JDK7 branch.
omit 7cab04f Renamed sis-app module as sis-console as suggested on the mailing list (SIS-105).
omit ab7e774 Allows the command name to appear after options, and minor tuning of the "help" command.
omit 4aa75c7 Separate version number from branch name for easier merges.
omit 59834f1 Added link to the Git clone (INFRA-5915).
omit 305e2be SVN merge info.
omit 4ebda03 SVN merge info.
omit b07e562 Fixed version number.
omit 0ea44fe Merge from the JDK6 branch.
omit 7cc82db Merge from the JDK7 branch.
omit 3330913 First draft of a "help" command.
omit 9451d40 Add application test and resource directories in the build configuration.
omit 29bd1f3 Renamed "dependencies.txt" as "content.txt" and "sis-bundle.pack.gz" as "sis.pack.gz".
omit 64b9dc9 Documment the new Mojo.
omit bac6636 Add support for dependencies list on platforms that do not support hard links.
omit 47ac0ef Ported the Pack200 creator from Geotk.
omit 129a748 Creates a list of dependencies on platforms that do not support hard links.
omit 03877d8 Complete the description and developers section of pom.xml, and collects the JAR files.
omit 5645461 Fix the directory where JAR files are collected.
omit c03e016 Minor javadoc fix.
omit 86a93f8 Added missing dependency declaration.
omit 2d694b6 First draft of the command line interface as a port of the About main class.
omit 58347d1 Minor javadoc fix.
omit d9d3df3 Minor javadoc fix.
omit 205ca05 SVN merge info.
omit 96ab69d SVN merge info.
omit 9dcb07d Merge from the JDK6 branch.
omit d289b10 Merge from the JDK7 branch.
omit 06a093c Merge from the JDK6 branch.
omit 5a7555a Rename SISCLI as console.Command in preparation for the implementation of a command-line tool. We use the "console" package name in anticipation for a possible future interactive tool using java.io.Console.
omit e415584 Merge from trunk.
omit 1bd50a2 Avoid usage of arrays in implementation since they were not strictly needed, and update the API to use DirectPosition.
omit d8ba09e Abandon usage of ${maven.version} property, since it seems to be a cause of various issues. Instead, fix the version to the latest stable Maven version available at this time. We will need to remember to upgrade this version number from time to time.
omit 3834e61 Added a Format enum (containing only BASE32 for now, but BASE36 could be added later), accessors for the format, accessor for the precision, and throws a ParseException in case of decoding error.
omit 1457b90 Re-enabled plugin executions.
omit 8994a66 Fix for SIS-103: Fix Eclipse errors in SIS contributed by Travis Pinney.
omit 9cb6307 Minor javadoc formatting.
omit b8c03fd Enable the @example javadoc tag.
omit 91a54ab SVN merge info.
omit c8a09e3 SVN merge info.
omit a71a9fb Merge from the JDK6 branch.
omit 17c3c75 Merge from the JDK7 branch.
omit 61bce63 Make the GeoHashCoe methods non-static for allowing configuration in a future version. Replaced the HashMap by a more compact and presumed efficient array of bytes. Upgrated the test case from JUnit 3 to JUnit 4 and integrate with other SIS tests.
omit 7c43956 Forgot that file in a previous commit...
omit 73c305e Moved org.apache.sis.util.GeoHashUtils to org.apache.sis.index.GeoHashCoder as suggested on the mailing list.
omit be03f4d Renamed DataStoreConnection as StorageConnector, as suggested on the mailing list.
omit 4928394 Replaced the "DataStore interface + AbstractDataStore" pair by a single abstract DataStore class, as suggested by email.
omit bf49ba3 Metadata.toString() is now localized, as decided by email two months ago.
omit 3102dc5 Documentation update: moved some content from index.apt to package-info.
omit c755f4e Documentation improvement (no code change).
omit e3d2a5d SVN merge info.
omit 6499548 SVN merge info.
omit 9039c3e Merged SIS-101 from the JDK6 branch.
omit b6e601a Merged SIS-101 from the JDK7 branch.
omit dc0aac6 Completed the move of QuadTree classes by moving GeoRSSData too (SIS-101).
omit 517fb9d Moved QuadTree and related classes in its own package, namely org.apache.sis.index.tree. Also moved from "sis-referencing" to "sis-storage" module. The only changes in this commit are import statements, dependencies in pom.xml files, and removal of trailing whitespaces. There is no other code change in this commit.
omit 08fc06e SVN merge info.
omit 602c9c5 SVN merge info.
omit 0e88500 SVN merge info.
omit 6d1e384 Reverted accidental commit of "sis-jdk7" url. Shall be "sis-trunk" for this branch.
omit 9179a0e Post-merge minor cleanup.
omit 2fab7a9 Merge from the JDK6 branch.
omit 10f3d4f Merge from the JDK7 branch.
omit e24d9fa Infers the LogRecord class and method names from the stack trace.
omit 0199499 Replaced the WarningProducer/WarningConsummer pair by a more classical and straightforward WarningListeners list.
omit b5343a2 Initial commit of NetcdfStore public API.
omit c9cbf8f First draft of a DataStoreProvider abstract class, and some tests with NetcdfStoreProvider.
omit ddf9070 First draft of NetcdfStoreProvider. Not yet completed: missing public API and test cases.
omit 627a5dc Added support for String (path) and ImageInputStream types for convenience, and added more tests.
omit fe01d98 ChannelDecoder constructor now expect an explicit ChannelDataInput, and implementation delegates the String decoding to ChannelDataInput.
omit 401e4a3 First attempt to provide a base class for DataStore implementation. There is some redundancies between this class and WarningConsumer for now. We will try to resolve those redundancies later.
omit 38dfdf5 More tests.
omit 6d1d05a More systematic creation of ByteBuffer, and leave the "rewind" operation to callers.
omit 2c26275 Some test cases for DataStoreConnection.
omit 3d4052a Move helper methods as member of OptionKey rather than static methods in Options. The initial intend was to hide those helper methods from public API. However they are harmless, so we may have more to win by keeping the code a little bit simpler instead.
omit 2ce7ca6 Added support for options (mostly URL encoding for now).
omit 3e1e853 One more refactoring: uses a more dynamic approach for producing views of different kinds.
omit 77ed86d More documentation, and anticipate the JDBC case.
omit b5d8df5 First draft of DataStoreConnection.
omit a5b3008 Added some tests.
omit b29e9e8 Take locale in account.
omit 0595296 Provides a WarningListener interface.
omit c705e54 Ported IOUtilities internal methods.
omit 0ade4ad Missing strictfp in test.
omit a8410ba Uses only StrictMath in tests, as a matter of principle.
omit 6b45366 Discard obolete marks.
omit 4b63e8f Minor documentation updates.
omit 74fa633 Complete site descriptors for storage modules.
omit 79cce2e Updated site descriptor XSD.
omit e5e9a31 Merge from trunk, and fixed URL to the site.
omit db8455d First attempt to put a logo.
omit c6d4b02 Replaced URL from "http://incubator.apache.org/sis" to "http://sis.apache.org".
omit c2ce409 First draft of a DataStore interface, very minimalist for now.
omit 0886fbf SVN merge info.
omit 9dd5f36 SVN merge info.
omit ee51b19 Merge from the JDK6 branch.
omit 2035ab9 Merge from the JDK7 branch.
omit d23eecd Updated project description as proposed by email.
omit 325c559 Moved ChannelImageInputStream in main code and added test case. This is a little bit cleaner than the strange beast living in the test directory that we had, and will be needed anyway when we will use some part of the javax.imageio package.
omit db2ea34 Extracted the classes common to all storage modules out of sis-netcdf, and provide them in a new sis-storage module. It would have been possible to wait to have a second storage module before to make this move, however it seems easier to perform the split soon rather than to wait, in order to allow us to setup the dependencies in their final form now.
omit 68d3f54 Allows InterruptedException to stop the reading process.
omit 11b77f5 Added tests for MetadataReader.
omit 7166221 SVN merge info and post-merge adjustments.
omit 5253159 SVN merge info.
omit 7bfa3b0 Merge from the JDK6 branch.
omit 4a91d8a Merge from the JDK7 branch.
omit d160251 Provide convenience methods for reading data in newly allocated arrays, since those cases are expected to happen more than once.
omit d801d5f Added ChannelImageInputStream in the test directory as a proof of concept, not to be used (at least for now) in the main SIS code. The main purpose of ChannelImageInputStream is to ensure that ChannelDataInput API is keep compatible with ImageInputStream API.
omit f82043c Added more tests.
omit 52b8604 Renamed 'DataInputChannel' as 'ChannelDataInput', because the previous name was suggesting that the class was a Channel implementation (which is not. It is not really a DataInput implementation neither, but still closer).
omit d056299 Minor renaming of a method name (given in parameter) for consistency with other method invocations.
omit 0a465c2 Moved some NIO services out of ChannelDecoder, in a new DataInputChannel (by analogy with DataInputStream). The intend is to make easier to reuse those services in VariableInfo for reading the actual variable data.
omit a9a0043 Added a GridGeometry implementation for the standalone NetCDF decoder.
omit 4b8941f Added GridGeometryTest.
omit 442f4e7 Tests Variable.getAttributes(String, boolean).
omit f1082dd Test Variable.getGridDimensionNames() and getGridEnvelope().
omit d327deb Test Variable.isCoordinateSystemAxis().
omit 72bc658 SVN merge info.
omit 0aeabb8 SVN merge info.
omit 0e6c659 Added placeholder for a GeoAPI 3.1 interface.
omit 1ccf453 Merge from the JDK6 branch.
omit 18c8e22 Merge from the JDK7 branch.
omit c6c961b Finished the implementation of 'VariableInfo' internal class.
omit e38b1df Arrays are sufficient for this internal API.
omit 06276b1 Starting test cases for NetCDF variables.
omit fd66c4d Moved the temporary method (while waiting for JDK8) in its own "JDK8" internal class.
omit e88c9ff Minor adjustments.
omit 21abae1 Added support for date/time units in ChannelDecoder.
omit 453c814 Missing interface implemented by the Statistics class.
omit cd57518 Case-insensitive search of attribute names.
omit 69c2331 One more placeholder for an upcomming JDK8 interface.
omit 799d3fa Renamed ObjectConverter.convert(Object) method to apply(Object) for integration with the upcomming java.util.function.Function interface in JDK8.
omit f1fe547 Number of dimensions, variables and attributes are defined by a signed integer according NetCDF specification This is a minor adjustment in the error messages.
omit 6b9f96d Minor re-organisation of ChannelDecoder internal methods.
omit b321eae First draft of a standalone NetCDF reader.
omit f64bcee Minor javadoc formatting, and added resources to be needed later.
omit ed793ca Added a DataStoreException in the NetCDF module for now, eventually to be moved in a more general storage module later if peoples agree.
omit e436c8a Added a few more tests.
omit 9d2d900 More generic creation of the list of Axes.
omit 885cb03 DefaultKeywords constructor shall accept an arbitrary amount of keywords.
omit 7d0731e Documentation updates, especially about definition of terms.
omit f192bc3 Avoid "georss" dependency in sis-referencing. This implies moving GeoRSSData and QuadTreeReader (which depends on GeoRSSData) to an other module, for now sis-webapp.
omit 1200d49 Try a tuning of site descriptors.
omit b5e8acc Added 'index.apt' pages for all modules.
omit c9beda0 Forgot this site.css file.
omit 4a5bde5 Fixed documentation errors.
omit a6d2a50 Added symbolic links to site.css files.
omit d5729be Moved references at the end of the class javadoc.
omit c6f78e5 Allow subclassing.
omit 17f73d1 Minor documentation precision.
omit b291aae Better separation of concerns: moved some code out of "internal.ucar" in order to leave only UCAR-specific code (as much as possible) in "internal.ucar".
omit 792bf34 Refactored the internal API: moved abstract classes to "...internal.netcdf" package, and the UCAR-based implementations to the "...internal.netcdf.ucar" package.
omit 3773baf Skeleton of test suite for NetCDF (mostly declaration of dependencies).
omit 7f7cb16 Ported more NetCDF-ISO mapping code.
omit 37ce50c Leverage DefaultTemporalExtent.setBounds(Data, Date) in NetCDF metadata reader, and remove the last direct dependency to UCAR library (so we can keep it optional).
omit 83300e8 Added DefaultTemporalExtent.setBounds(Date, Date) convenience method.
omit 4491857 Partial port of NetCDF metadata transcoder (not yet finished).
omit 1605c63 Renamed NetcdfMetadata as AttributeNames.
omit 093e51d Removed uncecessary <properties/> declarations.
omit b0cd42f Merge from the JDK6 branch.
omit f66d170 Merge from trunk.
omit 117587f Merge from the Android branch.
omit d482f60 Avoir a NullPointerException.
omit d5f1633 SVN merge info.
omit bffdf73 SVN merge info.
omit 1567e05 SVN merge info.
omit abbcbe7 Merge from trunk.
omit bd1fb33 Merge from the JDK6 branch.
omit 4c7d7c5 Merge from the JDK7 branch.
omit cc7e919 Avoid the "Test" suffix on an annotation which is not a test.
omit 9c5413e Renamed "sis-parent" as "parent" for consistency with the naming of all other group of modules.
omit 6fb2b23 Fixed URL in symbolic links and in CSS files.
omit a091ea6 Merge from trunk.
omit 5111c15 Merge from the JDK6 branch.
omit 8c8f27a Merge from the JDK7 branch.
omit a0f251e Updated IDE configuration for the new directory locations.
omit 554b753 Moved top-level modules in two groups: * core for sis-build-helper, sis-utility, sis-metadata, sis-referencing. * application for sis-app, sis-webapp.
omit 01fd950 Merge from the trunk branch. Cause this experimental branch to not build anymore, but we will try to solve this issue later. We need to perform this merge anyway before to re-organize the directory structure as suggested on the dev. mailing list.
omit 04e449a Merge from the JDK6 branch.
omit cd211a8 Merge from the JDK7 branch.
omit 1523f1e More simplification of the Logging class: only one global LoggerFactory instead than per-package instance. It seems quite unlikely that someone would want to use different logging framework (Log4J, common-loggings, etc.) for different packages. The old approach was actually a legacy of the time where we tried to configure the JDK LogManager instead than using a LoggerFactoy (attempts to configure java.util.logging.LogManager have been quite difficult).
omit 30a36f4 Simplified a little bit the API of Logging utility methods, use a single logger for all org.apache.sis.metadata.iso.* packages, share the same TestWatcher class in test cases instead than repeating @Before and @After methods.
omit ad5f7e3 Initial commit of "storage/sis-netcdf" module, with only the attribute declarations for now.
omit dafe19b Added warning messages when a property is discarded, and test cases.
omit 1f03e05 Renamed the internal "MarshalContext" class as "Context", for differentiating from the public "MarshalContext" class and for anticipating usage in slightly wider cases than just (un)marshalling.
omit caf096d Minor javadoc fixes.
omit 0df6498 SVN merge info.
omit 5a4990e SVN merge info.
omit f1df692 Merge from the JDK6 branch.
omit e31a81e Merge from the JDK7 branch.
omit fa961b7 Minor documentation update and one minor test.
omit d35254e Avoid invoking the getter method by reflection twice, on the assumption that values are asked soon after iterator traversal. This caching may be removed in a future version if it appears to be problematic - experience will tells.
omit d743704 Removed 'asMap' and 'identifierMap' cached values, since their use are not very frequent.
omit c035a9b Added the index column.
omit b665e39 More conservative serialization strategy.
omit 805711b Added Javadoc about the TreeTable.
omit 7d4cf50 Renamed the tree-table package-private classes: - Remove the "Metadata" prefix, which is redundant with the package name. - The "TreeChildren" name was problematic since they are node children, not children of the whole tree. - Emphase that the TreeTable is a view.
omit 26c3f58 SVN merge info.
omit 732654a SVN merge info.
omit 1365c8d Merge from the JDK6 branch.
omit c4132cf Merge from the JDK7 branch.
omit da3bfe5 Added more tests.
omit 52b6095 Implemented MetadataTreeNode.newChild().
omit 78dc536 MetadataTreeChildren.add(...) shall only add, not overwrite previous values.
omit d729e52 Test iteration over all possible children, including properties without value.
omit 94eacf5 Implemented MetadataTreeChildren.add(TreeTable.Node).
omit b1b39b2 Removed (for now) the AbstractMetadata.append(Object) method.
omit b6d3d7b Renamed 'shallowCopy' as 'append', with slight semantic change, prior removal. We will remove that 'append' method in the next commit because it is replaced by the copy constructors, and appending (or merging) metadata may be tricky since there is various way to merge bounding box, child metadata objects, etc. We do this commit prior removal in order to have a starting point in the history if we decide in a future version that we need append functionality.
omit 0f22477 SVN merge info.
omit 635fd5d SVN merge info.
omit c6e407d Merge from the JDK6 branch. Includes a preliminary version of metadata tree table, which implies a first working version of AbstractMetadata.toString().
omit 886c195 Merge from the JDK7 branch. Include a preliminary version of metadata tree table, which implies a first working version of AbstractMetadata.toString().
omit 1eceb49 Improved tree table formatting and added more tests.
omit 2ffd7af Enable AbstractMetadata.toString(). Not yet fully completed.
omit 1afa8d1 Override the default 'clear()' method with a more efficient implementation (easy).
omit 7daebd2 Added tests for the remove operation.
omit 230ec17 Simplify MetadataTreeChildren as a Collection implementation instead of List.
omit b65e599 Relaxed the return type of TreeTable.Node.getChildren() from List to Collection. The reason is that most usage (except widgets) doesn't need a List, and the List contract is difficult to meet in the metadata tree table views.
omit 000412f Minor documentation updates and one static method renaming.
omit d3124d0 Minor change in toString() formatting, javadoc et exception handling.
omit 7a9dc0b First draft of MetadataTreeTable (not yet finished).
omit 8d5f454 Added 'toString()' implementation for debugging purpose.
omit d958013 Fixed broken URL.
omit 1314d12 Minor adjustment for the upcomming MetadataTreeTable.
omit 66a7d59 Various minor updates in preparation for the addition of MetadataTreeTable.
omit 137f12f Corrections from FindBugs report.
omit dcc6459 Remove the check for write permission in CheckedArrayList and CheckedHashSet. It was not needed because ModifiableMetadata creates unmodifiable copies of those collections when 'freeze()' is invoked anyway.
omit 8e23a4c Minor adjustment in AbstractElement.Dates, and javadoc links.
omit 761b45e Resolved the exception that prevented us to declare quality.AbstractElement.dates as a writable element.
omit 01911b6 Ported more tests.
omit 397206c SVN merge info.
omit a107f80 SVN merge info.
omit d61b860 Merged the metadata synchronization removal (SIS-85) from the JDK6 branch.
omit 18e09ef Merged the metadata synchronization removal (SIS-85) from the JDK7 branch.
omit 26c79c0 Edit javadoc after removal of synchronization.
omit 2d59e5c Removed synchronization in CheckedArrayList and CheckedHashSet, following removal of synchronization in metadata class (SIS-85). Those checked collections were used only by metadata; their synchronization behavior shall be consistent with the metadata one.
omit 10914de Removed per-instance synchronization on metadata classes (SIS-85). We keep synchronization only on the classes that are shared by many metadata instances (MetadataStandard, PropertyAccessor).
omit 7dd3d62 SVN merge info.
omit a6d69bd SVN merge info.
omit f60c758 Merge from the JDK6 branch.
omit e9ee829 Merge from the JDK7 branch.
omit a04e6b9 Added more tests.
omit 15741c7 Added tests for AbstractMetadata.isEmpty() and prune() methods.
omit dafb3d3 Slightly more efficient previous value returned by ValueMap.put(...) in the common case where it is a List.
omit 98c473e SVN merge info.
omit 4695d55 SVN merge info.
omit 7bb7a2e Merge from the JDK6 branch.
omit 0796707 Merge from the JDK7 branch.
omit fe64e2a More metadata tests.
omit 9f65a40 Added more metadata tests, and fixed the checks for utility test list.
omit 698c6f7 Minor adjustments: hashMapCapacity(int) not needed for IdentityHashMap, test suite shall validate test cases (order, parent) before execution.
omit 31a5bdb6 SVN merge info.
omit 7a06e9f SVN merge info.
omit 0d68d94 Merge from the JDK6 branch.
omit 6e12ff4 Merge from the JDK7 branch.
omit d1ac956 Wrong XML prefix for ServiceIdentification metadata (bug identified by Frédéric Houbie).
omit 6b5017f Added MetadataStandard.asNameMap and asTypeMap methods.
omit 710e365 Renamed MetadataMap as PropertyMap.
omit db0320a Renamed PropertyMap to ValueMap and MetadataStandard.asMap(...) to asValueMap(...) for emphasis what the map is about. This needs emerged from the increase in number of type of maps (value, class, information).
omit 0692f0d Added the public MetadataStandard.asInformationMap method.
omit 90f5163 Added package info.
omit 853c2a5 Minor javadoc fixes.
omit 86b8be4 Implemented PropertyInformation.getDomainValue().
omit 6608aac Refactored PropertyDescriptor as an implementation of ExtendedElementInformation instead of PropertyDescriptor (SIS-80).
omit 3699166 SVN merge info.
omit c0f5884 SVN merge info.
omit 01ae269 Merge from the JDK6 branch.
omit 0bdbfd5 Merge from the JDK6 branch.
omit 13810d7 In the Statistics class:
omit 115c33d Metadata hash code shall be different for different interfaces.
omit 2f12e89 Ported a few tests.
omit 14f2ad9 Javadoc fixes.
omit cfc5f64 SVN merge info.
omit 88b34de SVN merge info.
omit b6fe432 Merge from the JDK6 branch.
omit 8fe964b Merge from the JDK7 branch.
omit b7d3d35 Added a servlet listener in order to shutdown SIS when the web application is undeployed.
omit 86dd17d WGS84 CRS was set on the wrong envelope.
omit d59ac74 Implemented GeneralEnvelope.subEnvelope(int, int).
omit 3c8e3aa Prepare for the support of sub-envelopes.
omit 30cde90 Partial port of the Envelopes static utilities.
omit 4ce1e9d Excludes the authors from generated javadoc, for being more inline with Apache spirit.
omit 406e05e SVN merge info.
omit 68f979d SVN merge info.
omit 24f6c58 Merge from the JDK6 branch.
omit 47fb16a Merge from the JDK7 branch.
omit e14b269 immutableSet as an internal method (research in Geotk code base suggests that it will be used again later).
omit 469faab Renamed (again!) UnmodifiableIdentifier as ImmutableIdentifier, which reflect better the intend and is consistent with ImmutableEnvelope. Added javadoc explaining the limits of the immutability contract.
omit 77243ed Range implements Formattable.
omit 3e7e862 Renamed MarshallerPool.release(...) as recycle(...) since its purpose is not to release resources. The old name was misleading since developers put the 'recycle' method in a try ... finally block, while we should not.
omit f3b4d6f Renamed the public CollectionsExt class to Containers. The intend is to suggest more strongly the relationship with the CheckedContainer interface (this is possible since we moved the "bad" methods out of public API in the previous commit), and make room for future addition of methods working on other kind of objects. Iterable may be first on the list, but other CheckedContainer implementations too. As a side effect, this allow us to get ride of the ugly "Ext" suffix.
omit 1908e24 Moved UnmodifiableArrayList out of public because this class contains a significant hole in type safety. The getElementType() method return the value of Class.getComponentType(). But because Java arrays are covariant (at the contrary of collection), the returned value may be Class<? extends E> while the method return type is declared as Class<E>. This is safe only if the caller know that he invoked UnmodifiableArrayList.wrap(E[]) with an array whose component type is exa [...]
omit b202c9b Indirect merge from trunk (through the JDK6 branch).
omit 2962e41 SVN merge info.
omit 4918fed Merge from the JDK6 branch.
omit fd67c04 Merge from trunk.
omit 7253531 SVN merge info.
omit f191318 Merge from the JDK7 branch.
omit f9187fc Tuned the handling of identifiers collection in metadata objects.
omit 063a087 Updated CHANGES for SIS-31.
omit 16e13bc Added a small set of Citation constants. This set will need to be completed later. Note that Geotk defined all constants programmatically. For SIS, we may try to use an embedded database instead.
omit b4f8bc5 Slight change in the way to search for localized remarks.
omit a50d0c0 Remove the package-private constructor. We will not be able to use it since the class is now in a different package. The referencing module will need to exclude the name and remarks value itself.
omit 752bfeb Moved DefaultReferenceIdentifier from org.apache.sis.referencing to org.apache.sis.metadata.iso. We have to make this move because OSGi will not allow different modules to use the same package. Renamed to UnmodifiableIdentifier in this process in order to better differentiate this class from the other "Default*" class in the metadata packages.
omit 04e152f Temporarily disable a feature not yet supported.
omit cd1b684 SVN merge info.
omit 471eef6 SVN merge info.
omit 6822615 Merge from the JDK6 branch.
omit e288454 Merge from the JDK7 branch.
omit c6b4c5a Move back the CRS as the first parameter for consistency with current practice.
omit 6ce38f5 Moved CheckedHashSet, CheckedHashMap and CheckedArrayList out of public API, because those classes have relatively low values and may have incompatible changes depending on whether we want to synchronize metadata objects or not.
omit 45bd9e4 SVN merge info.
omit 9c1eb59 SVN merge info.
omit 3674cf6 Merge from the JDK6 branch.
omit 432dfb6 Merge from the JDK7 branch.
omit af704c5 Renamed AbstractEnvelope.isNull() as isAllNaN() for clarity.
omit ecff9f9 Require explicit declaration of GeoAPI types to be marshalled in XML.
omit 9608dcc Recomputed serialVersionUID since the old values where inherited from Geotk, which were different classes.
omit 7045591 Minor javadoc corrections.
omit b2c3174 Added a contributor.
omit c4f9ad6 Added missing members in the team-list page (missing names identified by Suresh Marru).
omit d2417f7 Documentation clarification: gco:id and gco:uuid XML attributes are declared unqualified.
omit d521bc1 Javadoc updates.
omit 1395616 SVN merge info.
omit 98f1095 Merge the SIS-95 fix from trunk.
omit b78dbb8 Fixed erroneous javadoc: copy constructors do not accept null argument.
omit 0f81bc3 Post branch merge.
omit eb94082 SVN merge info.
omit 8a090f4 Added missing "extends" clause in internal interfaces.
omit 969fcb7 Merge from the JDK6 branch.
omit d992644 Merge from the JDK7 branch.
omit dd61f9f Moved back MetadataObjects to Extents.
omit c7bacb7 Completed hierarchy documentation.
omit 61d9e93 Minor javadoc reformatting: table alignment for easier reading in Java source file.
omit 00bfd6c - fix for SIS-95 Explicitly specify Typed extends Object parameters in FallbackConverterTest
omit 88c5cf3 Javadoc: use uniform column width.
omit 1508598 More package documentation.
omit 046119e Javadoc reformating: write the hierarchical and aggretation trees manually.
omit 4ceebd8 More class/aggregation hierarchy javadoc.
omit b9bc170 Fixed erroneous package name for CodeList in @link. Added class hierarchy documentation for citation package.
omit b4752f6 Javadoc: complete the package description with summary of the class hierarchy.
omit 9d0da0d Partial revert of the previous commit based on a wrong interpretation of ISO 19115: Exclusive properties apply only to unions, not to other conditional properties. For other conditional properties, the condition rather said when the property is mandatory.
omit f683847 Starting the enforcement of some ISO 19115 conditions, especially mutually exclusive properties.
omit 5773606 More compact storage of boolean values in metadata objects.
omit 44937f6 Convenience internal methods for storing dates in metadata objects.
omit a1db6f5 Added copy constructor in every metadata class. The cost in JAR file size is approximatively 7 kb. We paid that cost because invoking virtual methods using Java reflection at object construction time is unsafe. Furthermore the copy constructor may be invoked more often than other operation, because JAXB wants an annotated implementation class at marshalling time.
omit 7422028 PropertyAccessor shall uses the ordering defined by XmlType.propOrder annotation.
omit 4870a9c Prepare for the addition of copy constructors: - Renamed existing copyCollection methods as writeCollection - Added copyCollection methods for copy constructors only. - Added a copy constructor in ISOMetadata.
omit c916d6c Added aggregation hierarchy for citation package.
omit c8c8f53 Replaced class hierarchy by aggregation hierarchy, which is more informative in the case of metadata.
omit 1d8d70c Additional documentation.
omit 41811ce Removed the abstract getElement() method from PropertyType, since it was not needed and caused an unnnecessary increase of .class files size because of bridge methods.
omit b02e336 Added a few documentation for metadata.
omit d45167b Missing 'synchronized' keywords were causing test failures. With this commit, the JDK7 branch is back to a buildable state.
omit 74fa229 Replaced call to super(metadata) by shallowCopy(metadata) for now, since copy contructors are not yet implemented. With this commit, the JDK7 branch is back to a compilable state but the tests do not yet pass.
omit df5ac3a Completed the root metadata package.
omit 418cbc9 Completed the citation package.
omit 6dcc8d9 Added the metadata acquisition package.
omit 6209841 Added the metadata spatial package.
omit 8439db6 Added the metadata quality package.
omit 376396b Added metadata maintenance package.
omit ad745f4 Added the metadata lineage package.
omit 4742b62 Added the identification package.
omit 0e72987 Removed the "This package contains documentation from OGC specifications" notice from header, and put it in the NOTICE file instead.
omit 281bc88 Initial port of the metadata extent package. Will needs more work.
omit 11ec177 Added the metadata distribution package.
omit e981fda Added the metadata content package.
omit da00352 Ported the metadata constraint package.
omit c6c15cb JAXB adapters for metadata. This commit temporarily breaks the build, since JAXB adapters need metadata implementations, which are not yet committed.
omit 7e18d7f Resource to be needed by metadata.
omit 9e0d336 Added an interface which is going to be needed by metadata.
omit c871ecd Added JAXB-related classes which are going to be needed by metadata.
omit 4b5b448 Licensing: for every classes which got a commit from an external contributor, regenerate the classes using the NetBeans IDE. The procedure was to put an empty class implementing the GeoAPI interface, click on the "implement all abstract methods" contextual menu in NetBeans, remove the <? extends> part in parameterized types, add the synchronized keyword (for now) and finally add the corresponding private fields.
omit 16230bb Minor bug and javadoc fixes.
omit eacc59f SVN merge info.
omit 4d72a4c SVN merge info.
omit 9e44092 Merged the Windows-specific test failure from the JDK6 branch.
omit ed00874 Merged the Windows-specific test failure from the JDK7 branch.
omit 3734207 Fixed a build failure on Windows platform.
omit e2cbe36 SVN merge info.
omit 83abb3b SVN merge info.
omit e7dbb31 Merge from the JDK6 branch.
omit 314b7fe Merge from the JDK7 branch.
omit 1a2bec1 Enable the metadata test cases which were needing the converters framework.
omit 914f595 Added or connected the last converters. The package is not complete (for now).
omit ec129df Replaced the hard-coded 'getInstance(...)' methods by a registration mechanism based on META-INF/services/. This will be needed anyway for allowing other modules like sis-metadata to define their own converters.
omit 570a015 Connected the PathConverters.
omit 723c3ab Consolidation of File, URL and URI converters in a single PathConverter class.
omit 99761ff Connected DateConverter, and added more tests.
omit d691f28 Added a few missing test cases.
omit b7f7e10 Trivial reformating (no code change): removed the comments in the private inner classes. They were repeated everywhere with few information. Removing them make easier to see the code at a glance.
omit 814d56d Consolidation: remove static constants or make them private.
omit 9fede02 Added tests for ConverterRegistry.
omit 499b841 Reverse the order of classes show in the toString() representation: (target, source) instead than (source, target). This produce much more natural tree representation, with class hierarchy as we are used to see.
omit e758f25 Almost done with the internal.converter package: - Implemented ConverterRegistry.toString() - More internal classes extends SystemConverter (when we will be done, all internal classes should extend it). - Ported HeuristicRegistry, which encapsulate the knownledge about special cases: CodeLists, InternationalString, Numbers.
omit 115b1ee Completed the port of ConverterRegistry, excepts toString() and tests.
omit e9a7191 Minor adjustment: same algorithm written in a slightly better way.
omit 1e9a969 Final version of FallbackConverter. The class size is a little bit smaller but not that much. However the internal working and the test case are a little bit more systematic.
omit 5cb6e6d API simplification in Classes: - Removed asSubclassOrNull(...), which is not used widely enough. - Replaced Collection arguments by Iterable. - Changed return type of getAllInterfaces(Class) from Set<Class<?>> to Class<? super T>[] - for consistency with other API (getLeafInterfaces(...), Class.getInterfaces()) - because Java arrays are covariant, while collections are not. See comment in source code. - Renamed isAssignableTo(...) as isAssignableToAny(...) for better [...]
omit 2b69353 NumberConverter needs to check if the conversion is allowed.
omit 247a83b Simplify the API by removing rarely used (long) and (double) method variants. This also allow the (Number) variant to do a more precise analysis based on the value type.
omit cf78ca7 Reduces the size of NumberConverter, since this is not Apache SIS job to provide a framework for converters (there is other Apache projects for that). Begin the port of ServiceRegistry, to be completed later.
omit 4bacfd5 Reorganized some converters in a more systematic way, and added test cases. In the next commit, we will try to reduce the size of this stuff by replacing many constants by Map<Class,?>.
omit 854983d Ported some JUnit tests.
omit 5808524 Fixed the license header (forgot to change that one during the port).
omit c497c3a Added a link to the wiki.
omit 10e7b53 Added remaining converters. We still need to tune them, especially regarding the value returned by properties() and inverse().
omit 9e1ef42 Ported the FallbackConverter.toString() method, which is helpful for debugging.
omit 51c324c Formatting change: when drawing a tree, put the vertical line after two spaces instead than on the left border. People specialized in human design of interfaces seem to prefer this layout. We are better to change the layout before more tests depend on it.
omit 221aacd Added CharSequenceConverter (internal), to be needed for the support of InternationalString.
omit 48364e3 Trivial documentation fix (but needed for search operations in the code base).
omit 018f9de Added FallbackConverterTest. This test needed the StringConverter provided in the previous commit.
omit fc9da24 Added converter to java.nio.file.Path (JDK7 only).
omit bc01b1b Initial port of converters from String to various basic objects.
omit 960e39f Moved SurjectiveConverter to org.apache.sis.internal.converter package.
omit 16d855c Minor change of policy: do not automatically remove whitespaces in Numbers static method; leave the responsibility to the caller. For such low-level function, it may be preferable to avoid taking too much initiative.
omit d53082c Beginning the port of the ObjectConverter implementations as an internal package. We need those ObjectConverters for the metadata PropertyAccessor working. Right now, some metadata tests are disabled waiting for those converters.
omit 6147896 Modules in dependency order.
omit 9e1bc43 Minor cleaning (mostly about warnings).
omit 85db814 Added a testDescriptor() case in PropertyAccessorTest.
omit 2423668 PropertyAccessor tests. Some parts are disabled for now, pending completion of other parts.
omit b24f30f Minor adjustments for futur code to be commited.
omit cc42283 Ported the metadata view as a java.util.Map, together with isEmpty() and prune() methods.
omit 613310c SVN merge info.
omit dde9cdb SVN merge info.
omit 83e83fe Merge from the JDK6 branch.
omit 286751f Merge from the JDK7 branch.
omit cbfa068 Renamed "NullValuePolicy" as "ValueExistencePolicy", which matches better the enumeration purpose.
omit f6dac99 Renamed "attribute" as "property": - For consistency with JavaBeans properties - Because in metadata, those "attributes" were XML elements, not XML attributes.
omit 00737b6 Completed the port of a few methods.
omit cbb7146 Let Cloner.clone(...) propagate CloneNotSupportedException.
omit 13be5c8 Slight simplification of 'equals' and 'shallowCopy', fixing the boolean parameter to the value commonly used.
omit 94d6395 Test the minimal value instead of the mean, since the later is not reliable in every cases.
omit 424b93c Minor clarifications in javadoc and method names.
omit 2f8e1d7 - Try to explain more in the javadoc what we are doing. - Replace HashMap<Class,...> by IdentityHashMap and explain why in javadoc. - Removed MetadataStandard.isModifiable(...) method (part of effort to simplify the code).
omit 9625e85 Partial port of the MetadataStandard class.
omit e2c1371 Fixed a package name.
omit 0f021a8 Ported a little bit more of metadata internal mechanics.
omit 7d75b7c Initial port of PropertyAccessor.
omit 1b7fa03 Remove Locale argument in Types.foo(..., Locale) and replace the return type from String to InternationalString. This is both more coherent with the library and more convenient for PropertyDescriptor.getRemarks().
omit ade06be Added MetadataTestSuite.
omit d208380 Added test directory and first test case for metadata. Implies little Maven and IDE configuration.
omit 060ffdd First draft of metadata PropertyDescriptor.
omit 160ba0e Fixed a synchronization hole.
omit 5298cfe Added, completed or tested a few more minor utility methods related to ValueRange annotation, needed for the ungoing port of metadata classes.
omit feecab8 Moved ValueRange in public API, in order to allow the addition of convenience NumberRange constructor. This is needed by metadata implementation backed by Java reflection.
omit 7ab95d1 Ported enumerations which will be needed by AbstractMetadata, and an package-private class which will be needed by the implementation.
omit a56d9ee Convenience constructor for creating a CodeListSet filled with all known elements.
omit 74e6672 Support large CodeList (more than 64 elements).
omit 7a0219b Added test for collections of different kind of code lists.
omit ac61693 Added a test case for CodeListSet.
omit 5a7dbe6 Forgot to complete an implementation note...
omit a662d2e Javadoc update.
omit ceb577f Initial implementation of a Set specialized for CodeList elements. This will be needed for the metadata implementation.
omit fc03556 Annotation which is going to be needed for the metadata implementation.
omit fdac992 Port the 'setKeyCollisionAllowed(boolean)' method.
omit c48450a Minor javadoc fixes.
omit af6745c SVN merge info.
omit 1dc1654 SVN merge info.
omit d11a9a4 Merge from the JDK6 branch.
omit 1c61658 Merge from the JDK7 branch.
omit 595244a Provided also a namespace prefix mapper for endorsed JAXB.
omit 4c98f29 Upgrade the NetBeans project configuration to NetBeans 7.3.
omit be65964 Delete the com.sun.xml classes only after compilation of tests, since they appear to be required by javac even if not directly used.
omit 1ac3bf6 Initial draft of a NamespacePrefixMapper implementation.
omit 1c1999b Minor documentation updates.
omit 2c18722 SVN merge info.
omit e125599 SVN merge info.
omit 5579e7b Merge from the JDK6 branch.
omit ad5a772 Merge from the JDK7 branch.
omit 158dce2 Added documentation about random numbers generator in test cases.
omit d62b92f Documentation about the java.util.Date case, with corresponding getMin/MaxLong(int) methods.
omit 292983b Minor implementation strategy change: search for the lower endpoint before the upper endpoint. This is because finding one endpoint reduce the size of the array portion where to search for the other endpoint. In the previous strategy (upper before lower), the reduced portion was at the beginning of the internal array. With the new strategy (lower before upper), the reduced portion is at the end of the internal array. The new strategy is more efficient in the common case [...]
omit d093d83 Change the RangeSet.contains(Object) contract in a way more consistent with remove(Object).
omit 1f81bce Moved non-standard API close to the end of the class. There is no significant code change in this commit.
omit 4afa17c Implemented subset views of RangeSet. This is new code - those views were not implemented on Geotk.
omit 46d270e More tests.
omit e3d9786 Allow to user to specify whether the endpoints in a RangeSet should be inclusive or exclusive.
omit 8e172d2 Documentation update: replaced "bounds" by "endpoints" for conformance with the vocabulary used on the Wikipedia page.
omit 91acd44 Unconditionally send output to TestCase.out (which is now never null), in order to allow us to print the content in case of test failure. This is sometime very useful information in case of test failures that happen randomly.
omit 6080ff3 Use code point values instead of 'char' as a matter of principle, for make easier to use supplementary characters in a future version if we need to.
omit 2bfa7b8 API adjustment and added test cases.
omit b5655bd Initial port of RangeSetTest, excluding the testRangeRemoval() method for legal reasons.
omit 22f421f Initial port of the RangeSet class, excluding remove(E,E) implementation for legal reasons.
omit 0cb097e Added tests, fixed RangeFormat bug as a result of test additions, and improved documentation.
omit f61d4ab Added documentation about ranges in the developer guide.
omit 8ad1b16 Explain in the documentation the relationship with the ISO 19123 definition of "ranges". Also make the string representation closer to the ISO 31-11 standard.
omit f3c9602 Clarification of isSorted(...) behavior.
omit fcfd155 Added cross-references in the Javadoc between Numbers and MathFunctions.
omit ed1b56e Removed the convenience constructors for inclusive ranges. Instead, for the users to specify explicitly if the bounds are inclusive or exclusive. Those convenience constructors were extensively used in test suites, but a search in existing code base (geotk) shows that they were very rarely used in real applications. Worst, the were dangerous because the convention about whether the upper bound should be inclusive or exclusive is arbitrary; the convention was "inclusive" [...]
omit 0343da5 Removal of the DateRange subclass, because it provides few added value compared to Range<Date> and because usage of java.util.Date will probably be abandonned in favor of ISO 19108 (temporal schema) types.
omit f9e12d0 SVN merge info.
omit f1a142e SVN merge info.
omit 70b1940 Merge from the JDK6 branch.
omit 8dfdcf8 Merge from the JDK7 branch.
omit 92e408f Method renaming: * getUnits() --> unit() for consistency with the method name in org.unitsofmeasurement interfaces. * getMinimum() --> getMinDouble() for consistency with getMinValue(). * getMaximum() --> getMaxDouble() for consistency with getMaxValue().
omit f1acf38 Renamed <T> type to <E> for consistency with "element type" name, and for consistency with CheckedContainer parent interface.
omit 8c9b464 Completed the new approach regarding parameterized type ("foo(…)" and "fooAny(…)" method separation).
omit 43074b3 Change of strategy regarding parameterized type in Range and subclasses: Define all Range methods in a stricter way. Then instead than trying to make the methods more lenient in subclasses, provide the lenient methods as separated methods with the "Any" suffix ("contains" vs "containsAny", "intersect" vs "intersectAny", "union" vs "unionAny", etc.)
omit 44dbcd1 Minor javadoc updates.
omit 9ab994d SVN merge info.
omit 837db55 SVN merge info.
omit 530b5d3 Merge from the JDK6 branch.
omit 88e5344 Merge from the JDK7 branch.
omit 6cd64a4 Removed (for now) the RangeSymbols class because I'm unsure of this API. It may be better to process with an 'applyPattern' method instead. Also modified the 'parse' method implementation to use the code point API.
omit 568a119 Implement RangeFormat.formatToCharacterIterator(Object).
omit 5aa44a6 Initial port of RangeFormat.
omit d718cde Ported DateRange.
omit 728da43 Minor Javadoc updates.
omit e695e72 Ported MeasurementRange.
omit d9be0b5 Acknowledge the source of the <T extends Number & Comparable<? super T>> signature. Note that there is no other way to express the condition "type T extends both Number and Comparable". So legally, I think that we are okay since anyone wanting to parameterize NumberRange can only obtain that exact signature; there is no flexibility here (except for the 'T' variable name). Even the type order is enforced by the Java language.
omit 4397867 Forgot to replace the license header! (sorry)
omit d16ffdd Ported NumberRange.
omit 304569e Added some test cases for Numbers static methods.
omit 9212a24 Android experimental branch: declare the version number as 0.3-android-SNAPSHOT and replace OSGi bundles by apklib.
omit 705b0a1 Experimental commit of Android project configuration files, only in sis-utility for now.
omit c85d010 Added serialization test.
omit 1493d43 Added authors in pom.xml and in the Range class.
omit e51660c Added toString() implementation.
omit 3cf834d More compact equals(Object) and hashCode() using java.util.Objects.
omit 96eb2bc Added 'subtract' implementation.
omit 216328f Applied to 'union(Range<?>)' the same work (reduce the amount of comparison, take inclusion/exclusion in account) than 'intersect(Range<?>)'.
omit 7edca80 Reduce the number of comparisons done in the intersect(Range<?>) implementation, and take the inclusive/exclusive states in account.
omit 4bdfc95 Relax the type of the contains methods, for allowing widening conversions. Provide an implementation of contains(Range<?>) which take in account the inclusion states of the bounds.
omit 269b855 Simplified the contains(T) method by testing for non-inclusion instead than testing for inclusion.
omit 9af608b Moved the checkMethodArgs(Range<T>) method to ensureCompatible(Range<?>), using the internationalized resources for error messages if needed.
omit 6dea33f Refactored checkConstructorArgs as below: * Splited in two methods: ensureValidType and ensureCompatibleType. * For the ensureValidType part, replaced the loop over getInterfaces() by a call to Class.isAssignableFrom. * Moved just below the constructor.
omit bd3a0ee Moved isEmpty() just below the getters for min/max values, because is provides an information derived from those values. Added a check for unbounded values, and added javadoc.
omit 60ef028 Renamed the Range private fields according the method names, moved the method declarations among the first methods, and added javadoc.
omit 0064a64 Implement CheckedContainer and Serializable. Annotate with @Immutable. As a side effect, elementClass is renamed elementType (required by the CheckedContainer interface), which match the fact that the type is not necessarily a class; it can be an interface.
omit d727470 Parameterized the range type, and added some javadoc.
omit e875861 Modified the license header for compliance with http://www.apache.org/legal/src-headers.html#headers In particular the "Copyright 2012 The Apache Software Foundation" line has been removed, as requested by the above link, since it is already present in the NOTICE file. I presume that this was the contributor intend.
omit 832a863 Initial commit of Range implementation, provided by Joseph White (SIS-66).
omit ae28c2b Minor javadoc fixes.
omit 80ecbb2 Let ResourceBundle creates itself the chain of parents. This allow better choices of formats for numbers and dates.
omit 20ab777 Avoid null locale, use Locale.ROOT instead (SIS-78).
omit fc7f4a7 SVN merge info.
omit 2a3d392 SVN merge info.
omit 5c88954 Merge from the JDK6 branch.
omit 1b36534 Merge from the JDK7 branch.
omit a293061 Renamed Collections to CollectionsExt, for the same reason than the renaming from Arrays to ArraysExt (the two classes are often used together, thus causing a risk of confusion).
omit da0d79e Complete the renaming of Arrays to ArraysExt.
omit c873846 Renamed Arrays as ArraysExt because the risk of confusion with java.util.Arrays was too high, since those two classes are used often together in practice.
omit 996c328 Removed the automatic binding of UUIDs (SIS-73).
omit 7838361 Updated the version number of the Apache parent pom.xml.
omit 5338bdd Be slightly more conservative about the parameterized type in method argument.
omit 0ffdd91 Forgot to commit this change in the previous merge.
omit 8c2425c Merge from the JDK6 branch (addition of Eclipse project files).
omit 19a4752 Merge from trunk (addition of Eeclipse project files).
omit e620e7e Fix for SIS-77: Provide an IDE build for Eclipse.
omit d3e8992 Added a namespace which will be needed for temporal duration XML elements.
omit a274a60 Javadoc clarification (side-effect of discussions at OGC).
omit 8c50a17 Be notified with the classpath changed in an OSGi context.
omit 5d19747 Ported the XML.(un)marshall methods, after the addition of a hook for recreating the pool if the classpath changes.
omit 26ca8db Implemented removal of (un)marshaller after a timeout.
omit 8aaa1e4 Centralize the shutdown logic in a new Shutdown class, to be registered to the JVM in a future version.
omit fad588e SVN merge info.
omit f9a26e2 SVN merge info.
omit 52f4222 Merge from the JDK6 branch.
omit b8cd9ae Merge from the JDK6 branch.
omit fb91be1 Minor typo which cause a build failure on the JDK6 branch.
omit 5192e2d SVN merge info.
omit 35c8058 SVN merge info.
omit 7634690 Merge from the JDK6 branch.
omit 5eb1275 Merge from the JDK7 branch, for testing SIS-76. Observed a performance increase of about 20% in CacheTest.stress() test.
omit 6517c64 Replaced the ThreadPoolExecutor by a more lightweight approach for the SIS needs (SIS-76).
omit 8c493e2 SVN merge info.
omit a99754a SVN mege info.
omit d86b632 Merge from the JDK6 branch.
omit cccec70 Merge from the JDK7 branch.
omit 6d9ba0a Minor documentation update.
omit 58bb433 Ported JarCollector in sis-build-helper, in order to simplify usage of the new About class. On the JDK7 branch this use hard links, so the cost should be low. For the JDK6 branch, the strategy is yet to be determined.
omit a31101e Javadoc fix, and make TreeTables.parse more generic.
omit d11c8be Report also transitive dependencies from the MANIFEST.MF classpath attribute.
omit 74c663a Added an About class for providing information on the Apache SIS runtime environment. The information provided in this class will be expanded in future version with things like SIS data directory and URL to the EPSG database directory.
omit 124c1a3 Added a newChild() method TreeTable.Node in order to avoid the need to use the implementation-specific constructor. Added a set of static methods in TreeTables and moved there the static toString(TreeTable) method.
omit 342b3ee Initial port of MarshallerPool. Still needs a bit of work before being usable.
omit 34e42ef Make all adapters stateless (removed the anchor map which was in CharSequenceAdapter). The anchors are now specified though the ReferenceResolver.
omit 2afae35 Ported a few adapters to be used in JAXB (un)marshalling.
omit 05e9995 SVN merge info.
omit e42b9bc SVN merge info.
omit 783e052 Merge from the JDK6 branch, in order to fix the build failure (javadoc crash).
omit 731bac2 Merge from the JDK7 branch.
omit 605c4eb Merge from the JDK7 branch.
omit 1c24adf Definitively remove a @link tag which is causing too much trouble on the JDK6 branch (cause JDK6 javadoc to crash).
omit 78b4a13 Minor fix of import order.
omit 8f71c61 SVN merge info.
omit b7d7a55 SVN merge info.
omit 8c32f1f Merge from the JDK6 branch.
omit 801df54 Merge from the JDK7 branch.
omit 58eecd2 Renamed *Formatter as *Appender for emphasing on the relationship with Appendeable (those classes both implement Appendeable and delegate to another Appendable), and for making the names more different than *Format.
omit 1374920 Replace a few call to 'regionMatches' by the simpler 'startsWith' from String API.
omit 5883ba8 Tuned the StatisticsFormat API in order to make it a little bit more customizable. In this case, this is useful to CacheTest.
omit 69f294a Factored out the setLineSeparator / setColumnSeparatorPattern from TreeTableFormat to a new parent class (TabularFormat) in order to allow sharing by StatisticsFormat.
omit d8fd216 Bug fix in LineFormatter: last soft-hyphen on a line shall not be removed. As a side effect of this bug fix, re-splitted the test case in various sub-classes. This is a more classical JUnit approach than the previous "parameterized tests" approach. We reverted to this classical approach because experience with this bug has show that the "parameterized test" approach is unconvenient to debug.
omit 409ab28 SVN merge info.
omit fd85f41 SVN merge info.
omit d9e73d0 Merge from the JDK6 branch.
omit 3fed27a Merge from the JDK7 branch.
omit e155b76 Re-order the parameters order in error messages in order to apply the same convention than JUnit: first programmatic parameters are information about the context where the error occurred, while the values that caused the error are last. The intend is to have more consistency.
omit 469ea41 Moved the 'ensureDimensionMatch' methods to the ArgumentChecks class.
omit 4219e8e Added normalize() method to GeneralDirectPosition and GeneralEnvelope.
omit 2495cdf Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
omit 271be8b Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
omit bf196e2 Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
omit 127fc58 Port of Pooled[Un]Marshaller. They will be used by MarshallerPool (to be comitted later).
omit 75f0d9e Lower/UpperCorner of GeneralEnvelope are now read/write views.
omit 8bfe829 Added a section about Envelope in the developer guide.
omit d291ee0 Added a test suite for the referencing module.
omit f439b0e Moved 'isSimplePrecision' to a package-private method, because it seeems a to heuristic approach for commiting in public API.
omit 34262a1 Formats the points and envelopes as 'float' numbers when the ordinate seems to only have simple precision. This avoid the printing decimal digits having no real signification (e.g. "0.3333333432674408" instead of "0.33333334"). Note that this approach is not strictly correct since parsing such values in double precision will not produce exactly the same result. We should put a warning in the 'toString()' method with a link to a method providing control on this behavior ( [...]
omit 3e9ae7b Minor fix in English sentences.
omit 15eef32 Tests the envelope using validators.
omit e0a57bc SVN merge info.
omit 96918b8 SVN merge info.
omit 63865eb Merge from the JDK6 branch.
omit 6a407ec Merge from the JDK7 branch.
omit 51b199b Removed the optimized version of ArrayEnvelope.getLowerCorner()/getUpperCorner() because their optimization was in violation with AbstractEnvelope contract. Various javadoc updates as a side effect of code review.
omit 326d685 SVN merge info, with adjustments in import statements.
omit 14584d9 SVN merge info.
omit a6f0243 Merge from the JDK6 branch.
omit e95cdd9 Merge from JDK7 branch: port of Envelope implementions.
omit e39b518 Aded serialization tests.
omit a34ebc1 Ported some (not all) of GeneralEnvelopeTest. Some tests are disabled for now because we need a CRS:84 instance to run them.
omit b5695fe Ported AbstractEnvelopeTest. Some tests are disabled for now because we need a CRS:84 implementation to enable them.
omit 6a55b8b Documentation formatting (no code change).
omit b6bea20 Ported the Envelope2D class.
omit d03ffc5 Constructor expecting a WKT can accept a CharSequence instead than a String.
omit b2f527f Reordered the constructors in a more consistent way. The constructor expecting DirectPosition arguments is put first, because Envelope are defined by those direct positions.
omit 8821cfb Javadoc fixes.
omit 396a045 Ported ImmutableEnvelope.
omit 02b4c51 Moved methods for slightly more "natural" flow (no code change).
omit 52e4e12 Ported the GeneralEnvelope class.
omit a4966e5 Ported the ArrayEnvelope class.
omit 0a13bb4 Initial port of AbstractEnvelope.
omit ebdd375 Javadoc fixes.
omit 1c8f9e3 Added serialization tests.
omit 7b2e27b Added tests for DirectPosition implementations.
omit 76b1572 Documentation fixes and slight API simplification by removing the static toString(...) method.
omit d15476c Added DirectPosition implementations.
omit 4c944b3 Documentation fix.
omit 8d9d420 Initial port of AbstractDirectPosition.
omit 9f4b876 Removed Utilities.equals(float,float) and equals(double,double) since their is a signficant risk to use it with the wrong data type (char, byte, short, int, long). Added equalsIgnoreMetadata and equalsApproximatively convenience methods since they will be often used.
omit 679af56 Minor documentation and API updates. The purpose of the API change (replace 'char' argument by 'int') is to support code point values.
omit e1e2bf8 Added a CharSequences.lastIndexOf(...) method, and documentation updates.
omit 4934568 Updated the GeoAPI dependency declared in the NetBeans project.
omit 760f4f9 Merged the CodeLists static methods with Types, in the hope to simplify a little bit the API. This also make easier to emphase the similarity between methods like getDescription(CodeList, ...) and getDescription(Class, ...).
omit 66c4334 Nail down the class loader to use for fetching resources.
omit 25b2aef SVN merge info.
omit 47d1c4c SVN merge info.
omit c82e864 Merge from the JDK6 branch.
omit 0ef977f Merge from the JDK7 branch.
omit 7959be2 Renamed the org.apache.sis.util.type package to org.apache.sis.util.iso. This is consistent with org.apache.sis.metadata.iso. Actually, even the InternationalString interface can be considered (loosely) as ISO since it is closely related to the <gmd:textGroup> XML element.
omit 6a79fc6 Moved the DefaultNameFactory.toArray() method to a more implementation-neutral Types.asGenericNames(...) method. Provides a common place where to get the unique factory instance (maybe temporarily, to be revisited when we will have explored dependency injection).
omit f847653 Minor adjustment in StringBuilder initial capacity (more realist value when we can, rely on default otherwise). Removed a unecessary null check in Classes static method (invoked method shall never return null).
omit 75cccf2 Ported recent bug fixes from Geotk, and added a test case.
omit de8497b Renamed GeoapiTests as DefaultNameFactoryTest since the previous name give the impression that this class was testing GeoAPI, instead than inheriting GeoAPI tests.
omit 28f3327 Added JAXB adapters for ISO 19103 GenericName.
omit 4d75883 Replaced some AssertionError by ConcurrentModificationException since those errors could happen if another thread modifes concurrently the collection given in argument to a method.
omit 0e38d2f Documentation updates.
omit 693d2c5 Added some content in the developer guide.
omit 5b3d324 Fixed wrong package name in javadoc.
omit acb4bb5 Javadoc fixes.
omit a976f6c Ported AbstractName and sub-classes.
omit 4ee2914 Added JAXB adapters for ISO 19115[-2] CodeLists.
omit bde5e6e Moved CodeListAdapter and CodeListProxy from "code" to "gmd" package, in order to keep the "code" package available for sis-metadata module. This separation is required in OSGi environments.
omit c1cc816 Minor javadoc fixes.
omit 4297def Refactored the CharSequences.equalsLettersAndDigits(...) as a equalsFiltered(..., Characters.Filter, boolean) method, and modified the Citations static methods to use it.
omit b707055 Apply the org/apache/sis/findbugs-exclude.xml rules defined in the sis-build-helper module.
omit 4fafecf Ported JAXB adapter related to character sequences.
omit eb881e6 Moved Locales.getLanguageCode(Locale) to ValueConverter, completed by addition of getCountryCode(...). Renamed CodeLists.getDescription(...) as CodeLists.getCodeTitle(...) and added a "real" getDescription method. Improved javadoc.
omit 01d1b0a Ported the base classes of JAXB adapters for CodeLists.
omit 827ce1e Initial commit of a few JAXB adapters.
omit 6cc2191 Initial implementation of MarshalContext (internal API).
omit 0c7d0ac Initial commit of XML utility class (without static methods for now - will be added later).
omit 704a071 Renamed ObjectConverters to ValueConverter.
omit ec066e3 Added a few tests.
omit c183c9b Removed the resolve(..., NilReason) method, since it seems quite weird to "resolve" a missing value in a reference resolver. We will see later if users really need to "resolve" NilObject.
omit e7038bc Renamed ObjectResolver as ReferenceResolver as suggested on the mailing list.
omit 8e5d303 Keep trace of objects associated to UUID in the current JVM. This is a first draft - will need more review and tests.
omit 2ab6c8f IDE configuration can now use the default platform.
omit 98b4370 Group the test threads in their own thread group, for better separation with SIS threads when debugging.
omit 4d6f17a Merge info
omit 9167946 Merge info
omit 73b7582 Align the IDE configuration to the version numbers declared in the pom.xml.
omit a7e515c Merge from the JDK6 branch, except the change from "geoapi" to "geoapi-pending": the trunk stay on the GeoAPI 3.0.0 official release.
omit 2a5ac00 Merge from the JDK7 branch.
omit 49aa759 Minor javadoc fix.
omit 867f349 Updated dependency versions. This contains a change of "geoapi" dependency to "geoapi-pending" in anticipation for the changes which are going to be needed in GeoAPI, and for consistency with geoapi-conformance which depends on "geoapi-pending". However SIS trunk will continue to depends on geoapi only (not pending).
omit 91d6baa NetBeans configuration: exclude resources .properties files that are used only at compile time.
omit 235e4b0 Added the GCO sub-package. For now this is only for documentation purpose (in the hope to help peoples to see where we are going). Later, concreate classes will be added in this package.
omit b70b46a Ported ObjectResolver for resolving uuidref and idref.
omit c587791 Added a central place where to keep trace of objects having UUID.
omit b5a9c96 ObjectConverters need information about the context of the (un)marshalling process.
omit 75c5420 Added VersionTest to the test suite.
omit 1514770 Provides information about the context of a (un)marshalling process under way. This use the Version class from the previous commit.
omit 7636082 Ported the Version class.
omit e204c06 Minor javadoc change, and added the missing "extends TestCase" in test code.
omit 6331712 ModifiableMetadata shall not allow null values in the collections. Clarified the behavior with null values in other SIS classes.
omit 807d6ad Added MathFunctions and Units to the list of classes of static methods.
omit 1f3b431 Ported ObjectConverters.
omit 239c365 Ported the Units class.
omit dec887a SVN merge info, together with a fix in import order done during the merge.
omit b775e47 SVN merge info.
omit 2f18005 Merge from the JDK6 branch.
omit 57ff019 Merge from the JDK7 branch.
omit 6d99b20 One more round of javadoc cleanup, and renamed getExplanation() as getOtherExplanation().
omit 4f15b5c Reproduced some material from the developer guide to the javadoc.
omit d92c05c Updated the developer guide for the code commited in the last month.
omit 1be4fe9 Minor javadoc clarification.
omit 86c3beb Initial commit of ISO 19139 NilReason.
omit 0e6848b Documented in CharSequences the policy about white spaces, and apply it consistently in the SIS library: - Use Character.isWhitespace for separating entities (words, elements, tokens...) - Use Character.isSpaceChar for parsing a single entity (mostly in java.text.Format subclasses) - Avoid usage of String.trim() - use CharSequences.trimWhitespaces instead.
omit 1740734 Minor javadoc fixes.
omit b51710a Statistics in CacheTest while stressing the cache.
omit 79b56a7 Ported the Statistics class.
omit d5998cb First draft of a SupervisorMBean, for allowing an administrator to watch SIS status with JConsole. For now, the only operation provided is a list of potential problems detected. For now, the only potential problems detected is unexpected death of the deamon thread. More items may be added in the future.
omit 0323cc4 Merge from the JDK6 branch the fix for javadoc crash (a JDK6-only problem).
omit a766e2e Merge from trunk the fix for javadoc crash.
omit 0a5a2a1 Avoid javadoc link to 'out' in the first sentence, since it causes Javadoc to crash on JDK6 (works fine on JDK7).
omit 778bbb7 Renamed "finestClass" as "narrowestClass" for consistency with the usual terminology (e.g. "narrowing conversion").
omit 237666a Removed the internal X364.toHTML(String) method, which is probably not appropriate for this module. Avoid some calls to String.substring(...) since it copies the data since recent JDK, and minor documentation cleaning.
omit ce6eb59 More on column separator patterns.
omit d43458d Added more TreeTableFormat tests (using numerical values, more parsing tests). Bug fixes as a result of the additional tests.
omit 9df98bd Added DefaultTreeTable.clone() method and added various documentation.
omit 705898f Changed the TableColumn interface to a class in an attempt to simplify the framework (this is not SIS role to design elaborated non-spatial tree structure - we want just enough for our needs), and added more tests.
omit c1fc1de Serialization of ResourceInternationalString should use the key name rather than numerical values, for better cross-version compatibility since the numerical values may change at any time.
omit b943fec SVN merge info.
omit 3e1a119 SVN merge info.
omit 9516f19 Merge from the JDK6 branch.
omit 857002b Merge from the JDK7 branch.
omit 6bed274 IndexedResourceCompiler must be slightly more tolerance to different declarations of Keys inner class (needed for the next commit).
omit b308026 Moved ColumnConstants as a package-privated class close to the other TreeTable-related classes.
omit 4f7195e Initial commit of TreeTableFormat.
omit 5394e82 Brings the indexOf(..., String, ...) in consistency with indexOf(..., codePoint, ...). Fix some javadoc terms ("text" instead of "string" in some places).
omit 8be7c01 Specify the upper bound in indexOf(…) method. Will be used by TreeTableFormat.
omit 73ebe30 Tune the CompoundFormat API contract.
omit 3679fbb Variable renaming.
omit 949505e Trivial variables renaming. The "column indices" term is used by MatLab among others.
omit b102984 First draft of CompoundFormat, which will be the base class of CoordinateFormat, WKTFormat and TreeTableFormat.
omit 549260f Slighly more robust AbstractInternationalString in case of non-synchronized access from many threads. This is not completly safe (we would need to declare the field volatile for that), but is okay if the creation of the default string is itself synchronized, and that concurrent creation of that default string creates equals (not necessarily same) instances.
omit 196ef08 Added a test case for node values, and store column indices in a more compact way in the very common case where there is only one column in the table. Provide a constant in ColumnConstant for the most common set of columns. This constant will be used by TreeTableFormat.
omit ec1c64d Minor javadoc updates.
omit e49d70d Added a test case for DefaultTreeTable.
omit 4e72cbd Bug fix in IndexedResourceBundle: lastKey was not set on initial MessageFormat creation.
omit a9f9e90 Initial draft of a default TreeTable implementation.
omit ea85d21 Still trying to understand why the build on Jenkins sometime pickup the wrong resource.
omit 8b29617 Additional minor cleanings.
omit ba7f309 Use try-with-resource.
omit b02c1dc Replaced Locale.UK and Locale.CANADA constants by Locale.US, because recent email on the JDK8 list saids that all resources except US moved out of "rt.jar", in a separated JAR file. So if we want to increase the chances that SIS run on platforms without the localization JAR file (maybe some mobile devices?), we are better to stick to the Locale.US constant only for hard-coded country codes.
omit e626ea7 Added a private list implementation for managing TreeTable.Node children. Adding or removing elements to/from this list shall update the parent node accordingly.
omit 2dac469 Tried to make LocalizedParseException public API less convolved (even if it is internal API).
omit e3eee32 Ported UnmodifiableArrayList, which will be needed for TreeTable default implementation (and in lot of other places to come).
omit 106c25e Removed Exceptions.createParseException(...) from public API, because too convolved. This forced us to move LocalizedParseException to the internal package. This is a consequence of the need to use a different error message for the upcomming TreeTableFormat class.
omit 781e37b Added pre-defined TableColumn constants for internal usage (more will be added later).
omit 4955807 Initial draft of a TreeTable interface.
omit 6df830e Store the last field value as a Float rather than Integer.
omit 4b1adf8 SVN merge info.
omit 5918ac2 SVN merge info.
omit b0011b1 Merge from the JDK6 branch.
omit af03a83 Merge from the JDK7 branch.
omit 5223fc1 AngleFormat now includes all NumberFormat attributes when formatting AttributedCharacterIterator. This commit also makes our AttributedCharacterIterator more compliant with the java.text contract, since we also need to check for run limits when the current character does *not* contain the requested attribute.
omit 93a3ebd Implemented AngleFormat.formatToCharacterIterator(Object).
omit db6ce21 Resources location: replaced the hard-coded "org.apache.sis.util.resources" location by a search of any package name ending with "resources". We will need that for resources in other modules.
omit eeeb0b1 Use consistent symbols (forgot to include this change in the previous commit).
omit 7d6ab03 SVN merge info.
omit 9cbd5ec SVN merge info.
omit eb8c2e3 Merge from the JDK6 branch (derived collections work).
omit 2dc230b Merge from the JDK7 branch (derived collections work).
omit 1fb8e9c Various minor documentation fixes.
omit f8b3603 Merge the "javadoc crash" bug fix from trunk.
omit 61e1bbd Removed a {@link} javadoc tag which is causing the following exception on the JDK6 branch: java.lang.ClassCastException: com.sun.tools.doclets.formats.html.SingleIndexWriter cannot be cast to com.sun.tools.doclets.formats.html.ClassWriterImpl
omit 6f22071 Added static factory methods for creating derived collections, renamed internal variables for consistency and updated javadoc.
omit e4d6247 Javadoc clarification.
omit eca7319 Added convenience methods for testing monotonicity and bijectivity.
omit e6dbf45 Added a check for the bijective function case.
omit 4a66985 Added tests.
omit 15e20f8 Refactored DerivedMap and DerivedSet in order to use ObjectConverter, and remove those derived collections from public API. We will add static factory methods in Collections later.
omit f18896b Ported the ObjectConverter interface, which will needed for metadata. This interface will also allow us to refactor DerivedSet and DerivedMap in a way which will hide them for public API, which will help to reduce the API size.
omit f2b25cf Ported DerivedMap, which will be needed for AngleFormat.formatToCharacterIterator implementation. Will also be needed later for metadata implementation.
omit adb5602 SVN merge info.
omit be5370e SVN merge info.
omit 6ed708f Merge from the JDK6 branch.
omit 97c400b Merge from the JDK7 branch.
omit 38f67db Fixed a few javadoc warnings.
omit 87be735 Removed X364 from public API (moved to internal package) because: - This is a very incomplete implementation of X3.64 standard; - Detection of whether X3.64 is supported or not is not very reliable; - X3.64 is a very old standard (back from VT100 days) and is kind deprecated today, despite being widely used. - There is other libraries dedicated to this standard, this is not Apache SIS job.
omit 48820cb Replaced the static int *_FIELD constant by the Format.Field, to be needed later for implementation of AngleFormat.formatToCharacterIterator(Object).
omit a28b5a8 Initial implementation of a simple CharacterIterator (internal class), to be needed later for implementation of AngleFormat.formatToCharacterIterator(Object).
omit 709b99e Removed (for now) FilteredAppendable from public API, in order to keep it simpler.
omit 2ae4f6e Re-arrange the test classes in a way that better mirror the tested implementation class.
omit a2c60bd Minor cleaning.
omit 9f1ea15 Renamed LineWrapFormatter as LineFormatter, since it now combines the work of other line-related formatters.
omit 4bbd785 Merged IndentedLineFormatter with LineWrapFormatter.
omit cc9d738 Merged EndOfLineFormatter with LineWrapFormatter, for the reasons given in the previous commit.
omit e58adba Merged ExpandedTabFormatter with LineWrapFormatter. The reason is that LineWrapFormatter needs to take tabulation in account for correct line length calculation, and ExpandedTabFormatter would be better to use the same line-detection and X.364 escape sequences handling than LineWrapFormatter for consistency. This would lead to large duplication between those two classes both in term of code and in term of processing power.
omit 937e7bf Added a first draft of a chapter about sis-utility module.
omit cc60bd7 Added FindBugs configuration (not yet enabled).
omit 783a999 Removed the Checkstyle and PMD reports from the web site.
omit af3bbbb In fractionDigitsForDelta, the check for the 0.…95 should be optional.
omit 809603a Make possible to use TableFormatter without dealing with IOException when the output is known to be a StringBuilder.
omit 39593c5 Needs to measure the string length in terms of code points rather then 'char'.
omit b96b052 Fixed some FindBugs warnings.
omit 9b4c3f3 Angle implements Formattable.
omit 2a88a93 Tuned Angle.toString() and added tests.
omit d8d9dc1 Added support for variable number of fraction digits in AngleFormat.
omit ba97f09 Added a function for computing the number of digits needed for formatting numbers with a given accuracy. This will be used for formatting Angle with the necessary number of digits.
omit eb17ac0 Renamed getMessage(Locale) as getLocalizedMessage(Locale) for clarity and consistency with Throwable.getLocalizedMessage(). Minor javadoc fixes, and added the missing AngleFormat.clone() method.
omit aa255f4 SVN merge info.
omit fb1018c Merge info.
omit f8abb36 Merge from the JDK6 branch.
omit c802c11 Merge from the JDK7 branch.
omit 1b55644 Use Exception.getMessage() or getLocalizedMessage() depending if the message is targeted to system administrator or end user.
omit 78d622c Minor re-organisation of test orders.
omit f1b92f2 Ported the AngleFormat class.
omit bbaae4a Moved static methods into the IO class. More accurate declaration of test dependencies.
omit 3528d7f SVN merge info.
omit 0b891eb SVN merge info.
omit 0e8bd29 Merge from the JDK6 branch.
omit 5338be4 Merge from the JDK7 branch.
omit b66c0e6 Commited the TableFormatter class.
omit 1bea73f Documentation updates and safer check for surrogate characters.
omit efb1564 Added LineWrapFormatter (last dependency needed for TableFormatter).
omit 5d0b9b2 Formatter code more robust to Unicode supplementary characters (checks for surrogate pairs).
omit cbda7cc Added dependencies for the TableFormatter class (to be committed later).
omit 4969ba4 Initial commit of I/O package (will be needed for metadata).
omit a204591 Javadoc formatting (hopefully last for a little while), and added a page listing the custom styles.
omit 18ab1c5 Merge from the JDK7 branch (javadoc and styling work).
omit ce49d0c Consistent indentation of notes.
omit 3b0bad1 Use <h5> and <h6> for sections in javadoc.
omit a531e31 Removed useless <p> (not needed after </ul>) in an effort to simplify javadoc markup.
omit 1455550 Miscelaneous javadoc fixes.
omit 144a843 Removed <p> inside <ul><li> elements. Instead, rely on styling.
omit a83c41a Added word to the IDE spelling dictionary.
omit 136d12b Consistent usage of <p>...</p> tags in javadoc comment. Remove <p> around <ul>, <ol> or <table>, since they can be handled by styling.
omit 325a3d7 Minor correction in stylesheet (some instruction were ignored because overwritten).
omit ee3c0cd Stylesheet for JDK7.
omit 598d276 Javadoc formatting.
omit b2b78c1 Javadoc formatting.
omit bd38d74 SVN merge info.
omit 03fa073 Merge info.
omit c788915 Merge from the JDK6 branch.
omit 9b05523 Merge from the JDK7 branch.
omit faa86a9 Added the LenientComparable interface.
omit 18e6c15 Forgot to rename to strings in the tests.
omit 5171326 Forgot to rename some packages in the documentation.
omit 363b42a Modified styling on the developer guide.
omit 488883c Added a chapter about XML.
omit 26012d3 Proper XML indentation (no content change).
omit 18d58b8 Documentation updates, mostly the docbook document.
omit 295f5a2 Merge info.
omit be92b02 SVN merge info.
omit fb49673 Fixed CRC32 values.
omit 24ccbd1 Merge from the JDK6 branch.
omit fa9a933 Fixed CRC32 values.
omit 315ea7a Merge from the JDK7 branch.
omit 9e43b70 Isolate JDK7-specific imports.
omit 9eab8e9 Javadoc fixes.
omit e266a2d Added words to the NetBeans IDE project dictionary.
omit 01b0985 Added IdentifierMap implementation.
omit d09434d Added utility methods working on Citation instances.
omit f8cf47b Added IdentifiedObject interface and its dependency.
omit cffc913 Added UnsupportedImplementationException.
omit 33521c4 Merge info.
omit f48ee09 Merge info.
omit 1bf9735 Merge from the JDK6 branch.
omit d6555b2 Merge from the JDK7 branch.
omit acaa274 Isolated a JDK7-specific import.
omit 08eefe3 Minor documentation update: "name space" --> "namespace". Added that word to the NetBeans project dictionary.
omit 92fa5e3 Added the IdentifierSpace interface.
omit 91c1496 Added XLink implementation.
omit 6a23529 Leverage ArgumentChecks, and documentation updates.
omit 9deb2a2 Fixed an other safety hole: the 'ListIterator.set|add' methods need to check element validity. Since this addition make the method body bigger, abandon the tabular formatting; reformat the inner classes in the classical way.
omit 3961bd9 Initial commit of XML package. For now, contains only the declaration of XML namespaces.
omit df98632 Added an internal package for trivial implementations of some GeoAPI interfaces. This package is needed when we can not depend on a downstream module. For example sis-utility can not depend on sis-metadata, so it can not use DefaultCitation.
omit 277d82a Merge from the JDK6 branch.
omit 290a76d Merge from the JDK7 branch.
omit e46641a Fixed safety hole: checked collection must also invoke 'checkWritePermission()' when Iterator.remove() is invoked. Added checks in map key, value and entry views too.
omit 2a39187 Merge from the JDK7 branch.
omit d659750 More accurate catch clause (JDK7 only).
omit 4618126 Removed the tolerance to key collisions from the Cache class. We will try to be strict, and maybe re-introduce this tolerance if we really can't avoid it.
omit c826fee Minor javadoc fixes.
omit 419849c Fixed Maven and Javadoc warnings. There is no code change in this commit.
omit ddb51fb Merge from the JDK6 branch.
omit 90d7e0d Merge from the JDK7 branch (addition of checked collections).
omit f981821 Leverage the checked collections in the base class of all metadata implementations.
omit 2e983a8 Ported the checked collection classes, which are going to be needed by the metadata module. Those classes provide hooks for controlling write access and synchronization lock, which are too functionalities needed by sis-metadata.
omit df972b5 SVN merge info (skip JDK7-only changes).
omit 798f4ac Replaced System.getProperty("line.separator") by calls to System.lineSeparator() (JDK7 only).
omit bd34158 Merge from the JDK7 branch: Cache and CacheTest.
omit f25c631 Added tests for Cache.
omit 8f39202 Factor out the "wait for garbage collector" code in a TestUtilities class.
omit f90c63e Initial port of the Cache class.
omit 0b66a4d SVN merge info.
omit 4bcbc53 SVN merge info.
omit 20ceace Merge from the JDK6 branch.
omit 05a499c Merge from the JDK7 branch.
omit a932da5 Added documentation about branches.
omit b31b0c1 Merge from the JDK6 branch.
omit 8e2a3b4 Merge from the JDK7 branch.
omit a5df9e1 Trivial change for testing merge.
omit 2b488b5 SVN merge info.
omit a871d81 Leverage JDK7 features (diamond operation, try with resources, multi-catches, suppressed exception, Objects).
omit 4c74ec3 Switch platform from JDK6 to JDK7.
omit 1620fa7 Javadoc fixes.
omit d6463bd SVN merge info (skip the JDK6-specific change from the branch).
omit 0f936fa SVN merge info (skip the GeoAPI 3.0 specific changes from trunk).
omit 98df0b0 Fixes in NetBeans project name for the JDK6 branch.
omit 8427377 Added the missing class-index.properties files on the GeoAPI 3.0 branch. This file shall not be added to the JDKx branches, since this file is included in GeoAPI 3.1.
omit 4c20d87 SVN merge info.
omit 43bce85 Merge from the JDK6 branch.
omit ec2e3be Leverage the MathFunctions.nextPrimeNumber(int) added in the previous commit, for reducing the risk of key collisions.
omit e23bb93 Initial commit of MathFunctions.
omit 7cffdf4 Minor documentation formatting and renaming of private methods.
omit 370efbf Merging from the JDK6 branch. Successfull!
omit fe612fc SVN merge info
omit 394cf8e Trivial change for testing SVN merges.
omit 8d0f146 Enabled a test which is known to fail on GeoAPI 3.0.0 but pass on GeoAPI 3.1.
omit 99eb881 Changed version number from "0.3-geoapi3.0-SNAPSHOT" to "0.3-jdk6-SNAPSHOT" for that branch. Changed NetBeans project name to "Apache SIS for JDK6". Changed GeoAPI dependency from 3.0.0 to 3.1-M03.
omit 9911d14 Removed the newInstance() convenience methods. With type inference provided by JDK7, they are not needed anymore.
omit 3a20f66 Added a safe guard in WeakHashSet and WeakValueHashMap against too early capacity reduction.
omit d49bfc3 Resources: use the key name instead of its numerical code when formatting LogRecord, for more significant message if the java.util.logging.Formatter can't use the resource bundle.
omit 0004bb4 Leverage de WeakValueHashMap.
omit a5d1de4 Ported WeakValueHashMap.
omit a9c7ed9 Factored some WeakHashSet internal mechanic in a separated class for easier sharing with WeakValueHashMap.
omit faa5d71 Minor javadoc fixes.
omit 50c131a Added OSGi BundleActivator.
omit 84346d5 Maintains a chained list of DaemonThreads to terminate when a OSGi bundle is desactivated.
omit 04beff9 Added an utility methods required by WeakHashSet.
omit 9e07979 Added the WeakHashSet implementation.
omit 28c98e1 Base classes for managing the background threads to be created internally by the library.
omit b7f10bd Added a "util" subpackage to "org.apache.sis.internal" package, for better differenciation with internal packages to be provided in other modules (referencing, metadata, etc.).
omit 2b0a322 Provide a TestSuite grouping all tests in dependency order (if any).
omit 95076e6 Added tests for InternationalString implementations.
omit e770fc9 Added support for class dependencies in the test suite, and added verification of method existence in method dependencies.
omit a0dc6f5 Renamed '@Dependency' as '@DependsOnMethod'. This leave room for a '@DependsOn(Class)'.
omit c1e2dcf Avoid star import.
omit a993014 Documentation fixes and clarification.
omit d93dc0e Minor adjustment in test javadoc.
omit 17fb167 Changed the version number from "0.3-SNAPSHOT" to "0.3-geoapi3.0-SNAPSHOT".
omit 8ef8260 Renamed "sis-core" module as "sis-referencing".
omit 6bef7d1 Added Unicode-related methods.
omit 55d38eb Added a "Developing Apache SIS" page, and minor opportunist documentation fixes.
omit 1256380 Added JDOM dependency, and removed references to non-existant test directories.
omit c89e7f7 Added user-neutral NetBeans project files.
omit 84dbf15 Documentation improvement.
omit a855368 Apply the SIS test runner on sis-utility tests.
omit fe2bc9b Initial commit of org.apache.sis.test package, including a JUnit TestRunner taking in account the @Dependency annotation.
omit e5cd32b Documentation updates: - link between org.apache.sis.util.resources and ResourceInternationalString - adjustment about SIS branches versus geoapi or geoapi-pending.
omit 5388dbf Another attempt at fixing SIS-58.
omit d59c4f1 Added more documentation (starting a section about test suites).
omit 2da7578 Fixed Locales fields which needed to be static, fixed documentation, added tests, and added Errors.formatInternational method.
omit 766b4bd Field names shall be consistent with the ones used in other class having such kind of fields (namely: Loggings).
omit c5cc552 Documentation updates.
omit bf98428 Added InternationalString implementations.
omit 8bf6321 Added utility methods working on java.util.Locale.
omit c214c9f Added the @module javadoc tag to sis-build-helper too, for allowing users to see that ResourceCompilerMojo is not part of sis-utility. Also changed the ResourceCompilerException visibility from public to package-privated, since users don't need to know about it.
omit bbe31af Uniformize the first line of javadoc comment (for package-overview page).
omit 0185ca5 Initial commit of org.apache.sis.util.collection.
omit cec4679 Moved the 'resources' package as a sub-package of 'util'. No change in the code. The intend is to make more visible in which module belong the package, and hopefully to be slightly more intuitive since this package relate to classes defined in java.util.
omit c1df97e Added "Quick links" section in modules with links to the home page."
omit cb2685a Minor update in team list (added missing timezone, changed email address).
omit fff6967 Applied some of the recommendations of http://www.apache.org/foundation/marks/pmcs.html (trademark, link to Apache home page and license).
omit 2ce51c3 SNAPSHOT in version numbers needs to be upper-case.
omit c2b0c9e Initial commit of the developer guide.
omit 2ba740e Added a missing carriage return (no change in the content).
omit c472f07 More documentation fixes.
omit 85a19cc - more robustness for SIS-58: Fix SIS Jetty Webapp definition to pick random port
omit 37a9531 URL updates.
omit 01c0dc0 Documentation fixes.
omit 9932660 Provide some content to the home page.
omit 73b8b42 Moved IndexedResourceBundle.summary to CharSequences.shortSentence, use code point API, minor optimization, and add tests.
omit 671a976 Rewrite the resources keys constants only if there is a change.
omit 2f9dbac Improve API consistency: - Rearranged the method order for grouping related methods together - More consistent parameter names - Renamed the "getLinesFromMultilines" methods as "splitOnEOL" because of its relationship with "split" - Renamed the "formatList" method as "toString" because of its relationship with Arrays.toString (and not with java.text.Format)
omit 0824a68 Enable the {@website} taglet.
omit 6e4dde0 Document the exceptions thrown by the Arrays class, do not use assert for argument checks (document recommended assertions instead), and renamed 'unionSorted' as 'unionOfSorted'.
omit 12fe1ad More accurate documentation.
omit 2400364 Added overview and stylesheet for the sis-utility module.
omit b03b2b8 Style files for sis-build-helper, together with documentation updates.
omit 896bfc1 Added stylesheet for the Maven site. This initial commit is a copy of the GeoAPI stylesheet, which was created by ourselves. Future commit may personalize more the style for Apache SIS.
omit 5052c30 Added a WebSite taglet for URL to the Apache SIS web site (Maven reports for now, may be changed in the future).
omit bd91194 Fixed javadoc errors and updated formatting using stylesheet.
omit b9dc068 Group packages in the javadoc home page. The groupings match approximatively the modules.
omit 8d13f55 Enabled the custom javadoc taglets.
omit a9dfa66 Re-enabled the compilation of localized resources, now taking advantage of deployed sis-build-helper snapshots if not already built on the machine.
omit f8f2b87 Added documentation.
omit 8f7fc5e Overwrite the report plugin version number inherited from the parent pom.xml (SIS-65).
omit 51b3896 Do not skip anymore the deployment of sis-build-helper, since it caused error 404 in the generated web site. In addition, this will hopefully help to increase the stability of build on Jenkins servers when two consecutive builds are performed by different machine. We will take this opportunity for providing some APT documentation in this module.
omit 2403bbd Changed version number from "0.3-incubating-SNAPSHOT" to "0.3-SNAPSHOT". Removed the paragraph about incubation in the README file. Opportunist update in the requirement from "Java 5" to "Java 6".
omit 5000e70 Temporarily disable the compilation of resource files. We may need to deploy the plugin for avoiding random build failure.
omit a7aac2e Added custom taglets.
omit d4dc972 Relax the required Maven version from 3.0.4 to 3.0.3, in the hope to allow Jenkins to accept building the project.
omit 4549293 Compile the localized resources in the utility module at build time using our Maven mojo.
omit 9ddb05f Updated the SVN URL and email address to their new location after graduation.
omit a7ba58e Improve consistency in CharSequences API: - all CharSequences methods shall work on arbitrary CharSequence instances as claimed by the javadoc; - move methods working on StringBuilder to a separated StringBuilders class; - do not allow CharSequences to modify the provided argument (at the opposite of StringBuilders); - more systematic argument checks.
omit 316d38c Added a few JUnit test classes.
omit 798fce1 Declare GeoAPI in MANIFEST.MF specification section. The implementation section still declare Apache SIS.
omit 8c18acd Javadoc fixes (remove irrelevant @since javadoc tags).
omit 69dc80d Enable the dependencies to the utility methods previously commited.
omit a030ec7 Added org.apache.sis.util.logging package.
omit 03d47a0 List the new utility classes in the package-summary javadoc.
omit 5d241e0 Added utility methods working on CharSequence instances.
omit 683a116 Addition of Classes, Exceptions and Numbers set of static methods.
omit 0e2a987 Hide the org.apache.sis.internal package from javadoc.
omit ae44023 Utility methods working on arrays.
omit fd9460a Added a simple annotation for keeping trace of method performing global configuration of the SIS library.
omit f2601e9 Added the ArgumentChecks utility methods.
omit 4fbf2bc Initial commit of IndexedResourceBundle, with empty (for now) Errors resources.
omit 4e52a3e Creation of sis-utility module (SIS-62). This commit contains only a few trivial classes to be used by other classes to be committed tomorrow.
omit ee646b2 New attempt to build sis-build-helper on Apache Jenkins server.
omit feaf7e8 Exclude the sis-build-helper from the build for now, since it doesn't work with current Jenkins configuration.
omit bb184c6 First draft of a sis-build-helper module. This initial commit contains a Maven MOJO to be used for compiling Java properties files to UTF-8 files. This is used internally for internationalization. This localization mechanism is build on top of java.util.ResourceBundle (it extends its controller). This main addition compared to the default ResourceBundler is type safety and the handling of parameterized resources using java.text.MessageFormat.
omit f4743c6 Moved contributor as developer. No need to repeat the URL, since it is inherited from the parent pom.xml.
omit 0ad8eb4 Fixed a typo ("longtitude" --> "longitude"), and opportunist trailing space trimming performed by the IDE. This commit does not contain any code change.
omit c5f4ae0 Added Javadoc overview and stylesheet. For now, this apply only to the aggregated javadoc generated from the root project directory.
omit f8b7cc7 Exclude debugging information (except filenames and line numbers) and optimized when the "apache-release" profil is enabled.
omit 63a4c37 Removed the .txt extension in CHANGES, HEADER and README files for consistency with LICENSE, NOTICE, KEYS and DEPENDENCIES (SIS-60). Updated the content of other files in order to remove the .txt extension in their reference to the above-cited files. This commit contains opportunist trimming of trailing spaces performed by the IDE editor.
omit 00d2539 Javadoc configuration (SIS-56).
omit cbe6e65 Added explicit locale and encoding settings (SIS-56).
omit 73804ea Removed the ".txt" extension from NOTICE and LICENSE file in order to be compliant with Apache default configuration (SIS-60). This allow us to remove the assembly configuration, since the default one works as expected.
omit 2f0e52d Trivial reformating for consistency (SIS-56).
omit 7e9e752 Moved dependencies and plugins version numbers to the root pom.xml, in order to ensure that all modules use consistent versions (SIS-56).
omit 0d0613b Moved the JUnit dependency to the root pom.xml, since it is used by all modules.
omit 006df40 Move OSGi configuration to the root pom.xml (SIS-56).
omit af6f59a Added plugin version numbers. This resolve the Maven warnings at build time.
omit 6214259 Documented the change done in the previous commit. This commit also contains opportunist trimming of trailing spaces (done by the editor).
omit 558018c Merged the sis-parent/pom.xml file with the root pom.xml file (SIS-56).
omit cd6e8ca Formatting without any functional change in the XML elements.
omit 9f5d833 Move large test file outside code area (SIS-59).
omit 6ad7b2a Fix for SIS-58: Fix SIS Jetty Webapp definition to pick random port
omit 9e1120f More aggressive compression of PNG file (13.5% decrease in size) using optipng.
omit a024003 Upgrated the org.apache.apache parent from version 7 to version 10 (SIS-56). Also upgrated findbugs-maven-plugin and maven-checkstyle-plugin.
omit cb82961 Removed the maven-site-plugin configuration, in order to allow "mvn site" to work through the default configuration.
omit 81e8154 Skeleton implementation of GeoAPI Citation (SIS-55).
omit bcd9d17 SIS-54: Remove the definition of the sis.version property. Contributed by Martin Desruisseaux.
omit 2815a60 Fix for SIS-53: svn:ignore property missing on the sis-app directory contributed by Martin Desruisseaux.
omit 2df54f3 - patch for SIS-52: Create a sis-metadata module contributed by Martin Desruisseaux
omit f547939 - patch for SIS-52: Create a sis-metadata module contributed by Martin Desruisseaux
omit 355108e SIS-50: added license header to TestGeoHashUtils
omit b0c3607 updated SIS-48, 49, 50 info in CHANGES.txt
omit 347862e SIS-50: added simple unit tests for GeoHashUtils class in sis-core
omit 2b7412f SIS-48: added basic junit tests for geometry classes in sis-core
omit 5e93d01 SIS-48: corrected typo in comment for testCreateLatLonPointRadius method
omit 3b224d0 SIS-48: added some basic junit tests for the core geometry classes in sis-core
omit fdd869b SIS-49: updated getCircularRegionApproximation in LatLonPointRadius to prevent runtime exceptions
omit bf621d2 SIS-49: changed bearingIncrement from int to double, added check to prevent ArithmeticException for divide by zero if numberOfPoints is zero
omit dab509d SIS-49: updated for loop in method getCircularRegionApproximation of LatLonPointRadius class to prevent ArrayIndexOutOfBoundsException
omit 2d58098 SIS-46 Add sis-app module to current SIS project
omit 599d5c0 - fix for SIS-44 Update the 'demo.jsp' file in the SIS webapp to use an open source maps API contributed by Ross Laidlaw
omit e932054 - fix for SIS-41 Improve the demo.jsp CSS
omit 85ec820 - add license header
omit 7d48450 - progress towards SIS-39: Capacity is not used and memory waste in QuadTreeNode (identified by Peter Karich)
omit c4c5abd - fix for SIS-40: Add the missing documentation comments for SIS WS layer contributed by Charitha Madusanka
omit 92a671e - fix for SIS-38 Add the missing documentation comments for SIS-core storage contributed by Charitha Madusanka
omit fa1bd9e - update CHANGES file.
omit 1fe97ce [maven-release-plugin] prepare for next development iteration
omit 05df7c9 [maven-release-plugin] prepare release 0.2-incubating
omit eaa6508 - indicate aestrada made the commit for SIS-30
omit bd1e5b4 Added notes to README.txt
omit 68cf6a4 Closed out SIS-30
omit 8132bf2 - SIS-27: Update sis-parent/pom.xml compile target to 1.6
omit 30c5f0f - fix for SIS-29: Website must display disclaimer text
omit b48e292 - fix for SIS-26 Use of Java 1.6 Annotation in /sis-core/src/main/java/org/apache/sis/storage/GeoRSSData.java
omit 8b32ddc - add header for 0.2-incubating changes
omit 94dad05 fix for SIS-25 Location servlet doesn't return correct coordinates for point-radius query region
omit a63cd3e - add attribution on changelog entry
omit 838661a [maven-release-plugin] prepare for next development iteration
omit d1dd6b2 [maven-release-plugin] prepare release 0.1-incubating
omit 5736251 - prep for 0.1-incubating RC #3
omit 9b468ef - update per ant elder's comments
omit 5b1d4f5 [maven-release-plugin] prepare for next development iteration
omit 7e277ba [maven-release-plugin] prepare release 0.1-incubating
omit e140b7b - fix version #s
omit 18ee06f - roll back to 0.1-incubating-SNAPSHOT for maven release plugin and RC #2
omit d4faab7 - note that ROME and Georss-ROME are under the ASLv2 per Kevan Miller's comments.
omit e5fdbc9 - add JDOM license to NOTICE.txt and upgrade to apache parent 7 per comments from Mark Struberg.
omit 2c07d31 - add Incubator disclaimer per comments from Ant Elder. http://incubator.apache.org/guides/branding.html#disclaimers
omit 29c0845 - bump dep for 0.2-incubating-SNAPSHOT trunk dev
omit fd8ed85 [maven-release-plugin] prepare for next development iteration
omit 8fb432b [maven-release-plugin] prepare release sis-0.1-incubating
omit 1323dcb - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
omit ed3cb70 - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
omit 3ee02a8 - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo: include site logo locally means no need for WAR plugin conf
omit f443a83 Rename to -SNAPSHOT at the end so mvn:release works. SIS-24
omit 73ce2cf - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo
omit fc8d8cc - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
omit 8e946e4 - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo
omit ead0d8f - fix for SIS-22 Error obtaining geodata RSS causes Qtree index to not be written
omit e316f94 - fix for SIS-22 Error obtaining geodata RSS causes Qtree index to not be written
omit d34d6e2 - fix for SIS-21 Path to location service shouldn't include prefix slash
omit 006f96b - fix for SIS-20 Make the qTreeIdxPath and geodata paths configurable properties
omit b45626f - fix for SIS-19 QTreeWriter and GeoRSSData.save don't check to make sure the directory exists before creating data there
omit 5b394cc - fix for SIS-18 demo JSP has incorrect form get action set
omit d89aed9 - fix for SIS-17 Context params need override set to false
omit 4431dcf - fix for SIS-16 SIS location service is configured incorrectly
omit 396aba4 - fix for SIS-12 Write basic SIS documentation for CLI and for WS layer
omit 7b79727 - fix for SIS-14 Use LatLon class instead of plain double points in QuadTreeData interface
omit aab0768 - fix for SIS-15 Bake in Demo JSP page for initial release
omit 7edfb73 Add Nga Chung to committer list
omit 8ee6ad2 - fix for SIS-3 Refactor SIS
omit 0ca1df8 - fix for SIS-7 Top level pom for SIS
omit 654b0a1 - add rest of mentors per: http://wiki.apache.org/incubator/SpatialProposal and alpha sort committers and mentors by first name, last name
omit eef390c - update CHANGES.txt
omit f803ced - fix for SIS-6 Create DOAP file for projects.a.o
omit d5f9891 - progress towards SIS-2 Stand up SIS website
omit 861ab13 - progress towards SIS-2 Stand up SIS website
omit 8db5b17 - progress towards SIS-2 Stand up SIS website
omit 7cced71 - bring CHANGES.txt up to date
omit bedf321 IN PROGRESS - issue SIS-4: Add test data http://issues.apache.org/jira/browse/SIS-4
add b783d14 IN PROGRESS - issue SIS-4: Add test data http://issues.apache.org/jira/browse/SIS-4
add 7ba5cf1 - bring CHANGES.txt up to date
add c13a014 - progress towards SIS-2 Stand up SIS website
add a47b6c4 - progress towards SIS-2 Stand up SIS website
add e3ef705 - progress towards SIS-2 Stand up SIS website
add 7728cda - fix for SIS-6 Create DOAP file for projects.a.o
add 6823315 - update CHANGES.txt
add 96034ae - add rest of mentors per: http://wiki.apache.org/incubator/SpatialProposal and alpha sort committers and mentors by first name, last name
add 1f69414 - fix for SIS-7 Top level pom for SIS
add b620ac7 - fix for SIS-3 Refactor SIS
add 373425f Add Nga Chung to committer list
add 9da4745 - fix for SIS-15 Bake in Demo JSP page for initial release
add 9df3ad1 - fix for SIS-14 Use LatLon class instead of plain double points in QuadTreeData interface
add acc308f - fix for SIS-12 Write basic SIS documentation for CLI and for WS layer
add ef39d75 - fix for SIS-16 SIS location service is configured incorrectly
add 2170e2c - fix for SIS-17 Context params need override set to false
add aa4b158 - fix for SIS-18 demo JSP has incorrect form get action set
add 9688e78 - fix for SIS-19 QTreeWriter and GeoRSSData.save don't check to make sure the directory exists before creating data there
add ca89495 - fix for SIS-20 Make the qTreeIdxPath and geodata paths configurable properties
add c017ae1 - fix for SIS-21 Path to location service shouldn't include prefix slash
add d861251 - fix for SIS-22 Error obtaining geodata RSS causes Qtree index to not be written
add 6566da9 - fix for SIS-22 Error obtaining geodata RSS causes Qtree index to not be written
add 9ea5d0f - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo
add adedb89 - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
add 72335a3 - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo
add 1de2b57 Rename to -SNAPSHOT at the end so mvn:release works. SIS-24
add 6edf30e - fix for SIS-23 Brand demo.jsp with ApacheSIS TM logo: include site logo locally means no need for WAR plugin conf
add db5fd3e - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
add cd2df52 - fix for SIS-24 Refactor sis.version into build process flowdown through Maven and rename to 0.1-incubating
add cdab8c8 [maven-release-plugin] prepare release sis-0.1-incubating
add 8fe403e [maven-release-plugin] prepare for next development iteration
add 659a45c - bump dep for 0.2-incubating-SNAPSHOT trunk dev
add c7b60cd - add Incubator disclaimer per comments from Ant Elder. http://incubator.apache.org/guides/branding.html#disclaimers
add 665d285 - add JDOM license to NOTICE.txt and upgrade to apache parent 7 per comments from Mark Struberg.
add 47274d8 - note that ROME and Georss-ROME are under the ASLv2 per Kevan Miller's comments.
add 827a984 - roll back to 0.1-incubating-SNAPSHOT for maven release plugin and RC #2
add 28dbea2 - fix version #s
add ac4d4c8 [maven-release-plugin] prepare release 0.1-incubating
add f5fbf4b [maven-release-plugin] prepare for next development iteration
add 2da2591 - update per ant elder's comments
add 8f8d4fc - prep for 0.1-incubating RC #3
add 49adc75 [maven-release-plugin] prepare release 0.1-incubating
add e0be76f [maven-release-plugin] prepare for next development iteration
add 2a99e9b - add attribution on changelog entry
add 110531c fix for SIS-25 Location servlet doesn't return correct coordinates for point-radius query region
add 81fd7fc - add header for 0.2-incubating changes
add 7c4209c - fix for SIS-26 Use of Java 1.6 Annotation in /sis-core/src/main/java/org/apache/sis/storage/GeoRSSData.java
add f93bf1c - fix for SIS-29: Website must display disclaimer text
add f2f1d45 - SIS-27: Update sis-parent/pom.xml compile target to 1.6
add 9485ae3 Closed out SIS-30
add 8562106 Added notes to README.txt
add a3efa1c - indicate aestrada made the commit for SIS-30
add 1a024a8 [maven-release-plugin] prepare release 0.2-incubating
add a2262f6 [maven-release-plugin] prepare for next development iteration
add 4535929 - update CHANGES file.
add dc15535 - fix for SIS-38 Add the missing documentation comments for SIS-core storage contributed by Charitha Madusanka
add 65c8cfe - fix for SIS-40: Add the missing documentation comments for SIS WS layer contributed by Charitha Madusanka
add becc576 - progress towards SIS-39: Capacity is not used and memory waste in QuadTreeNode (identified by Peter Karich)
add 90fd3f6 - add license header
add 4d30b8e - fix for SIS-41 Improve the demo.jsp CSS
add 3767f51 - fix for SIS-44 Update the 'demo.jsp' file in the SIS webapp to use an open source maps API contributed by Ross Laidlaw
add 7fc2d42 SIS-46 Add sis-app module to current SIS project
add c9fce37 SIS-49: updated for loop in method getCircularRegionApproximation of LatLonPointRadius class to prevent ArrayIndexOutOfBoundsException
add 950b037 SIS-49: changed bearingIncrement from int to double, added check to prevent ArithmeticException for divide by zero if numberOfPoints is zero
add 04fa485 SIS-49: updated getCircularRegionApproximation in LatLonPointRadius to prevent runtime exceptions
add 6dd9c98 SIS-48: added some basic junit tests for the core geometry classes in sis-core
add 5fdc9e1 SIS-48: corrected typo in comment for testCreateLatLonPointRadius method
add a43c09b SIS-48: added basic junit tests for geometry classes in sis-core
add 5e25233 SIS-50: added simple unit tests for GeoHashUtils class in sis-core
add 358f976 updated SIS-48, 49, 50 info in CHANGES.txt
add 1eeced1 SIS-50: added license header to TestGeoHashUtils
add f2aab54 - patch for SIS-52: Create a sis-metadata module contributed by Martin Desruisseaux
add 0065f0c - patch for SIS-52: Create a sis-metadata module contributed by Martin Desruisseaux
add d08dba3 Fix for SIS-53: svn:ignore property missing on the sis-app directory contributed by Martin Desruisseaux.
add ac532de SIS-54: Remove the definition of the sis.version property. Contributed by Martin Desruisseaux.
add b977bfd Skeleton implementation of GeoAPI Citation (SIS-55).
add 84b7800 Removed the maven-site-plugin configuration, in order to allow "mvn site" to work through the default configuration.
add abb89f9 Upgrated the org.apache.apache parent from version 7 to version 10 (SIS-56). Also upgrated findbugs-maven-plugin and maven-checkstyle-plugin.
add b607487 More aggressive compression of PNG file (13.5% decrease in size) using optipng.
add 8601feb Fix for SIS-58: Fix SIS Jetty Webapp definition to pick random port
add 1d217d2 Move large test file outside code area (SIS-59).
add b77538f Formatting without any functional change in the XML elements.
add 65172d3 Merged the sis-parent/pom.xml file with the root pom.xml file (SIS-56).
add a4a2700 Documented the change done in the previous commit. This commit also contains opportunist trimming of trailing spaces (done by the editor).
add fcf8d23 Added plugin version numbers. This resolve the Maven warnings at build time.
add fb474e2 Move OSGi configuration to the root pom.xml (SIS-56).
add 9268894 Moved the JUnit dependency to the root pom.xml, since it is used by all modules.
add 5f1533d Moved dependencies and plugins version numbers to the root pom.xml, in order to ensure that all modules use consistent versions (SIS-56).
add 5a0d39a Trivial reformating for consistency (SIS-56).
add b1c4fa2 Removed the ".txt" extension from NOTICE and LICENSE file in order to be compliant with Apache default configuration (SIS-60). This allow us to remove the assembly configuration, since the default one works as expected.
add 96ef341 Added explicit locale and encoding settings (SIS-56).
add 343994c Javadoc configuration (SIS-56).
add 24402a8 Removed the .txt extension in CHANGES, HEADER and README files for consistency with LICENSE, NOTICE, KEYS and DEPENDENCIES (SIS-60). Updated the content of other files in order to remove the .txt extension in their reference to the above-cited files. This commit contains opportunist trimming of trailing spaces performed by the IDE editor.
add 07fba67 Exclude debugging information (except filenames and line numbers) and optimized when the "apache-release" profil is enabled.
add 9491cc6 Added Javadoc overview and stylesheet. For now, this apply only to the aggregated javadoc generated from the root project directory.
add 8090499 Fixed a typo ("longtitude" --> "longitude"), and opportunist trailing space trimming performed by the IDE. This commit does not contain any code change.
add bb23f0c Moved contributor as developer. No need to repeat the URL, since it is inherited from the parent pom.xml.
add 14ca423 First draft of a sis-build-helper module. This initial commit contains a Maven MOJO to be used for compiling Java properties files to UTF-8 files. This is used internally for internationalization. This localization mechanism is build on top of java.util.ResourceBundle (it extends its controller). This main addition compared to the default ResourceBundler is type safety and the handling of parameterized resources using java.text.MessageFormat.
add b7c9209 Exclude the sis-build-helper from the build for now, since it doesn't work with current Jenkins configuration.
add af2f58d New attempt to build sis-build-helper on Apache Jenkins server.
add bea342b Creation of sis-utility module (SIS-62). This commit contains only a few trivial classes to be used by other classes to be committed tomorrow.
add b52bc6c Initial commit of IndexedResourceBundle, with empty (for now) Errors resources.
add e343c92 Added the ArgumentChecks utility methods.
add be42e4b Added a simple annotation for keeping trace of method performing global configuration of the SIS library.
add f344c98 Utility methods working on arrays.
add 02d603d Hide the org.apache.sis.internal package from javadoc.
add 7bb383b Addition of Classes, Exceptions and Numbers set of static methods.
add e43f91a Added utility methods working on CharSequence instances.
add 7cadef5 List the new utility classes in the package-summary javadoc.
add 00759ae Added org.apache.sis.util.logging package.
add 46604a2 Enable the dependencies to the utility methods previously commited.
add 0859e0a Javadoc fixes (remove irrelevant @since javadoc tags).
add 0c26245 Declare GeoAPI in MANIFEST.MF specification section. The implementation section still declare Apache SIS.
add 856827a Added a few JUnit test classes.
add 5a69d5b Improve consistency in CharSequences API: - all CharSequences methods shall work on arbitrary CharSequence instances as claimed by the javadoc; - move methods working on StringBuilder to a separated StringBuilders class; - do not allow CharSequences to modify the provided argument (at the opposite of StringBuilders); - more systematic argument checks.
add 16b3e45 Updated the SVN URL and email address to their new location after graduation.
add 4ed869f Compile the localized resources in the utility module at build time using our Maven mojo.
add ff9b753 Relax the required Maven version from 3.0.4 to 3.0.3, in the hope to allow Jenkins to accept building the project.
add 1d3613d Added custom taglets.
add 47ad1e7 Temporarily disable the compilation of resource files. We may need to deploy the plugin for avoiding random build failure.
add e68669a Changed version number from "0.3-incubating-SNAPSHOT" to "0.3-SNAPSHOT". Removed the paragraph about incubation in the README file. Opportunist update in the requirement from "Java 5" to "Java 6".
add 039169a Do not skip anymore the deployment of sis-build-helper, since it caused error 404 in the generated web site. In addition, this will hopefully help to increase the stability of build on Jenkins servers when two consecutive builds are performed by different machine. We will take this opportunity for providing some APT documentation in this module.
add 5c823f3 Overwrite the report plugin version number inherited from the parent pom.xml (SIS-65).
add 56d5bd9 Added documentation.
add 9081257 Re-enabled the compilation of localized resources, now taking advantage of deployed sis-build-helper snapshots if not already built on the machine.
add f7e1877 Enabled the custom javadoc taglets.
add 82bc6b4 Group packages in the javadoc home page. The groupings match approximatively the modules.
add ed745fd Fixed javadoc errors and updated formatting using stylesheet.
add ffd5a3c Added a WebSite taglet for URL to the Apache SIS web site (Maven reports for now, may be changed in the future).
add c1553ec Added stylesheet for the Maven site. This initial commit is a copy of the GeoAPI stylesheet, which was created by ourselves. Future commit may personalize more the style for Apache SIS.
add 2a17f95 Style files for sis-build-helper, together with documentation updates.
add ff08bc5 Added overview and stylesheet for the sis-utility module.
add 14df0c5 More accurate documentation.
add 5e70e0e Document the exceptions thrown by the Arrays class, do not use assert for argument checks (document recommended assertions instead), and renamed 'unionSorted' as 'unionOfSorted'.
add 0f57745 Enable the {@website} taglet.
add 85e07b2 Improve API consistency: - Rearranged the method order for grouping related methods together - More consistent parameter names - Renamed the "getLinesFromMultilines" methods as "splitOnEOL" because of its relationship with "split" - Renamed the "formatList" method as "toString" because of its relationship with Arrays.toString (and not with java.text.Format)
add 7a84e11 Rewrite the resources keys constants only if there is a change.
add f0306a6 Moved IndexedResourceBundle.summary to CharSequences.shortSentence, use code point API, minor optimization, and add tests.
add e778881 Provide some content to the home page.
add 1519b55 Documentation fixes.
add 9306b7b URL updates.
add 1cb6138 - more robustness for SIS-58: Fix SIS Jetty Webapp definition to pick random port
add a0f770b More documentation fixes.
add cc30d8a Added a missing carriage return (no change in the content).
add 1800e13 Initial commit of the developer guide.
add 6ee4086 SNAPSHOT in version numbers needs to be upper-case.
add be30f54 Applied some of the recommendations of http://www.apache.org/foundation/marks/pmcs.html (trademark, link to Apache home page and license).
add 29f2faa Minor update in team list (added missing timezone, changed email address).
add 9d9a7a3 Added "Quick links" section in modules with links to the home page."
add 08d5b67 Moved the 'resources' package as a sub-package of 'util'. No change in the code. The intend is to make more visible in which module belong the package, and hopefully to be slightly more intuitive since this package relate to classes defined in java.util.
add fb9c935 Initial commit of org.apache.sis.util.collection.
add 2d26b69 Uniformize the first line of javadoc comment (for package-overview page).
add da29c6b Added the @module javadoc tag to sis-build-helper too, for allowing users to see that ResourceCompilerMojo is not part of sis-utility. Also changed the ResourceCompilerException visibility from public to package-privated, since users don't need to know about it.
add ba616c8 Added utility methods working on java.util.Locale.
add 425775c Added InternationalString implementations.
add a911c9c Documentation updates.
add a70171b Field names shall be consistent with the ones used in other class having such kind of fields (namely: Loggings).
add ff1d7b9 Fixed Locales fields which needed to be static, fixed documentation, added tests, and added Errors.formatInternational method.
add 51f3141 Added more documentation (starting a section about test suites).
add f475826 Another attempt at fixing SIS-58.
add c51c65c Documentation updates: - link between org.apache.sis.util.resources and ResourceInternationalString - adjustment about SIS branches versus geoapi or geoapi-pending.
add 116da27 Initial commit of org.apache.sis.test package, including a JUnit TestRunner taking in account the @Dependency annotation.
add 2515719 Apply the SIS test runner on sis-utility tests.
add 0da1902 Documentation improvement.
add 77b579e Added user-neutral NetBeans project files.
add 851c658 Added JDOM dependency, and removed references to non-existant test directories.
add fe7bc26 Added a "Developing Apache SIS" page, and minor opportunist documentation fixes.
add e7b5d7f Added Unicode-related methods.
add 21b31f9 Renamed "sis-core" module as "sis-referencing".
add 431e974 Changed the version number from "0.3-SNAPSHOT" to "0.3-geoapi3.0-SNAPSHOT".
add 265b294 Minor adjustment in test javadoc.
add a59048c Documentation fixes and clarification.
add 2abc9ab Avoid star import.
add 10ce309 Renamed '@Dependency' as '@DependsOnMethod'. This leave room for a '@DependsOn(Class)'.
add a38c2d6 Added support for class dependencies in the test suite, and added verification of method existence in method dependencies.
add 0e62723 Added tests for InternationalString implementations.
add c22cfee Provide a TestSuite grouping all tests in dependency order (if any).
add 0883b92 Added a "util" subpackage to "org.apache.sis.internal" package, for better differenciation with internal packages to be provided in other modules (referencing, metadata, etc.).
add affe876 Base classes for managing the background threads to be created internally by the library.
add 0157c79 Added the WeakHashSet implementation.
add dc33b7e Added an utility methods required by WeakHashSet.
add 3b2020a Maintains a chained list of DaemonThreads to terminate when a OSGi bundle is desactivated.
add b837f2b Added OSGi BundleActivator.
add d2638df Minor javadoc fixes.
add 01f74cd Factored some WeakHashSet internal mechanic in a separated class for easier sharing with WeakValueHashMap.
add 63ef178 Ported WeakValueHashMap.
add ff779a9 Leverage de WeakValueHashMap.
add ca7df76 Resources: use the key name instead of its numerical code when formatting LogRecord, for more significant message if the java.util.logging.Formatter can't use the resource bundle.
add 7e5e34e Added a safe guard in WeakHashSet and WeakValueHashMap against too early capacity reduction.
add 63da258 Removed the newInstance() convenience methods. With type inference provided by JDK7, they are not needed anymore.
add 0865506 Changed version number from "0.3-geoapi3.0-SNAPSHOT" to "0.3-jdk6-SNAPSHOT" for that branch. Changed NetBeans project name to "Apache SIS for JDK6". Changed GeoAPI dependency from 3.0.0 to 3.1-M03.
add d3bfcef Enabled a test which is known to fail on GeoAPI 3.0.0 but pass on GeoAPI 3.1.
add 0e31bbf SVN merge info
add ceb9118 Trivial change for testing SVN merges.
add b24283e Merging from the JDK6 branch. Successfull!
add 2fc76d3 Minor documentation formatting and renaming of private methods.
add 10e134f Initial commit of MathFunctions.
add 0a5269d Leverage the MathFunctions.nextPrimeNumber(int) added in the previous commit, for reducing the risk of key collisions.
add 059f97e Merge from the JDK6 branch.
add 780eff9 SVN merge info.
add c2239a9 Fixes in NetBeans project name for the JDK6 branch.
add 94d82b7 Added the missing class-index.properties files on the GeoAPI 3.0 branch. This file shall not be added to the JDKx branches, since this file is included in GeoAPI 3.1.
add cf91bac SVN merge info (skip the GeoAPI 3.0 specific changes from trunk).
add 9fe26ad SVN merge info (skip the JDK6-specific change from the branch).
add 2e29114 Javadoc fixes.
add c29142d Switch platform from JDK6 to JDK7.
add 5a9ad21 Leverage JDK7 features (diamond operation, try with resources, multi-catches, suppressed exception, Objects).
add fb51de5 SVN merge info.
add ed2c1ab Trivial change for testing merge.
add 2f3c319 Merge from the JDK7 branch.
add d528def Merge from the JDK6 branch.
add c0f7ac7 Added documentation about branches.
add ab2bf6e Merge from the JDK7 branch.
add e291e20 Merge from the JDK6 branch.
add 97b535e SVN merge info.
add 74043bf SVN merge info.
add 4afef69 Initial port of the Cache class.
add e8a2a8d Factor out the "wait for garbage collector" code in a TestUtilities class.
add 2901afa Added tests for Cache.
add 642d437 Merge from the JDK7 branch: Cache and CacheTest.
add db6c102 Replaced System.getProperty("line.separator") by calls to System.lineSeparator() (JDK7 only).
add 3a74430 SVN merge info (skip JDK7-only changes).
add 2bee54c Ported the checked collection classes, which are going to be needed by the metadata module. Those classes provide hooks for controlling write access and synchronization lock, which are too functionalities needed by sis-metadata.
add 96a7c61 Leverage the checked collections in the base class of all metadata implementations.
add deaa2b9 Merge from the JDK7 branch (addition of checked collections).
add dd1a007 Merge from the JDK6 branch.
add 2ff8e0a Fixed Maven and Javadoc warnings. There is no code change in this commit.
add 26f289f Minor javadoc fixes.
add 4812f6b Removed the tolerance to key collisions from the Cache class. We will try to be strict, and maybe re-introduce this tolerance if we really can't avoid it.
add 717a5a2 More accurate catch clause (JDK7 only).
add 89bbe0a Merge from the JDK7 branch.
add ffee8a8 Fixed safety hole: checked collection must also invoke 'checkWritePermission()' when Iterator.remove() is invoked. Added checks in map key, value and entry views too.
add 480a036 Merge from the JDK7 branch.
add 1bc16e4 Merge from the JDK6 branch.
add 9ab2c91 Added an internal package for trivial implementations of some GeoAPI interfaces. This package is needed when we can not depend on a downstream module. For example sis-utility can not depend on sis-metadata, so it can not use DefaultCitation.
add 48ca478 Initial commit of XML package. For now, contains only the declaration of XML namespaces.
add da4c173 Fixed an other safety hole: the 'ListIterator.set|add' methods need to check element validity. Since this addition make the method body bigger, abandon the tabular formatting; reformat the inner classes in the classical way.
add d3b74ca Leverage ArgumentChecks, and documentation updates.
add 18f51c8 Added XLink implementation.
add 8f6fbdf Added the IdentifierSpace interface.
add 621308a Minor documentation update: "name space" --> "namespace". Added that word to the NetBeans project dictionary.
add d75dafc Isolated a JDK7-specific import.
add c9fa36a Merge from the JDK7 branch.
add 98e98ac Merge from the JDK6 branch.
add e2bf069 Merge info.
add 36131e6 Merge info.
add 27360c7 Added UnsupportedImplementationException.
add f29c47c Added IdentifiedObject interface and its dependency.
add baeb6bd Added utility methods working on Citation instances.
add 481904f Added IdentifierMap implementation.
add 9330c83 Added words to the NetBeans IDE project dictionary.
add 1c82af0 Javadoc fixes.
add 1685b90 Isolate JDK7-specific imports.
add 34f55f7 Merge from the JDK7 branch.
add 8a1e9a3 Fixed CRC32 values.
add a503e49 Merge from the JDK6 branch.
add 3ab63cf Fixed CRC32 values.
add 2c82b09 SVN merge info.
add d366fee Merge info.
add 41c3241 Documentation updates, mostly the docbook document.
add 68a8536 Proper XML indentation (no content change).
add ebb99bb Added a chapter about XML.
add 13d2f74 Modified styling on the developer guide.
add 51e1835 Forgot to rename some packages in the documentation.
add 404a6a0 Forgot to rename to strings in the tests.
add 90b08df Added the LenientComparable interface.
add da96e96 Merge from the JDK7 branch.
add 2ef2c7a Merge from the JDK6 branch.
add c0afe3f Merge info.
add 8d9ee8e SVN merge info.
add 3a18db8 Javadoc formatting.
add d71535e Javadoc formatting.
add 53d2dc0 Stylesheet for JDK7.
add aacd24b Minor correction in stylesheet (some instruction were ignored because overwritten).
add 313384f Consistent usage of <p>...</p> tags in javadoc comment. Remove <p> around <ul>, <ol> or <table>, since they can be handled by styling.
add b260380 Added word to the IDE spelling dictionary.
add 5e51fb9 Removed <p> inside <ul><li> elements. Instead, rely on styling.
add 0c28321 Miscelaneous javadoc fixes.
add fa32ec9 Removed useless <p> (not needed after </ul>) in an effort to simplify javadoc markup.
add 45476cb Use <h5> and <h6> for sections in javadoc.
add a926bf4 Consistent indentation of notes.
add eb92e35 Merge from the JDK7 branch (javadoc and styling work).
add 78cf6fe Javadoc formatting (hopefully last for a little while), and added a page listing the custom styles.
add e8396de Initial commit of I/O package (will be needed for metadata).
add 3f225b5 Added dependencies for the TableFormatter class (to be committed later).
add c5bddf7 Formatter code more robust to Unicode supplementary characters (checks for surrogate pairs).
add 70fc3a2 Added LineWrapFormatter (last dependency needed for TableFormatter).
add a4aa606 Documentation updates and safer check for surrogate characters.
add 4b7cd2d Commited the TableFormatter class.
add 425940e Merge from the JDK7 branch.
add b14d390 Merge from the JDK6 branch.
add 02126c8 SVN merge info.
add 7940882 SVN merge info.
add 1724838 Moved static methods into the IO class. More accurate declaration of test dependencies.
add 3b3eba5 Ported the AngleFormat class.
add e567d7a Minor re-organisation of test orders.
add afb9611 Use Exception.getMessage() or getLocalizedMessage() depending if the message is targeted to system administrator or end user.
add 1ee7ac3 Merge from the JDK7 branch.
add 969793d Merge from the JDK6 branch.
add 49a0df7 Merge info.
add 69e094f SVN merge info.
add 9e2e66b Renamed getMessage(Locale) as getLocalizedMessage(Locale) for clarity and consistency with Throwable.getLocalizedMessage(). Minor javadoc fixes, and added the missing AngleFormat.clone() method.
add a0b0aa8 Added a function for computing the number of digits needed for formatting numbers with a given accuracy. This will be used for formatting Angle with the necessary number of digits.
add 2f26447 Added support for variable number of fraction digits in AngleFormat.
add e1766bd Tuned Angle.toString() and added tests.
add 4fe36db Angle implements Formattable.
add c790a69 Fixed some FindBugs warnings.
add b1d8f42 Needs to measure the string length in terms of code points rather then 'char'.
add 5b1e418 Make possible to use TableFormatter without dealing with IOException when the output is known to be a StringBuilder.
add ef94f6e In fractionDigitsForDelta, the check for the 0.…95 should be optional.
add 3eac26a Removed the Checkstyle and PMD reports from the web site.
add 799cd25 Added FindBugs configuration (not yet enabled).
add cfc677a Added a first draft of a chapter about sis-utility module.
add 8d3cbe1 Merged ExpandedTabFormatter with LineWrapFormatter. The reason is that LineWrapFormatter needs to take tabulation in account for correct line length calculation, and ExpandedTabFormatter would be better to use the same line-detection and X.364 escape sequences handling than LineWrapFormatter for consistency. This would lead to large duplication between those two classes both in term of code and in term of processing power.
add d99df59 Merged EndOfLineFormatter with LineWrapFormatter, for the reasons given in the previous commit.
add 8c9af61 Merged IndentedLineFormatter with LineWrapFormatter.
add de04344 Renamed LineWrapFormatter as LineFormatter, since it now combines the work of other line-related formatters.
add aa426b3 Minor cleaning.
add 00b4d48 Re-arrange the test classes in a way that better mirror the tested implementation class.
add 0c16f3f Removed (for now) FilteredAppendable from public API, in order to keep it simpler.
add a39e6d5 Initial implementation of a simple CharacterIterator (internal class), to be needed later for implementation of AngleFormat.formatToCharacterIterator(Object).
add 69c000b Replaced the static int *_FIELD constant by the Format.Field, to be needed later for implementation of AngleFormat.formatToCharacterIterator(Object).
add 45a0f8d Removed X364 from public API (moved to internal package) because: - This is a very incomplete implementation of X3.64 standard; - Detection of whether X3.64 is supported or not is not very reliable; - X3.64 is a very old standard (back from VT100 days) and is kind deprecated today, despite being widely used. - There is other libraries dedicated to this standard, this is not Apache SIS job.
add 972a92a Fixed a few javadoc warnings.
add 2fafb6b Merge from the JDK7 branch.
add 6b7f77e Merge from the JDK6 branch.
add 3ec73fa SVN merge info.
add a2eeb85 Removed a {@link} javadoc tag which is causing the following exception on the JDK6 branch: java.lang.ClassCastException: com.sun.tools.doclets.formats.html.SingleIndexWriter cannot be cast to com.sun.tools.doclets.formats.html.ClassWriterImpl
add 597065d Merge the "javadoc crash" bug fix from trunk.
add b82e85c SVN merge info.
add b459b5f Ported DerivedMap, which will be needed for AngleFormat.formatToCharacterIterator implementation. Will also be needed later for metadata implementation.
add 07a87d5 Ported the ObjectConverter interface, which will needed for metadata. This interface will also allow us to refactor DerivedSet and DerivedMap in a way which will hide them for public API, which will help to reduce the API size.
add 8102a69 Refactored DerivedMap and DerivedSet in order to use ObjectConverter, and remove those derived collections from public API. We will add static factory methods in Collections later.
add 98f33a5 Added tests.
add 6a7d17a Added a check for the bijective function case.
add df222ce Added convenience methods for testing monotonicity and bijectivity.
add 98744b4 Javadoc clarification.
add 27b5eae Added static factory methods for creating derived collections, renamed internal variables for consistency and updated javadoc.
add 97e36e8 Various minor documentation fixes.
add 38ab081 Merge from the JDK7 branch (derived collections work).
add 0bb6c77 Merge from the JDK6 branch (derived collections work).
add 3a042ff SVN merge info.
add 1539434 SVN merge info.
add 57d9acc Use consistent symbols (forgot to include this change in the previous commit).
add be75f23 Resources location: replaced the hard-coded "org.apache.sis.util.resources" location by a search of any package name ending with "resources". We will need that for resources in other modules.
add c074734 Implemented AngleFormat.formatToCharacterIterator(Object).
add abd9d22 AngleFormat now includes all NumberFormat attributes when formatting AttributedCharacterIterator. This commit also makes our AttributedCharacterIterator more compliant with the java.text contract, since we also need to check for run limits when the current character does *not* contain the requested attribute.
add 93447c3 Merge from the JDK7 branch.
add a9bdeb0 Merge from the JDK6 branch.
add 35c164c SVN merge info.
add 326a89f SVN merge info.
add 75e48ca Store the last field value as a Float rather than Integer.
add dd4d4f0 Initial draft of a TreeTable interface.
add 1d9681f Added pre-defined TableColumn constants for internal usage (more will be added later).
add acf41f7 Removed Exceptions.createParseException(...) from public API, because too convolved. This forced us to move LocalizedParseException to the internal package. This is a consequence of the need to use a different error message for the upcomming TreeTableFormat class.
add 142725f Ported UnmodifiableArrayList, which will be needed for TreeTable default implementation (and in lot of other places to come).
add 7de89c7 Tried to make LocalizedParseException public API less convolved (even if it is internal API).
add 7d1ae07 Added a private list implementation for managing TreeTable.Node children. Adding or removing elements to/from this list shall update the parent node accordingly.
add 13ced33 Replaced Locale.UK and Locale.CANADA constants by Locale.US, because recent email on the JDK8 list saids that all resources except US moved out of "rt.jar", in a separated JAR file. So if we want to increase the chances that SIS run on platforms without the localization JAR file (maybe some mobile devices?), we are better to stick to the Locale.US constant only for hard-coded country codes.
add d997935 Use try-with-resource.
add 90db3b5 Additional minor cleanings.
add 5eec140 Still trying to understand why the build on Jenkins sometime pickup the wrong resource.
add d0fc607 Initial draft of a default TreeTable implementation.
add ea79550 Bug fix in IndexedResourceBundle: lastKey was not set on initial MessageFormat creation.
add 287ff33 Added a test case for DefaultTreeTable.
add 839d4e2 Minor javadoc updates.
add e8846f6 Added a test case for node values, and store column indices in a more compact way in the very common case where there is only one column in the table. Provide a constant in ColumnConstant for the most common set of columns. This constant will be used by TreeTableFormat.
add 90cfce0 Slighly more robust AbstractInternationalString in case of non-synchronized access from many threads. This is not completly safe (we would need to declare the field volatile for that), but is okay if the creation of the default string is itself synchronized, and that concurrent creation of that default string creates equals (not necessarily same) instances.
add a7a35b0 First draft of CompoundFormat, which will be the base class of CoordinateFormat, WKTFormat and TreeTableFormat.
add 10b0001 Trivial variables renaming. The "column indices" term is used by MatLab among others.
add 2076fbb Variable renaming.
add 44ae30e Tune the CompoundFormat API contract.
add 2d908dd Specify the upper bound in indexOf(…) method. Will be used by TreeTableFormat.
add 1712ab4 Brings the indexOf(..., String, ...) in consistency with indexOf(..., codePoint, ...). Fix some javadoc terms ("text" instead of "string" in some places).
add abff0ee Initial commit of TreeTableFormat.
add 9c19390 Moved ColumnConstants as a package-privated class close to the other TreeTable-related classes.
add 88cff13 IndexedResourceCompiler must be slightly more tolerance to different declarations of Keys inner class (needed for the next commit).
add 9213273 Merge from the JDK7 branch.
add 3c9db65 Merge from the JDK6 branch.
add 47f8262 SVN merge info.
add 799543c SVN merge info.
add c13f967 Serialization of ResourceInternationalString should use the key name rather than numerical values, for better cross-version compatibility since the numerical values may change at any time.
add 65091e2 Changed the TableColumn interface to a class in an attempt to simplify the framework (this is not SIS role to design elaborated non-spatial tree structure - we want just enough for our needs), and added more tests.
add b369086 Added DefaultTreeTable.clone() method and added various documentation.
add 73065a4 Added more TreeTableFormat tests (using numerical values, more parsing tests). Bug fixes as a result of the additional tests.
add c37190d More on column separator patterns.
add 9149d4f Removed the internal X364.toHTML(String) method, which is probably not appropriate for this module. Avoid some calls to String.substring(...) since it copies the data since recent JDK, and minor documentation cleaning.
add 1d0ba06 Renamed "finestClass" as "narrowestClass" for consistency with the usual terminology (e.g. "narrowing conversion").
add 4ecc4e0 Avoid javadoc link to 'out' in the first sentence, since it causes Javadoc to crash on JDK6 (works fine on JDK7).
add 7ad8fe7 Merge from trunk the fix for javadoc crash.
add d06ec70 Merge from the JDK6 branch the fix for javadoc crash (a JDK6-only problem).
add 0ecedda First draft of a SupervisorMBean, for allowing an administrator to watch SIS status with JConsole. For now, the only operation provided is a list of potential problems detected. For now, the only potential problems detected is unexpected death of the deamon thread. More items may be added in the future.
add 7095dd3 Ported the Statistics class.
add 0fc1b61 Statistics in CacheTest while stressing the cache.
add b54681c Minor javadoc fixes.
add 1ba5509 Documented in CharSequences the policy about white spaces, and apply it consistently in the SIS library: - Use Character.isWhitespace for separating entities (words, elements, tokens...) - Use Character.isSpaceChar for parsing a single entity (mostly in java.text.Format subclasses) - Avoid usage of String.trim() - use CharSequences.trimWhitespaces instead.
add 38d7acc Initial commit of ISO 19139 NilReason.
add bb451f5 Minor javadoc clarification.
add 34fe5a2 Updated the developer guide for the code commited in the last month.
add 066bd94 Reproduced some material from the developer guide to the javadoc.
add adabe5f One more round of javadoc cleanup, and renamed getExplanation() as getOtherExplanation().
add f8bc08e Merge from the JDK7 branch.
add c483670 Merge from the JDK6 branch.
add 1542fd6 SVN merge info.
add 610568f SVN merge info, together with a fix in import order done during the merge.
add eb420d8 Ported the Units class.
add 71de25f Ported ObjectConverters.
add 49017f0 Added MathFunctions and Units to the list of classes of static methods.
add 0ec1f32 ModifiableMetadata shall not allow null values in the collections. Clarified the behavior with null values in other SIS classes.
add e33b6ed Minor javadoc change, and added the missing "extends TestCase" in test code.
add bd6b740 Ported the Version class.
add 5f4938f Provides information about the context of a (un)marshalling process under way. This use the Version class from the previous commit.
add 2622967 Added VersionTest to the test suite.
add 91f85fa ObjectConverters need information about the context of the (un)marshalling process.
add 0cf6c9c Added a central place where to keep trace of objects having UUID.
add 0282d4c Ported ObjectResolver for resolving uuidref and idref.
add d3464cc Added the GCO sub-package. For now this is only for documentation purpose (in the hope to help peoples to see where we are going). Later, concreate classes will be added in this package.
add 5997892 NetBeans configuration: exclude resources .properties files that are used only at compile time.
add 1831df0 Updated dependency versions. This contains a change of "geoapi" dependency to "geoapi-pending" in anticipation for the changes which are going to be needed in GeoAPI, and for consistency with geoapi-conformance which depends on "geoapi-pending". However SIS trunk will continue to depends on geoapi only (not pending).
add 632aa38 Minor javadoc fix.
add 9e42183 Align the IDE configuration to the version numbers declared in the pom.xml.
add 653bb23 Merge from the JDK7 branch.
add 6646676 Merge from the JDK6 branch, except the change from "geoapi" to "geoapi-pending": the trunk stay on the GeoAPI 3.0.0 official release.
add d1d5276 Merge info
add cc92894 Merge info
add b65fd46 Group the test threads in their own thread group, for better separation with SIS threads when debugging.
add e646c81 IDE configuration can now use the default platform.
add 08de914 Keep trace of objects associated to UUID in the current JVM. This is a first draft - will need more review and tests.
add e82e91d Renamed ObjectResolver as ReferenceResolver as suggested on the mailing list.
add 1210779 Removed the resolve(..., NilReason) method, since it seems quite weird to "resolve" a missing value in a reference resolver. We will see later if users really need to "resolve" NilObject.
add 59261fb Added a few tests.
add c3e80f5 Renamed ObjectConverters to ValueConverter.
add 0183bd4 Initial commit of XML utility class (without static methods for now - will be added later).
add 2553efc Initial implementation of MarshalContext (internal API).
add e5551d9 Initial commit of a few JAXB adapters.
add e481539 Ported the base classes of JAXB adapters for CodeLists.
add 9dcb5c7 Moved Locales.getLanguageCode(Locale) to ValueConverter, completed by addition of getCountryCode(...). Renamed CodeLists.getDescription(...) as CodeLists.getCodeTitle(...) and added a "real" getDescription method. Improved javadoc.
add 13bd3e4 Ported JAXB adapter related to character sequences.
add d1f4b3f Apply the org/apache/sis/findbugs-exclude.xml rules defined in the sis-build-helper module.
add d0963a1 Refactored the CharSequences.equalsLettersAndDigits(...) as a equalsFiltered(..., Characters.Filter, boolean) method, and modified the Citations static methods to use it.
add 64b1ea6 Minor javadoc fixes.
add c757710 Moved CodeListAdapter and CodeListProxy from "code" to "gmd" package, in order to keep the "code" package available for sis-metadata module. This separation is required in OSGi environments.
add 31f3ebd Added JAXB adapters for ISO 19115[-2] CodeLists.
add b4cb483 Ported AbstractName and sub-classes.
add dbb95db Javadoc fixes.
add aa94c5b Fixed wrong package name in javadoc.
add ca028d8 Added some content in the developer guide.
add 5db48c0 Documentation updates.
add a3384f4 Replaced some AssertionError by ConcurrentModificationException since those errors could happen if another thread modifes concurrently the collection given in argument to a method.
add d265674 Added JAXB adapters for ISO 19103 GenericName.
add 904385e Renamed GeoapiTests as DefaultNameFactoryTest since the previous name give the impression that this class was testing GeoAPI, instead than inheriting GeoAPI tests.
add cff67af Ported recent bug fixes from Geotk, and added a test case.
add 0176ba4 Minor adjustment in StringBuilder initial capacity (more realist value when we can, rely on default otherwise). Removed a unecessary null check in Classes static method (invoked method shall never return null).
add ec27c7d Moved the DefaultNameFactory.toArray() method to a more implementation-neutral Types.asGenericNames(...) method. Provides a common place where to get the unique factory instance (maybe temporarily, to be revisited when we will have explored dependency injection).
add 6a65c8c Renamed the org.apache.sis.util.type package to org.apache.sis.util.iso. This is consistent with org.apache.sis.metadata.iso. Actually, even the InternationalString interface can be considered (loosely) as ISO since it is closely related to the <gmd:textGroup> XML element.
add 39fd100 Merge from the JDK7 branch.
add edcf8c0 Merge from the JDK6 branch.
add ed37e6d SVN merge info.
add eab9d82 SVN merge info.
add 9479b30 Nail down the class loader to use for fetching resources.
add 697f540 Merged the CodeLists static methods with Types, in the hope to simplify a little bit the API. This also make easier to emphase the similarity between methods like getDescription(CodeList, ...) and getDescription(Class, ...).
add 2f5b1ca Updated the GeoAPI dependency declared in the NetBeans project.
add c3bf2e2 Added a CharSequences.lastIndexOf(...) method, and documentation updates.
add 7e63fa3 Minor documentation and API updates. The purpose of the API change (replace 'char' argument by 'int') is to support code point values.
add 85df238 Removed Utilities.equals(float,float) and equals(double,double) since their is a signficant risk to use it with the wrong data type (char, byte, short, int, long). Added equalsIgnoreMetadata and equalsApproximatively convenience methods since they will be often used.
add 67905f0 Initial port of AbstractDirectPosition.
add 27672e7 Documentation fix.
add 9b65391 Added DirectPosition implementations.
add bba8898 Documentation fixes and slight API simplification by removing the static toString(...) method.
add c67127c Added tests for DirectPosition implementations.
add dd754ff Added serialization tests.
add f86d3d0 Javadoc fixes.
add 85ba031 Initial port of AbstractEnvelope.
add ffefec5 Ported the ArrayEnvelope class.
add 5810808 Ported the GeneralEnvelope class.
add f90fcc5 Moved methods for slightly more "natural" flow (no code change).
add cdaec6d Ported ImmutableEnvelope.
add 1178205 Javadoc fixes.
add 615299d Reordered the constructors in a more consistent way. The constructor expecting DirectPosition arguments is put first, because Envelope are defined by those direct positions.
add d994923 Constructor expecting a WKT can accept a CharSequence instead than a String.
add fecbf00 Ported the Envelope2D class.
add 72585e9 Documentation formatting (no code change).
add 5a2155f Ported AbstractEnvelopeTest. Some tests are disabled for now because we need a CRS:84 implementation to enable them.
add 14da6a4 Ported some (not all) of GeneralEnvelopeTest. Some tests are disabled for now because we need a CRS:84 instance to run them.
add 6bb6211 Aded serialization tests.
add 70d1358 Merge from JDK7 branch: port of Envelope implementions.
add 59bc6ac Merge from the JDK6 branch.
add 2cbd2bb SVN merge info.
add 9e3767d SVN merge info, with adjustments in import statements.
add 3f5e1f1 Removed the optimized version of ArrayEnvelope.getLowerCorner()/getUpperCorner() because their optimization was in violation with AbstractEnvelope contract. Various javadoc updates as a side effect of code review.
add 3ad9377 Merge from the JDK7 branch.
add 39c8014 Merge from the JDK6 branch.
add a88b72e SVN merge info.
add 03773f4 SVN merge info.
add 1ef5c23 Tests the envelope using validators.
add 156acaf Minor fix in English sentences.
add 4f7761c Formats the points and envelopes as 'float' numbers when the ordinate seems to only have simple precision. This avoid the printing decimal digits having no real signification (e.g. "0.3333333432674408" instead of "0.33333334"). Note that this approach is not strictly correct since parsing such values in double precision will not produce exactly the same result. We should put a warning in the 'toString()' method with a link to a method providing control on this behavior ( [...]
add 7f98e7f Moved 'isSimplePrecision' to a package-private method, because it seeems a to heuristic approach for commiting in public API.
add b2efac5 Added a test suite for the referencing module.
add d851db0 Added a section about Envelope in the developer guide.
add 8f2ffcc Lower/UpperCorner of GeneralEnvelope are now read/write views.
add df0328d Port of Pooled[Un]Marshaller. They will be used by MarshallerPool (to be comitted later).
add 35bec31 Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
add 7200ca1 Added normalize() method to GeneralDirectPosition and GeneralEnvelope.
add 2bf50ee Moved the 'ensureDimensionMatch' methods to the ArgumentChecks class.
add d03b9dd Re-order the parameters order in error messages in order to apply the same convention than JUnit: first programmatic parameters are information about the context where the error occurred, while the values that caused the error are last. The intend is to have more consistency.
add bf8cc61 Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
add d2de3e2 Apply patch for SIS-70: Make QuadTreeNode and associated classes package private. Contributed by Martin Desruisseaux.
add 22d4ac1 Merge from the JDK7 branch.
add 62446f2 Merge from the JDK6 branch.
add 83484eb SVN merge info.
add d247711 SVN merge info.
add 6098117 Bug fix in LineFormatter: last soft-hyphen on a line shall not be removed. As a side effect of this bug fix, re-splitted the test case in various sub-classes. This is a more classical JUnit approach than the previous "parameterized tests" approach. We reverted to this classical approach because experience with this bug has show that the "parameterized test" approach is unconvenient to debug.
add ab042aa Factored out the setLineSeparator / setColumnSeparatorPattern from TreeTableFormat to a new parent class (TabularFormat) in order to allow sharing by StatisticsFormat.
add f83070c Tuned the StatisticsFormat API in order to make it a little bit more customizable. In this case, this is useful to CacheTest.
add 4dc4737 Replace a few call to 'regionMatches' by the simpler 'startsWith' from String API.
add b9d8dd9 Renamed *Formatter as *Appender for emphasing on the relationship with Appendeable (those classes both implement Appendeable and delegate to another Appendable), and for making the names more different than *Format.
add 7fda20b Merge from the JDK7 branch.
add cdf3606 Merge from the JDK6 branch.
add be0f15b SVN merge info.
add b937e2a SVN merge info.
add 18744b7 Merge from the JDK7 branch.
add dbbaee8 Minor fix of import order.
add b39de06 Definitively remove a @link tag which is causing too much trouble on the JDK6 branch (cause JDK6 javadoc to crash).
add 12fcdbf Merge from the JDK7 branch.
add 0c52691 Merge from the JDK6 branch, in order to fix the build failure (javadoc crash).
add 94c534b SVN merge info.
add e3891bc SVN merge info.
add 0a62f4d Ported a few adapters to be used in JAXB (un)marshalling.
add a99eea5 Make all adapters stateless (removed the anchor map which was in CharSequenceAdapter). The anchors are now specified though the ReferenceResolver.
add 58576be Initial port of MarshallerPool. Still needs a bit of work before being usable.
add 4d21b31 Added a newChild() method TreeTable.Node in order to avoid the need to use the implementation-specific constructor. Added a set of static methods in TreeTables and moved there the static toString(TreeTable) method.
add a4cfc95 Added an About class for providing information on the Apache SIS runtime environment. The information provided in this class will be expanded in future version with things like SIS data directory and URL to the EPSG database directory.
add 71f3f00 Report also transitive dependencies from the MANIFEST.MF classpath attribute.
add 091164d Javadoc fix, and make TreeTables.parse more generic.
add bb8eeb7 Ported JarCollector in sis-build-helper, in order to simplify usage of the new About class. On the JDK7 branch this use hard links, so the cost should be low. For the JDK6 branch, the strategy is yet to be determined.
add 90eac23 Minor documentation update.
add cdcbce0 Merge from the JDK7 branch.
add 691baa1 Merge from the JDK6 branch.
add c8f1e31 SVN mege info.
add 4da8425 SVN merge info.
add 384e919 Replaced the ThreadPoolExecutor by a more lightweight approach for the SIS needs (SIS-76).
add 32b7618 Merge from the JDK7 branch, for testing SIS-76. Observed a performance increase of about 20% in CacheTest.stress() test.
add 4fe03a6 Merge from the JDK6 branch.
add bd4fb93 SVN merge info.
add 811f62e SVN merge info.
add 53976d4 Minor typo which cause a build failure on the JDK6 branch.
add 57cbd88 Merge from the JDK6 branch.
add 3ab9cc1 Merge from the JDK6 branch.
add c4711f5 Experimental commit of Android project configuration files, only in sis-utility for now.
add 4db2282 Android experimental branch: declare the version number as 0.3-android-SNAPSHOT and replace OSGi bundles by apklib.
add c2ffc7a SVN merge info.
add 4e692d4 SVN merge info.
add 7c124a2 Centralize the shutdown logic in a new Shutdown class, to be registered to the JVM in a future version.
add 5c498fc Implemented removal of (un)marshaller after a timeout.
add f481291 Ported the XML.(un)marshall methods, after the addition of a hook for recreating the pool if the classpath changes.
add cf402f5 Be notified with the classpath changed in an OSGi context.
add a3cfb3a Javadoc clarification (side-effect of discussions at OGC).
add 5179ac4 Added a namespace which will be needed for temporal duration XML elements.
add 49098c1 Fix for SIS-77: Provide an IDE build for Eclipse.
add 58c6797 Merge from trunk (addition of Eeclipse project files).
add 6cf24af Merge from the JDK6 branch (addition of Eclipse project files).
add 9def9aa Forgot to commit this change in the previous merge.
add 63d71ee Be slightly more conservative about the parameterized type in method argument.
add 99b6df0 Updated the version number of the Apache parent pom.xml.
add 4741fe3 Removed the automatic binding of UUIDs (SIS-73).
add 162548a Renamed Arrays as ArraysExt because the risk of confusion with java.util.Arrays was too high, since those two classes are used often together in practice.
add d8a6511 Complete the renaming of Arrays to ArraysExt.
add bfb445e Renamed Collections to CollectionsExt, for the same reason than the renaming from Arrays to ArraysExt (the two classes are often used together, thus causing a risk of confusion).
add 89b45d8 Merge from the JDK7 branch.
add 13636d9 Merge from the JDK6 branch.
add 7990bbb SVN merge info.
add fc81678 SVN merge info.
add 7e5f03a Avoid null locale, use Locale.ROOT instead (SIS-78).
add bd2b34c Let ResourceBundle creates itself the chain of parents. This allow better choices of formats for numbers and dates.
add 52ada3f Minor javadoc fixes.
add d85a6b8 Initial commit of Range implementation, provided by Joseph White (SIS-66).
add 2da2e82 Modified the license header for compliance with http://www.apache.org/legal/src-headers.html#headers In particular the "Copyright 2012 The Apache Software Foundation" line has been removed, as requested by the above link, since it is already present in the NOTICE file. I presume that this was the contributor intend.
add 4b53178 Parameterized the range type, and added some javadoc.
add add81b7 Implement CheckedContainer and Serializable. Annotate with @Immutable. As a side effect, elementClass is renamed elementType (required by the CheckedContainer interface), which match the fact that the type is not necessarily a class; it can be an interface.
add e2da50d Renamed the Range private fields according the method names, moved the method declarations among the first methods, and added javadoc.
add e25a612 Moved isEmpty() just below the getters for min/max values, because is provides an information derived from those values. Added a check for unbounded values, and added javadoc.
add 8b2ba32 Refactored checkConstructorArgs as below: * Splited in two methods: ensureValidType and ensureCompatibleType. * For the ensureValidType part, replaced the loop over getInterfaces() by a call to Class.isAssignableFrom. * Moved just below the constructor.
add 2140a58 Moved the checkMethodArgs(Range<T>) method to ensureCompatible(Range<?>), using the internationalized resources for error messages if needed.
add 107b13f Simplified the contains(T) method by testing for non-inclusion instead than testing for inclusion.
add 4db1eb7 Relax the type of the contains methods, for allowing widening conversions. Provide an implementation of contains(Range<?>) which take in account the inclusion states of the bounds.
add 8e46374 Reduce the number of comparisons done in the intersect(Range<?>) implementation, and take the inclusive/exclusive states in account.
add a0aac77 Applied to 'union(Range<?>)' the same work (reduce the amount of comparison, take inclusion/exclusion in account) than 'intersect(Range<?>)'.
add e0b9d7c Added 'subtract' implementation.
add 5010b66 More compact equals(Object) and hashCode() using java.util.Objects.
add 4d224b6 Added toString() implementation.
add 5f32075 Added authors in pom.xml and in the Range class.
add 58a175e Added serialization test.
add 285ff3c Added some test cases for Numbers static methods.
add 275c877 Ported NumberRange.
add e7b509b Forgot to replace the license header! (sorry)
add 7a692da Acknowledge the source of the <T extends Number & Comparable<? super T>> signature. Note that there is no other way to express the condition "type T extends both Number and Comparable". So legally, I think that we are okay since anyone wanting to parameterize NumberRange can only obtain that exact signature; there is no flexibility here (except for the 'T' variable name). Even the type order is enforced by the Java language.
add 2501105 Ported MeasurementRange.
add 7e34434 Minor Javadoc updates.
add f0c2953 Ported DateRange.
add 069caa3 Initial port of RangeFormat.
add 6607432 Implement RangeFormat.formatToCharacterIterator(Object).
add 72a290d Removed (for now) the RangeSymbols class because I'm unsure of this API. It may be better to process with an 'applyPattern' method instead. Also modified the 'parse' method implementation to use the code point API.
add 423eadc Merge from the JDK7 branch.
add 7c20054 Merge from the JDK6 branch.
add 9860935 SVN merge info.
add cfd485a SVN merge info.
add 20fd23d Minor javadoc updates.
add 81d859c3 Change of strategy regarding parameterized type in Range and subclasses: Define all Range methods in a stricter way. Then instead than trying to make the methods more lenient in subclasses, provide the lenient methods as separated methods with the "Any" suffix ("contains" vs "containsAny", "intersect" vs "intersectAny", "union" vs "unionAny", etc.)
add 76ec0eb Completed the new approach regarding parameterized type ("foo(…)" and "fooAny(…)" method separation).
add eadf28e Renamed <T> type to <E> for consistency with "element type" name, and for consistency with CheckedContainer parent interface.
add fa824eb Method renaming: * getUnits() --> unit() for consistency with the method name in org.unitsofmeasurement interfaces. * getMinimum() --> getMinDouble() for consistency with getMinValue(). * getMaximum() --> getMaxDouble() for consistency with getMaxValue().
add bf9cf1a Merge from the JDK7 branch.
add d795b95 Merge from the JDK6 branch.
add c80f95b SVN merge info.
add 5e3262c SVN merge info.
add dc52b8f Removal of the DateRange subclass, because it provides few added value compared to Range<Date> and because usage of java.util.Date will probably be abandonned in favor of ISO 19108 (temporal schema) types.
add 587b9da Removed the convenience constructors for inclusive ranges. Instead, for the users to specify explicitly if the bounds are inclusive or exclusive. Those convenience constructors were extensively used in test suites, but a search in existing code base (geotk) shows that they were very rarely used in real applications. Worst, the were dangerous because the convention about whether the upper bound should be inclusive or exclusive is arbitrary; the convention was "inclusive" [...]
add 117de8a Added cross-references in the Javadoc between Numbers and MathFunctions.
add 4460602 Clarification of isSorted(...) behavior.
add 7b56ca9 Explain in the documentation the relationship with the ISO 19123 definition of "ranges". Also make the string representation closer to the ISO 31-11 standard.
add 6abaf75 Added documentation about ranges in the developer guide.
add 168783c Added tests, fixed RangeFormat bug as a result of test additions, and improved documentation.
add a5758bd Initial port of the RangeSet class, excluding remove(E,E) implementation for legal reasons.
add 0fba52c Initial port of RangeSetTest, excluding the testRangeRemoval() method for legal reasons.
add d08d7af API adjustment and added test cases.
add 830c2e7 Use code point values instead of 'char' as a matter of principle, for make easier to use supplementary characters in a future version if we need to.
add 0bbce29 Unconditionally send output to TestCase.out (which is now never null), in order to allow us to print the content in case of test failure. This is sometime very useful information in case of test failures that happen randomly.
add d43c046 Documentation update: replaced "bounds" by "endpoints" for conformance with the vocabulary used on the Wikipedia page.
add 75adee0 Allow to user to specify whether the endpoints in a RangeSet should be inclusive or exclusive.
add 0750e44 More tests.
add 0ae1221 Implemented subset views of RangeSet. This is new code - those views were not implemented on Geotk.
add 525e9c3 Moved non-standard API close to the end of the class. There is no significant code change in this commit.
add 7017fee Change the RangeSet.contains(Object) contract in a way more consistent with remove(Object).
add de33000 Minor implementation strategy change: search for the lower endpoint before the upper endpoint. This is because finding one endpoint reduce the size of the array portion where to search for the other endpoint. In the previous strategy (upper before lower), the reduced portion was at the beginning of the internal array. With the new strategy (lower before upper), the reduced portion is at the end of the internal array. The new strategy is more efficient in the common case [...]
add 8ef10a6 Documentation about the java.util.Date case, with corresponding getMin/MaxLong(int) methods.
add 8824573 Added documentation about random numbers generator in test cases.
add 38b1c51 Merge from the JDK7 branch.
add a841252 Merge from the JDK6 branch.
add 6fca4fe SVN merge info.
add ff4b6f3 SVN merge info.
add f37e6d7 Minor documentation updates.
add ac3441d Initial draft of a NamespacePrefixMapper implementation.
add cd103eb Delete the com.sun.xml classes only after compilation of tests, since they appear to be required by javac even if not directly used.
add 711b934 Upgrade the NetBeans project configuration to NetBeans 7.3.
add ad37478 Provided also a namespace prefix mapper for endorsed JAXB.
add 7ef538f Merge from the JDK7 branch.
add fdfc96b Merge from the JDK6 branch.
add 42b9b34 SVN merge info.
add 42ffbb6 SVN merge info.
add f1e9b2d Minor javadoc fixes.
add cf369d6 Port the 'setKeyCollisionAllowed(boolean)' method.
add 3b86498 Annotation which is going to be needed for the metadata implementation.
add 4d3d659 Initial implementation of a Set specialized for CodeList elements. This will be needed for the metadata implementation.
add f792ea8 Javadoc update.
add 79faf48 Forgot to complete an implementation note...
add 4bd369a Added a test case for CodeListSet.
add 09f5fae Added test for collections of different kind of code lists.
add 3e33249 Support large CodeList (more than 64 elements).
add 8e33550 Convenience constructor for creating a CodeListSet filled with all known elements.
add a422258 Ported enumerations which will be needed by AbstractMetadata, and an package-private class which will be needed by the implementation.
add eecfdd2 Moved ValueRange in public API, in order to allow the addition of convenience NumberRange constructor. This is needed by metadata implementation backed by Java reflection.
add 93c72c8 Added, completed or tested a few more minor utility methods related to ValueRange annotation, needed for the ungoing port of metadata classes.
add cfe1ae6 Fixed a synchronization hole.
add 9e99dc5 First draft of metadata PropertyDescriptor.
add 0932b36 Added test directory and first test case for metadata. Implies little Maven and IDE configuration.
add 5b83b72 Added MetadataTestSuite.
add 17cda6e Remove Locale argument in Types.foo(..., Locale) and replace the return type from String to InternationalString. This is both more coherent with the library and more convenient for PropertyDescriptor.getRemarks().
add 147fabe Initial port of PropertyAccessor.
add af97595 Ported a little bit more of metadata internal mechanics.
add 12672d8 Fixed a package name.
add 45ddd36 Partial port of the MetadataStandard class.
add bbd4566 - Try to explain more in the javadoc what we are doing. - Replace HashMap<Class,...> by IdentityHashMap and explain why in javadoc. - Removed MetadataStandard.isModifiable(...) method (part of effort to simplify the code).
add 821a224 Minor clarifications in javadoc and method names.
add e6ea171 Test the minimal value instead of the mean, since the later is not reliable in every cases.
add 10f0a09 Slight simplification of 'equals' and 'shallowCopy', fixing the boolean parameter to the value commonly used.
add 0145ba1 Let Cloner.clone(...) propagate CloneNotSupportedException.
add ebd3147 Completed the port of a few methods.
add c9f251c Renamed "attribute" as "property": - For consistency with JavaBeans properties - Because in metadata, those "attributes" were XML elements, not XML attributes.
add 50a684a Renamed "NullValuePolicy" as "ValueExistencePolicy", which matches better the enumeration purpose.
add cdacae2 Merge from the JDK7 branch.
add e730a1b Merge from the JDK6 branch.
add 68751b3 SVN merge info.
add cb051fd SVN merge info.
add d75dfa0 Ported the metadata view as a java.util.Map, together with isEmpty() and prune() methods.
add 9b658a3 Minor adjustments for futur code to be commited.
add 3eab62c PropertyAccessor tests. Some parts are disabled for now, pending completion of other parts.
add f506940 Added a testDescriptor() case in PropertyAccessorTest.
add 1e5db68 Minor cleaning (mostly about warnings).
add 9e1c1df Modules in dependency order.
add a12ba18 Beginning the port of the ObjectConverter implementations as an internal package. We need those ObjectConverters for the metadata PropertyAccessor working. Right now, some metadata tests are disabled waiting for those converters.
add dd33a13 Minor change of policy: do not automatically remove whitespaces in Numbers static method; leave the responsibility to the caller. For such low-level function, it may be preferable to avoid taking too much initiative.
add d11979e Moved SurjectiveConverter to org.apache.sis.internal.converter package.
add 6666347 Initial port of converters from String to various basic objects.
add 500de2a Added converter to java.nio.file.Path (JDK7 only).
add 85444c1 Added FallbackConverterTest. This test needed the StringConverter provided in the previous commit.
add fef9752 Trivial documentation fix (but needed for search operations in the code base).
add ca8688e Added CharSequenceConverter (internal), to be needed for the support of InternationalString.
add 9beb856 Formatting change: when drawing a tree, put the vertical line after two spaces instead than on the left border. People specialized in human design of interfaces seem to prefer this layout. We are better to change the layout before more tests depend on it.
add 1054081 Ported the FallbackConverter.toString() method, which is helpful for debugging.
add eb853f1 Added remaining converters. We still need to tune them, especially regarding the value returned by properties() and inverse().
add 42e2a5c Added a link to the wiki.
add bebc360 Fixed the license header (forgot to change that one during the port).
add a019d5a Ported some JUnit tests.
add d73a105 Reorganized some converters in a more systematic way, and added test cases. In the next commit, we will try to reduce the size of this stuff by replacing many constants by Map<Class,?>.
add 141b517 Reduces the size of NumberConverter, since this is not Apache SIS job to provide a framework for converters (there is other Apache projects for that). Begin the port of ServiceRegistry, to be completed later.
add 668fefb Simplify the API by removing rarely used (long) and (double) method variants. This also allow the (Number) variant to do a more precise analysis based on the value type.
add fa908d0 NumberConverter needs to check if the conversion is allowed.
add f219d9b API simplification in Classes: - Removed asSubclassOrNull(...), which is not used widely enough. - Replaced Collection arguments by Iterable. - Changed return type of getAllInterfaces(Class) from Set<Class<?>> to Class<? super T>[] - for consistency with other API (getLeafInterfaces(...), Class.getInterfaces()) - because Java arrays are covariant, while collections are not. See comment in source code. - Renamed isAssignableTo(...) as isAssignableToAny(...) for better [...]
add 851f9e7 Final version of FallbackConverter. The class size is a little bit smaller but not that much. However the internal working and the test case are a little bit more systematic.
add 632d92d Minor adjustment: same algorithm written in a slightly better way.
add b96d7dc Completed the port of ConverterRegistry, excepts toString() and tests.
add 210510b Almost done with the internal.converter package: - Implemented ConverterRegistry.toString() - More internal classes extends SystemConverter (when we will be done, all internal classes should extend it). - Ported HeuristicRegistry, which encapsulate the knownledge about special cases: CodeLists, InternationalString, Numbers.
add aafa8c9 Reverse the order of classes show in the toString() representation: (target, source) instead than (source, target). This produce much more natural tree representation, with class hierarchy as we are used to see.
add 9ab2a18 Added tests for ConverterRegistry.
add 3d4518b Consolidation: remove static constants or make them private.
add f542ae2 Trivial reformating (no code change): removed the comments in the private inner classes. They were repeated everywhere with few information. Removing them make easier to see the code at a glance.
add 9704f59 Added a few missing test cases.
add ba5eb18 Connected DateConverter, and added more tests.
add 92cd6a8 Consolidation of File, URL and URI converters in a single PathConverter class.
add dfbd9f4 Connected the PathConverters.
add bc85277 Replaced the hard-coded 'getInstance(...)' methods by a registration mechanism based on META-INF/services/. This will be needed anyway for allowing other modules like sis-metadata to define their own converters.
add 658f309 Added or connected the last converters. The package is not complete (for now).
add 5b00bce Enable the metadata test cases which were needing the converters framework.
add a1da1fd Merge from the JDK7 branch.
add f46abe0 Merge from the JDK6 branch.
add 7bda643 SVN merge info.
add 0c23d23 SVN merge info.
add 33dcc5d Fixed a build failure on Windows platform.
add e8f7cc7 Merged the Windows-specific test failure from the JDK7 branch.
add 3524ed8 Merged the Windows-specific test failure from the JDK6 branch.
add 1d42496 - fix for SIS-95 Explicitly specify Typed extends Object parameters in FallbackConverterTest
add 49a20d9 SVN merge info.
add c2a5841 SVN merge info.
add 38bd34f Minor bug and javadoc fixes.
add ac1ba9f Licensing: for every classes which got a commit from an external contributor, regenerate the classes using the NetBeans IDE. The procedure was to put an empty class implementing the GeoAPI interface, click on the "implement all abstract methods" contextual menu in NetBeans, remove the <? extends> part in parameterized types, add the synchronized keyword (for now) and finally add the corresponding private fields.
add 386e897 Added JAXB-related classes which are going to be needed by metadata.
add ac16a71 Added an interface which is going to be needed by metadata.
add 598b4bc Resource to be needed by metadata.
add 5218bf0 JAXB adapters for metadata. This commit temporarily breaks the build, since JAXB adapters need metadata implementations, which are not yet committed.
add ef1510d Ported the metadata constraint package.
add 33d66fa Added the metadata content package.
add 4397e7e Added the metadata distribution package.
add 004507d Initial port of the metadata extent package. Will needs more work.
add 0ea709b Removed the "This package contains documentation from OGC specifications" notice from header, and put it in the NOTICE file instead.
add 12015e8 Added the identification package.
add d23a875 Added the metadata lineage package.
add 0216be3 Added metadata maintenance package.
add d9d8a35 Added the metadata quality package.
add 723c96b Added the metadata spatial package.
add 120cbfe Added the metadata acquisition package.
add 94ebea7 Completed the citation package.
add 15ac48d Completed the root metadata package.
add 1e950e1 Replaced call to super(metadata) by shallowCopy(metadata) for now, since copy contructors are not yet implemented. With this commit, the JDK7 branch is back to a compilable state but the tests do not yet pass.
add 5419fab Missing 'synchronized' keywords were causing test failures. With this commit, the JDK7 branch is back to a buildable state.
add bd29148 Added a few documentation for metadata.
add e56ec0a Removed the abstract getElement() method from PropertyType, since it was not needed and caused an unnnecessary increase of .class files size because of bridge methods.
add 4a753f2 Additional documentation.
add 000ebc4 Replaced class hierarchy by aggregation hierarchy, which is more informative in the case of metadata.
add fd34a6f Added aggregation hierarchy for citation package.
add 7721b10 Prepare for the addition of copy constructors: - Renamed existing copyCollection methods as writeCollection - Added copyCollection methods for copy constructors only. - Added a copy constructor in ISOMetadata.
add be86aa3 PropertyAccessor shall uses the ordering defined by XmlType.propOrder annotation.
add 0817829 Added copy constructor in every metadata class. The cost in JAR file size is approximatively 7 kb. We paid that cost because invoking virtual methods using Java reflection at object construction time is unsafe. Furthermore the copy constructor may be invoked more often than other operation, because JAXB wants an annotated implementation class at marshalling time.
add 922684a Convenience internal methods for storing dates in metadata objects.
add cdf67ef More compact storage of boolean values in metadata objects.
add ebf1bc9 Starting the enforcement of some ISO 19115 conditions, especially mutually exclusive properties.
add f84e920 Partial revert of the previous commit based on a wrong interpretation of ISO 19115: Exclusive properties apply only to unions, not to other conditional properties. For other conditional properties, the condition rather said when the property is mandatory.
add d7fbe98 Javadoc: complete the package description with summary of the class hierarchy.
add 4079a7b Fixed erroneous package name for CodeList in @link. Added class hierarchy documentation for citation package.
add fd4a9ce More class/aggregation hierarchy javadoc.
add 68401d1 Javadoc reformating: write the hierarchical and aggretation trees manually.
add 22f0054 More package documentation.
add ac6b30c Javadoc: use uniform column width.
add f82c248 Minor javadoc reformatting: table alignment for easier reading in Java source file.
add 43bac86 Completed hierarchy documentation.
add cb47297 Moved back MetadataObjects to Extents.
add aac7603 Merge from the JDK7 branch.
add 3098ff7 Merge from the JDK6 branch.
add 99ae574 Added missing "extends" clause in internal interfaces.
add 49c8712 SVN merge info.
add 3ee2cc7 SVN merge info.
add 912b9d4 Merge the SIS-95 fix from trunk.
add a0f2766 Post branch merge.
add 479a12f Fixed erroneous javadoc: copy constructors do not accept null argument.
add 934f0f3 Javadoc updates.
add 98e2e26 Documentation clarification: gco:id and gco:uuid XML attributes are declared unqualified.
add 5e54ac5 Added missing members in the team-list page (missing names identified by Suresh Marru).
add a1e3327 Added a contributor.
add 142ddfd Minor javadoc corrections.
add b1f4c44 Recomputed serialVersionUID since the old values where inherited from Geotk, which were different classes.
add c989182 Require explicit declaration of GeoAPI types to be marshalled in XML.
add f72489e Renamed AbstractEnvelope.isNull() as isAllNaN() for clarity.
add 4d42afa Merge from the JDK7 branch.
add d885249 Merge from the JDK6 branch.
add b668a6b SVN merge info.
add abeed01 SVN merge info.
add 9c4880d Moved CheckedHashSet, CheckedHashMap and CheckedArrayList out of public API, because those classes have relatively low values and may have incompatible changes depending on whether we want to synchronize metadata objects or not.
add 73a9944 Move back the CRS as the first parameter for consistency with current practice.
add e9495e7 Merge from the JDK7 branch.
add aa980d1 Merge from the JDK6 branch.
add 9ec6c9f SVN merge info.
add 5239692 SVN merge info.
add 07e2f31 Temporarily disable a feature not yet supported.
add 3f6f34e Moved DefaultReferenceIdentifier from org.apache.sis.referencing to org.apache.sis.metadata.iso. We have to make this move because OSGi will not allow different modules to use the same package. Renamed to UnmodifiableIdentifier in this process in order to better differentiate this class from the other "Default*" class in the metadata packages.
add d535eac Remove the package-private constructor. We will not be able to use it since the class is now in a different package. The referencing module will need to exclude the name and remarks value itself.
add 759e48b Slight change in the way to search for localized remarks.
add 2f758cf Added a small set of Citation constants. This set will need to be completed later. Note that Geotk defined all constants programmatically. For SIS, we may try to use an embedded database instead.
add d0a9b83 Tuned the handling of identifiers collection in metadata objects.
add c23a3d1 Merge from the JDK7 branch.
add 29a0322 SVN merge info.
add f489c52 Updated CHANGES for SIS-31.
add 26d3e53 Merge from trunk.
add e28a4a2 Merge from the JDK6 branch.
add 3ae026f SVN merge info.
add 49816b2 Indirect merge from trunk (through the JDK6 branch).
add a60e3fc Moved UnmodifiableArrayList out of public because this class contains a significant hole in type safety. The getElementType() method return the value of Class.getComponentType(). But because Java arrays are covariant (at the contrary of collection), the returned value may be Class<? extends E> while the method return type is declared as Class<E>. This is safe only if the caller know that he invoked UnmodifiableArrayList.wrap(E[]) with an array whose component type is exa [...]
add 6b482ef Renamed the public CollectionsExt class to Containers. The intend is to suggest more strongly the relationship with the CheckedContainer interface (this is possible since we moved the "bad" methods out of public API in the previous commit), and make room for future addition of methods working on other kind of objects. Iterable may be first on the list, but other CheckedContainer implementations too. As a side effect, this allow us to get ride of the ugly "Ext" suffix.
add 356a333 Renamed MarshallerPool.release(...) as recycle(...) since its purpose is not to release resources. The old name was misleading since developers put the 'recycle' method in a try ... finally block, while we should not.
add a4afb09 Range implements Formattable.
add 03854c8 Renamed (again!) UnmodifiableIdentifier as ImmutableIdentifier, which reflect better the intend and is consistent with ImmutableEnvelope. Added javadoc explaining the limits of the immutability contract.
add b3120c0 immutableSet as an internal method (research in Geotk code base suggests that it will be used again later).
add 57fff3c Merge from the JDK7 branch.
add bfa85a8 Merge from the JDK6 branch.
add a03ba9a SVN merge info.
add 0ebad9b SVN merge info.
add ce5563c Excludes the authors from generated javadoc, for being more inline with Apache spirit.
add 1bd21f0 Partial port of the Envelopes static utilities.
add a88fc25 Prepare for the support of sub-envelopes.
add dbe4217 Implemented GeneralEnvelope.subEnvelope(int, int).
add 72e10ff WGS84 CRS was set on the wrong envelope.
add ddeb3cd Added a servlet listener in order to shutdown SIS when the web application is undeployed.
add 9a4852c Merge from the JDK7 branch.
add 81c1ebf Merge from the JDK6 branch.
add 8508a1e SVN merge info.
add aea81b7 SVN merge info.
add ca3baeb Javadoc fixes.
add 53251d9 Ported a few tests.
add 0e26152 Metadata hash code shall be different for different interfaces.
add 9f3aace In the Statistics class:
add f52d569 Merge from the JDK6 branch.
add d0fa8ca Merge from the JDK6 branch.
add d1ac048 SVN merge info.
add 0cbdafc SVN merge info.
add d14b1bb Refactored PropertyDescriptor as an implementation of ExtendedElementInformation instead of PropertyDescriptor (SIS-80).
add f615b7e Implemented PropertyInformation.getDomainValue().
add 32e1fcd Minor javadoc fixes.
add e09d140 Added package info.
add bd1d204 Added the public MetadataStandard.asInformationMap method.
add 77565fc Renamed PropertyMap to ValueMap and MetadataStandard.asMap(...) to asValueMap(...) for emphasis what the map is about. This needs emerged from the increase in number of type of maps (value, class, information).
add 530f90c Renamed MetadataMap as PropertyMap.
add 1541a68 Added MetadataStandard.asNameMap and asTypeMap methods.
add 9a76a55 Wrong XML prefix for ServiceIdentification metadata (bug identified by Frédéric Houbie).
add f6bd455 Merge from the JDK7 branch.
add 3e47551 Merge from the JDK6 branch.
add 1371377 SVN merge info.
add a4a8a0c SVN merge info.
add e03107a Minor adjustments: hashMapCapacity(int) not needed for IdentityHashMap, test suite shall validate test cases (order, parent) before execution.
add efb6130 Added more metadata tests, and fixed the checks for utility test list.
add c19b1a8 More metadata tests.
add 4e65fc7 Merge from the JDK7 branch.
add b30df8a Merge from the JDK6 branch.
add 6fbe04a SVN merge info.
add b8e1449 SVN merge info.
add 229d7d7 Slightly more efficient previous value returned by ValueMap.put(...) in the common case where it is a List.
add ebb0fa5 Added tests for AbstractMetadata.isEmpty() and prune() methods.
add 6889b1d Added more tests.
add 20fb0ad Merge from the JDK7 branch.
add 1ad0ca3 Merge from the JDK6 branch.
add 75e3397 SVN merge info.
add 54c05ef SVN merge info.
add da60e55 Removed per-instance synchronization on metadata classes (SIS-85). We keep synchronization only on the classes that are shared by many metadata instances (MetadataStandard, PropertyAccessor).
add a1a2f65 Removed synchronization in CheckedArrayList and CheckedHashSet, following removal of synchronization in metadata class (SIS-85). Those checked collections were used only by metadata; their synchronization behavior shall be consistent with the metadata one.
add 9cb6211 Edit javadoc after removal of synchronization.
add ef42c5d Merged the metadata synchronization removal (SIS-85) from the JDK7 branch.
add 6f2b591 Merged the metadata synchronization removal (SIS-85) from the JDK6 branch.
add 0edd3d9 SVN merge info.
add ab456a8 SVN merge info.
add 84e489a Ported more tests.
add 53efa03 Resolved the exception that prevented us to declare quality.AbstractElement.dates as a writable element.
add 4b43ef4 Minor adjustment in AbstractElement.Dates, and javadoc links.
add 7a27b6e Remove the check for write permission in CheckedArrayList and CheckedHashSet. It was not needed because ModifiableMetadata creates unmodifiable copies of those collections when 'freeze()' is invoked anyway.
add e77079f Corrections from FindBugs report.
add b77a5ad Various minor updates in preparation for the addition of MetadataTreeTable.
add 8f435d7 Minor adjustment for the upcomming MetadataTreeTable.
add ead4cff Fixed broken URL.
add 6ec90c4 Added 'toString()' implementation for debugging purpose.
add fd32eb7 First draft of MetadataTreeTable (not yet finished).
add 991c9a3 Minor change in toString() formatting, javadoc et exception handling.
add 7c49359 Minor documentation updates and one static method renaming.
add 3df9dba Relaxed the return type of TreeTable.Node.getChildren() from List to Collection. The reason is that most usage (except widgets) doesn't need a List, and the List contract is difficult to meet in the metadata tree table views.
add 129cc92 Simplify MetadataTreeChildren as a Collection implementation instead of List.
add 99059d7 Added tests for the remove operation.
add b8922cf Override the default 'clear()' method with a more efficient implementation (easy).
add c1e722b Enable AbstractMetadata.toString(). Not yet fully completed.
add 6811c24 Improved tree table formatting and added more tests.
add f815ba0 Merge from the JDK7 branch. Include a preliminary version of metadata tree table, which implies a first working version of AbstractMetadata.toString().
add a3a9977 Merge from the JDK6 branch. Includes a preliminary version of metadata tree table, which implies a first working version of AbstractMetadata.toString().
add f0054f3 SVN merge info.
add 4009f3e SVN merge info.
add a4048b9 Renamed 'shallowCopy' as 'append', with slight semantic change, prior removal. We will remove that 'append' method in the next commit because it is replaced by the copy constructors, and appending (or merging) metadata may be tricky since there is various way to merge bounding box, child metadata objects, etc. We do this commit prior removal in order to have a starting point in the history if we decide in a future version that we need append functionality.
add f1e2b89 Removed (for now) the AbstractMetadata.append(Object) method.
add 2c9b8a8 Implemented MetadataTreeChildren.add(TreeTable.Node).
add d02edcb Test iteration over all possible children, including properties without value.
add 8696ea7 MetadataTreeChildren.add(...) shall only add, not overwrite previous values.
add f3b4992 Implemented MetadataTreeNode.newChild().
add 5f49580 Added more tests.
add 46c5352 Merge from the JDK7 branch.
add 141f247 Merge from the JDK6 branch.
add e24bc4c SVN merge info.
add c3a64f5 SVN merge info.
add a1840c1 Renamed the tree-table package-private classes: - Remove the "Metadata" prefix, which is redundant with the package name. - The "TreeChildren" name was problematic since they are node children, not children of the whole tree. - Emphase that the TreeTable is a view.
add 1a9e0b2 Added Javadoc about the TreeTable.
add 05a6d68 More conservative serialization strategy.
add 6b25691 Added the index column.
add 0336ca3 Removed 'asMap' and 'identifierMap' cached values, since their use are not very frequent.
add a75f332 Avoid invoking the getter method by reflection twice, on the assumption that values are asked soon after iterator traversal. This caching may be removed in a future version if it appears to be problematic - experience will tells.
add d40af61 Minor documentation update and one minor test.
add 096c984 Merge from the JDK7 branch.
add d0cb1a1 Merge from the JDK6 branch.
add e1f4db3 SVN merge info.
add 2c02752 SVN merge info.
add 28cb6a5 Minor javadoc fixes.
add 926fdd6 Renamed the internal "MarshalContext" class as "Context", for differentiating from the public "MarshalContext" class and for anticipating usage in slightly wider cases than just (un)marshalling.
add 5916b4c Added warning messages when a property is discarded, and test cases.
add 12ee28e Initial commit of "storage/sis-netcdf" module, with only the attribute declarations for now.
add 585c55b Simplified a little bit the API of Logging utility methods, use a single logger for all org.apache.sis.metadata.iso.* packages, share the same TestWatcher class in test cases instead than repeating @Before and @After methods.
add deffb7a More simplification of the Logging class: only one global LoggerFactory instead than per-package instance. It seems quite unlikely that someone would want to use different logging framework (Log4J, common-loggings, etc.) for different packages. The old approach was actually a legacy of the time where we tried to configure the JDK LogManager instead than using a LoggerFactoy (attempts to configure java.util.logging.LogManager have been quite difficult).
add c8ef03d Merge from the JDK7 branch.
add 72ab548 Merge from the JDK6 branch.
add c240df6 Merge from the trunk branch. Cause this experimental branch to not build anymore, but we will try to solve this issue later. We need to perform this merge anyway before to re-organize the directory structure as suggested on the dev. mailing list.
add 862876a Moved top-level modules in two groups: * core for sis-build-helper, sis-utility, sis-metadata, sis-referencing. * application for sis-app, sis-webapp.
add e95138a Updated IDE configuration for the new directory locations.
add bd199ac Merge from the JDK7 branch.
add 823cc85 Merge from the JDK6 branch.
add 35565d6 Merge from trunk.
add c3f1f94 Fixed URL in symbolic links and in CSS files.
add f4d6de2 Renamed "sis-parent" as "parent" for consistency with the naming of all other group of modules.
add fad8022 Avoid the "Test" suffix on an annotation which is not a test.
add 6f16c08 Merge from the JDK7 branch.
add 2e34f84 Merge from the JDK6 branch.
add 2ff7cf6 Merge from trunk.
add e920f49 SVN merge info.
add 08e0a83 SVN merge info.
add e854221 SVN merge info.
add c8c737f Avoir a NullPointerException.
add f578a63 Merge from the Android branch.
add c942a0b Merge from trunk.
add d7e44c8 Merge from the JDK6 branch.
add 3a95228 Removed uncecessary <properties/> declarations.
add 94af871 Renamed NetcdfMetadata as AttributeNames.
add 6540b13 Partial port of NetCDF metadata transcoder (not yet finished).
add ba2fb5e Added DefaultTemporalExtent.setBounds(Date, Date) convenience method.
add 49f07e2 Leverage DefaultTemporalExtent.setBounds(Data, Date) in NetCDF metadata reader, and remove the last direct dependency to UCAR library (so we can keep it optional).
add 77f5ed3 Ported more NetCDF-ISO mapping code.
add 08098df Skeleton of test suite for NetCDF (mostly declaration of dependencies).
add c6043cd Refactored the internal API: moved abstract classes to "...internal.netcdf" package, and the UCAR-based implementations to the "...internal.netcdf.ucar" package.
add 762399a Better separation of concerns: moved some code out of "internal.ucar" in order to leave only UCAR-specific code (as much as possible) in "internal.ucar".
add 3723436 Minor documentation precision.
add d45241b Allow subclassing.
add 4bfd927 Moved references at the end of the class javadoc.
add 5c54bc0 Added symbolic links to site.css files.
add ab10e8d Fixed documentation errors.
add 20e54a7 Forgot this site.css file.
add 80ad65c Added 'index.apt' pages for all modules.
add 3722412 Try a tuning of site descriptors.
add 0b63ebb Avoid "georss" dependency in sis-referencing. This implies moving GeoRSSData and QuadTreeReader (which depends on GeoRSSData) to an other module, for now sis-webapp.
add e4403ad Documentation updates, especially about definition of terms.
add d0d17e4 DefaultKeywords constructor shall accept an arbitrary amount of keywords.
add a2ece9c More generic creation of the list of Axes.
add 3f2d110 Added a few more tests.
add 6a6b782 Added a DataStoreException in the NetCDF module for now, eventually to be moved in a more general storage module later if peoples agree.
add 27e19a7 Minor javadoc formatting, and added resources to be needed later.
add 26a1143 First draft of a standalone NetCDF reader.
add 2df722e Minor re-organisation of ChannelDecoder internal methods.
add c77b1a0 Number of dimensions, variables and attributes are defined by a signed integer according NetCDF specification This is a minor adjustment in the error messages.
add 4f328e2 Renamed ObjectConverter.convert(Object) method to apply(Object) for integration with the upcomming java.util.function.Function interface in JDK8.
add 5ab4af1 One more placeholder for an upcomming JDK8 interface.
add 581b563 Case-insensitive search of attribute names.
add 04fc29d Missing interface implemented by the Statistics class.
add 1deb119 Added support for date/time units in ChannelDecoder.
add 0a36b30 Minor adjustments.
add 594b2a1 Moved the temporary method (while waiting for JDK8) in its own "JDK8" internal class.
add 48705a4 Starting test cases for NetCDF variables.
add 6930b57 Arrays are sufficient for this internal API.
add 8fdd918b Finished the implementation of 'VariableInfo' internal class.
add 828ab3c Merge from the JDK7 branch.
add dc0cd14 Merge from the JDK6 branch.
add 8e36839 Added placeholder for a GeoAPI 3.1 interface.
add a585cd5 SVN merge info.
add a1f6bb6 SVN merge info.
add 065c42c Test Variable.isCoordinateSystemAxis().
add 25e7efe Test Variable.getGridDimensionNames() and getGridEnvelope().
add a6c300d Tests Variable.getAttributes(String, boolean).
add 26c05f9 Added GridGeometryTest.
add 2498197 Added a GridGeometry implementation for the standalone NetCDF decoder.
add 97a7baa Moved some NIO services out of ChannelDecoder, in a new DataInputChannel (by analogy with DataInputStream). The intend is to make easier to reuse those services in VariableInfo for reading the actual variable data.
add 977b2c1 Minor renaming of a method name (given in parameter) for consistency with other method invocations.
add 81bf38a Renamed 'DataInputChannel' as 'ChannelDataInput', because the previous name was suggesting that the class was a Channel implementation (which is not. It is not really a DataInput implementation neither, but still closer).
add 58f2c01 Added more tests.
add f3e2de0 Added ChannelImageInputStream in the test directory as a proof of concept, not to be used (at least for now) in the main SIS code. The main purpose of ChannelImageInputStream is to ensure that ChannelDataInput API is keep compatible with ImageInputStream API.
add 553ff19 Provide convenience methods for reading data in newly allocated arrays, since those cases are expected to happen more than once.
add 64ed412 Merge from the JDK7 branch.
add c74db37 Merge from the JDK6 branch.
add def6483 SVN merge info.
add 5e4a18d SVN merge info and post-merge adjustments.
add 52f7690 Added tests for MetadataReader.
add a89d3f8 Allows InterruptedException to stop the reading process.
add 76347ce Extracted the classes common to all storage modules out of sis-netcdf, and provide them in a new sis-storage module. It would have been possible to wait to have a second storage module before to make this move, however it seems easier to perform the split soon rather than to wait, in order to allow us to setup the dependencies in their final form now.
add 6324f05 Moved ChannelImageInputStream in main code and added test case. This is a little bit cleaner than the strange beast living in the test directory that we had, and will be needed anyway when we will use some part of the javax.imageio package.
add cad514b Updated project description as proposed by email.
add 2c00028 Merge from the JDK7 branch.
add e148569 Merge from the JDK6 branch.
add 51cf92c SVN merge info.
add 721874e SVN merge info.
add 7099843 First draft of a DataStore interface, very minimalist for now.
add 6438733 Replaced URL from "http://incubator.apache.org/sis" to "http://sis.apache.org".
add 01fb7c6 First attempt to put a logo.
add f5d0915 Merge from trunk, and fixed URL to the site.
add eb8fb28 Updated site descriptor XSD.
add 35ff697 Complete site descriptors for storage modules.
add bfbc46f Minor documentation updates.
add 32acd83 Discard obolete marks.
add 0204b29 Uses only StrictMath in tests, as a matter of principle.
add eae9753 Missing strictfp in test.
add 21e2b8e Ported IOUtilities internal methods.
add fbc2abb Provides a WarningListener interface.
add e2fe07e Take locale in account.
add e335376 Added some tests.
add 0972687 First draft of DataStoreConnection.
add 8067754 More documentation, and anticipate the JDBC case.
add c90e238 One more refactoring: uses a more dynamic approach for producing views of different kinds.
add 8571127 Added support for options (mostly URL encoding for now).
add ae96dd9 Move helper methods as member of OptionKey rather than static methods in Options. The initial intend was to hide those helper methods from public API. However they are harmless, so we may have more to win by keeping the code a little bit simpler instead.
add c9e222c Some test cases for DataStoreConnection.
add 7507c48 More systematic creation of ByteBuffer, and leave the "rewind" operation to callers.
add 09d431d More tests.
add 49db17c First attempt to provide a base class for DataStore implementation. There is some redundancies between this class and WarningConsumer for now. We will try to resolve those redundancies later.
add 8d78abf ChannelDecoder constructor now expect an explicit ChannelDataInput, and implementation delegates the String decoding to ChannelDataInput.
add afb76c1 Added support for String (path) and ImageInputStream types for convenience, and added more tests.
add e696d76 First draft of NetcdfStoreProvider. Not yet completed: missing public API and test cases.
add f84a17a First draft of a DataStoreProvider abstract class, and some tests with NetcdfStoreProvider.
add 3b61f8c Initial commit of NetcdfStore public API.
add 4f69654 Replaced the WarningProducer/WarningConsummer pair by a more classical and straightforward WarningListeners list.
add 5d14565 Infers the LogRecord class and method names from the stack trace.
add 340d3e0 Merge from the JDK7 branch.
add 04ec201 Merge from the JDK6 branch.
add b289fd5 Post-merge minor cleanup.
add d317808 Reverted accidental commit of "sis-jdk7" url. Shall be "sis-trunk" for this branch.
add e8a6e28 SVN merge info.
add aff838b SVN merge info.
add 7957908 SVN merge info.
add 9ea1ce4 Moved QuadTree and related classes in its own package, namely org.apache.sis.index.tree. Also moved from "sis-referencing" to "sis-storage" module. The only changes in this commit are import statements, dependencies in pom.xml files, and removal of trailing whitespaces. There is no other code change in this commit.
add 5026f2b Completed the move of QuadTree classes by moving GeoRSSData too (SIS-101).
add 336f946 Merged SIS-101 from the JDK7 branch.
add 07231d1 Merged SIS-101 from the JDK6 branch.
add ef8f88a SVN merge info.
add 0dfb8ea SVN merge info.
add 8b7e4f3 Documentation improvement (no code change).
add 58fa3d5 Documentation update: moved some content from index.apt to package-info.
add 8610333 Metadata.toString() is now localized, as decided by email two months ago.
add 159907c Replaced the "DataStore interface + AbstractDataStore" pair by a single abstract DataStore class, as suggested by email.
add 69f49df Renamed DataStoreConnection as StorageConnector, as suggested on the mailing list.
add 1c042c0 Moved org.apache.sis.util.GeoHashUtils to org.apache.sis.index.GeoHashCoder as suggested on the mailing list.
add 93e6ecb Forgot that file in a previous commit...
add 61b7f9e Make the GeoHashCoe methods non-static for allowing configuration in a future version. Replaced the HashMap by a more compact and presumed efficient array of bytes. Upgrated the test case from JUnit 3 to JUnit 4 and integrate with other SIS tests.
add 5acca80 Merge from the JDK7 branch.
add a457953 Merge from the JDK6 branch.
add 109306a SVN merge info.
add 7bb4281 SVN merge info.
add e834c0c Enable the @example javadoc tag.
add 537c168 Minor javadoc formatting.
add 3d38c1e Added a Format enum (containing only BASE32 for now, but BASE36 could be added later), accessors for the format, accessor for the precision, and throws a ParseException in case of decoding error.
add 6363082 Avoid usage of arrays in implementation since they were not strictly needed, and update the API to use DirectPosition.
add e3b1f56 Rename SISCLI as console.Command in preparation for the implementation of a command-line tool. We use the "console" package name in anticipation for a possible future interactive tool using java.io.Console.
add f977777 Fix for SIS-103: Fix Eclipse errors in SIS contributed by Travis Pinney.
add ec41acb Re-enabled plugin executions.
add ae9d0c5 Abandon usage of ${maven.version} property, since it seems to be a cause of various issues. Instead, fix the version to the latest stable Maven version available at this time. We will need to remember to upgrade this version number from time to time.
add 70762cf Merge from trunk.
add fd09a92 Merge from the JDK6 branch.
add f3dd847 Merge from the JDK7 branch.
add 5973c27 Merge from the JDK6 branch.
add cf224d4 SVN merge info.
add 0019a98 SVN merge info.
add 244a966 Minor javadoc fix.
add 2fd5e42 Minor javadoc fix.
add 3d4a459 First draft of the command line interface as a port of the About main class.
add 958b7ba Added missing dependency declaration.
add 2443379 Minor javadoc fix.
add ed82d70 Fix the directory where JAR files are collected.
add f6a7e4d Complete the description and developers section of pom.xml, and collects the JAR files.
add 5766a50 Creates a list of dependencies on platforms that do not support hard links.
add 6f80f62 Ported the Pack200 creator from Geotk.
add 601077e Add support for dependencies list on platforms that do not support hard links.
add 20c8693 Documment the new Mojo.
add 541f88d Renamed "dependencies.txt" as "content.txt" and "sis-bundle.pack.gz" as "sis.pack.gz".
add f21b792 Add application test and resource directories in the build configuration.
add 436b288 First draft of a "help" command.
add 642bcc6 Merge from the JDK7 branch.
add 38dc5fb Merge from the JDK6 branch.
add 0a95b58 Fixed version number.
add 2220aaf SVN merge info.
add b311a46 SVN merge info.
add af3725f Added link to the Git clone (INFRA-5915).
add 3f0aa01 Separate version number from branch name for easier merges.
add 3fa8089 Allows the command name to appear after options, and minor tuning of the "help" command.
add a547238 Renamed sis-app module as sis-console as suggested on the mailing list (SIS-105).
add e9ef7d7 Merge the "sis-app" module renaming from the JDK7 branch.
add e755bae Replaced the Apache SIS logo on the build page, and updated sis-console description.
add f4315ab Merge the logo update from the JDK7 branch.
add af19321 Merge from the JDK6 branch.
add f4a17aa More help information.
add 918dfd7 Tuned the help screen.
add 22e9b86 Initial draft of a metadata sub-command.
add 3d7e30c Oups! Missing file in the previous commit.
add f888f6c Complete the "metadata" command and add a test case.
add 82887be Use ISO-LATIN-1 encoding (as specifie by java.util.Properties contract) for more compact files.
add 4e93c24 Initial port of MonolineFormatter from Geotk, to be used in the console application.
add 49ba50f Documentation fix.
add d674fc3 Merge from the JDK7 branch.
add ad5a15a Merge from the JDK6 branch.
add 0e2f231 SVN merge info.
add 9abc533 SVN merge info together with post-merge adjustments.
add ff5278c More consistent contract for the 'About.configuration(...)' methods.
add b779b4c Replaced usage of the deprecated "bgbackground" HTML attribute by the "style" one.
add f80aada Some cleaning in MonolineFormatter.
add c23536b Fixed NullPointerException.
add 4c447c8 Simplified install() and added test case.
add b939d16 Enabled support for ISO 19139 XML output on the command-line.
add 34fbf75 Merge from the JDK7 branch.
add cbdda3c Merge from the JDK6 branch.
add 4a9589b SVN merge info.
add b396473 SVN merge info, together with post-merge correction.
add 9adef4b Moved the class that perform a system-wide service to the internal "system" package.
add 36c7180 Replaced JCIP dependency by our own @Immutable and @ThreadSafe annotation for documentation purpose only. The intend is to avoid a trivial dependency which is very easy to avoid, to avoid the Retention.RUNTIME (we use Retention.SOURCE instead), and also because we noticed that some NetCDF library versions (at least the first mavenified ones) were bundling a copy of JCIP in their JAR, which was a potential source of conflict (probably harmless in practice).
add b083bf4 Added a few missing @Debug annotations for documentation purpose.
add 28f853e Merge from the JDK7 branch.
add 01eb664 Merge from the JDK6 branch.
add d3112d7 SVN merge info.
add 1e9fa00 SVN merge info.
add 3e212d0 OSGi configuration: unregister listeners of undeployed modules.
add c3a1b6e Updated NetCDF dependency.
add f22f92b Reports the logging implementation.
add 1ffbbde Declare the throwable in the LogRecord, to be omitted if the log is sent to the logger.
add bcdd07f Keep trace of cached object which were created with the default locale or timezone. Those cached objects would need to be cleared on localization changes, if we had listeners for that purpose.
add 1b43fe9 New method that needs to be implemented since the upgrate of UCAR library 4.3.16 to 4.3.17.
add fa708c4 Merge from the JDK7 branch.
add 510faf3 Merge from the JDK6 branch.
add 9ad5683 SVN merge info.
add 05e50c6 SVN merge info.
add e74e7ef Fixed a random bug in the test case (was not a bug in the library itself).
add 1438e7b Added checks against infinite recursivity and/or test cases for AbstractMetadata.equals(Object), hashCode(), isEmpty() and prune().
add 4f390f0 Safety guard against infinite recursivity in AbstractMetadata.toString().
add 6f9a143 Ported two tests.
add 3a50c05 Added tests for PropertyType (part of 'gco' namespace in ISO 19139 XML).
add 889c887 Ported missing adapter for PT_Locale.
add 3f36f31 Ported JAXB adapters for (un)marshalling of some metadata elements without their enclosing type. Those adapters are needed for the support of other OGC standards built on top of metadata.
add 3542076 Ported a test.
add 37984d5 Needs protected access for allowing the French profile "http://www.cnig.gouv.fr/2005/fra" to be defined in external project (for now) or separated SIS module (later).
add 117bad4 Fixed a test failure due to a missing dependency to JDOM2 after the upgrate of NetCDF dependency.
add d780cf3 Relax method access from protected to public for allowing external projects to implement metadata factories.
add 0feba65 Added a XML.WARNING_LISTENER property key in order to watch what may be going wrong during (un)marshalling. Also re-ordered the property order for using consistenly the same order everywhere.
add fe7a311 Use the WarningListener mechanism provided in the previous commit for reporting parsing errors.
add d0b1c99 Marshal the userDefinedMaintenanceFrequency property.
add 5eaeb8e Added JAXB adapters for ISO 19139 formatting of java.util.Date.
add c8cba2a Minor javadoc formatting.
add bd5bee4 Added adapter for ISO 19139 formatting of URI property.
add e0d9da3 Added adapters for some quantities and unit of measurement.
add f31bf15 No need for the propOrder attribute for unions.
add 0ee07a0 Add an internal method (to be removed on the JDK8 branch) to be needed later for some XML elements.
add f520d77 Resolve a few "todo" flags.
add 9e6afe1 Add tests.
add 11cff42 Merge from the JDK7 branch.
add f60b285 Merge from the JDK6 branch.
add ce2f800 SVN merge info.
add 1c86ffd SVN merge info, and post-merge fix.
add 6810680 Ensure that we cleanup the thread-local variable even in case of test failure.
add 9a5e610 Add the auto-generated stub for licensing reason (making clear that we start this class from scratch).
add 34d8113 Provides a real implementation for the automatically generated skeleton provided in the previous commit.
add 661ace3 Complete the DefaultRecordType implementation.
add 11645d2 Ported the GO_RecordType adapter, and enabled the metadata properties which were commented-out because of the lack of RecordType implementation.
add 6b446ed Minor javadoc fixes.
add e918281 Ported basic GML adapters, to be needed for TimePeriod.
add 20b412c Replaced erroneous header.
add 906c533 Ported the TM_Primitive adapter (temporal schema).
add 26d5e45 Enable XML (un)marshalling of TM_Primitive (temporal schema).
add e1e7387 Enable partial (un)marshalling of SC_VerticalCRS.
add c39637f Need protected access for allowing other modules to define Vertical Coordinate Reference System implementations.
add f791cce Replaced two ImmutableIdentifier private methods by a call to Citations static method for more consistent behavior.
add f54786c Added a few tests.
add c2d5ac4 Added in the javadoc a warning about a shortcomming of AdapterReplacement, and try to take in account classpath changes in OSGi environment.
add 61c9d91 TimePeriodTest must fix the timezone of its test.
add 2a532ae Merge from the JDK7 branch.
add 6cb9a6a Declare only the namespaces that are actually used in the package.
add b72abea Be tolerant to JAXB implementation that do not insert the "gml:" prefix in element names.
add d03b500 Merge from the JDK7 branch. This fix a test failure which was caused by differences in JAXB implementation between JDK6 and JDK7.
add e922a83 Merge from the JDK6 branch.
add c5e24d0 SVN merge info.
add 0493604 SVN merge info.
add 72e14bc Safety against infinite recursivity.
add 7f63132 Move mock objects in dedicated test package, and provide package-info javadoc.
add a8f811f Test GenericName marshalling.
add 5f4ba3e Added missing @return javadoc tags.
add 23eae9c Fixed wrong marshalling of <gco:ScopedName> element.
add 058da08 Test GenericName unmarshalling.
add 78d694b Make the LocalName adapter consistent with the GenericName one.
add a26da43 Merge from the JDK7 branch.
add 265cc41 Refactoring of the test infrastructure in order to fix XML prefix, test Locale and test TimeZone more easily. For this purpose, we modified MarshallerPool in order to allow the constructor to parse all properties given in argument, build a template for them and use the template for all (un)marshaller creations. This is likely to be useful not only for tests, but also in production environment.
add d49f059 Merge from the JDK7 branch.
add 837a4de Merge from the JDK6 branch.
add 0551268 Added more tests.
add cb001c5 Remove "xsi:schemaLocation" from the 'ignore' list, since this attribute is not used in those tests.
add 52846b1 Use CodeListSet / EnumSet in metadata objects when appropriate.
add 11fdb65 More tests.
add 13f1b1a More tests.
add 7f07b5e Merge from the JDK7 branch.
add e27bb62 Merge from the JDK6 branch.
add 279c011 Trivial reformating (indentation). No significant code change.
add 7e75ebc Ported ObjectReferenceMarshallingTest. Implied more work on gco:uuid support.
add e003bbb More tests.
add 7de65d7 More tests.
add 696f2e4 Added a {@scmUrl} inline taglet for inserting links to test data in test javadoc.
add 9bff7b1 Merge from the JDK7 branch.
add a0cf9cc Merge from the JDK6 branch.
add 0d54d54 SVN merge info.
add 79f67da SVN merge info, and post-merge fix.
add 50988e7 Added more tests.
add bb16a0b One more test.
add 3cb337a Copied the introduction from the home page, and replaced the "getting started" instruction by a link to the wiki.
add 1d9167e Name of root node shall be derived from public interface rather than implementation class.
add c8f69e5 Merge from the JDK7 branch.
add 8b07ccf Merge from the JDK6 branch.
add 8c985b4 SVN merge info.
add 1a91474 SVN merge info.
add d173958 - update and prep for 0.3 release rc #1
add a696144 Replaced the "0.3-geoapi3.0" version number by a plain "0.3".
add de589cb Merge from trunk the removal of "-geoapi3.0" suffix in version number.
add fc7d927 Merge from the JDK6 branch.
add 9fc14d4 Update Maven plugin version, and declare NetCDF dependency as optional.
add debcf79 Enable the {@scmUrl} taglet and document it. Also re-ordered the taglet list in alphabetical order as a side-effect.
add 0f127e6 Fixed two javadoc warnings.
add 01c101b Added missing license header in docbook source files.
add 53f397d (NetBeans IDE configuration only): removed the symbolic links to the resources, replaced by a plain copy task, because the symbolic links seem to confuse some tools (RAT plugin, embedded SVN).
add 1dcce85 Merge from the JDK7 branch.
add 5b4e27c Merge from JDK6 branch.
add ee3c047 Added Apache License headers.
add 902b7f0 Refactor LatLon, LatLonRadius and LatLonRect as subclasses of DirectPosition and Envelope implementations (SIS-68, SIS-69).
add 9f5160e Merge from the JDK7 branch.
add 2660c19 Merge from the JDK6 branch.
add 56b9da7 Added deprecation tags for classes to be replaced by OGC/ISO equivalents.
add 682d07c Added Apache License header to all APT files.
add 418bcee Added link to code review page, and copied wiki instruction for Eclipse integration.
add 152a0e7 Added warnings about methods that are likely to change.
add b51d45a Merge from the JDK7 branch.
add 119a629 Merge from the JDK6 branch.
add dbb6d5e Added a check for null argument, and trivial javadoc fix.
add cfe3b79 Removed the automatic inference of OnlineResource.protocol property, because it was the only "automatic" property to date and we may need more though about a generic way to give user control on properties inference.
add cabc0ef Merge the change from JDK7 branch which removed the automatic inference of OnlineResource.protocol property. This feature is considered not ready for the 0.3 release. See http://issues.apache.org/jira/browse/SIS-110
add 56f7d05 Merge the change from JDK7 branch which removed the automatic inference of OnlineResource.protocol property. This feature is considered not ready for the 0.3 release. See http://issues.apache.org/jira/browse/SIS-110
add d8706c7 Bug fix in construction of localized remarks.
add eae5402 Merge last-minute bug fix from JDK7 branch.
add 7679772 Merge last-minute bug fix from JDK6 branch.
add 4bd8220 Replaced the previous extension mechanism, which didn't worked as expected, by an other mechanism based on @XmlAnyElement.
add 8d38340 Copy constructors should accept null argument, in which case the behavior is the same than the default constructor. Experience suggest that this is often useful in practice, since the copy constructor is often used for copying an instance which may or may not exist, before to modify the values.
add 625325f Workaround for an element which is randomly missing at XML marshalling time (JAXB bug?)
add 5497ffe Merge from the JDK7 branch.
add 2575d57 Merge from the JDK6 branch.
add 6d06542 Minor localization in log record, and a javadoc fix.
add 43e2bf0 Added missing @return javadoc tags.
add 0d97e3f Changed groupId of modules in the "core" directory from "org.apache.sis" to "org.apache.sis.core". Applied the same kind of change for "application". The "storage" directory was already that way. With this change, the "groupId" match exactly the directory structure.
add 315a02f Merge from the JDK7 branch.
add 513f91a Merge from the JDK6 branch.
add cf29ffa Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
add f2985f4 Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
add 90cdb72 Upgraded version number from 0.3-SNAPSHOT to 0.4-SNAPSHOT.
add 0330a68 Slight simplification of ObjectReference by removing the String representation of UUID, and using only the real UUID object instead. We are not loosing information in case of unparseable UUID because those attributes are used for marshalling *references* to metadata objects, not for marshalling the metadata object themselves. The UUID - even unparseable - associated to metadata are marshalled as String (rather than UUID) by ISOMetadata instead.
add 646e09d Clarification about which property has precedence between XLink.href (a URI) and the "unparseable href stored as a string".
add 27f9f67 Simplify ISOMetadata by delegating all String <-> UUID conversion to the IdentifierMap.
add 3165e75 More accurate warning message about what happen when a UUID or URI can not be parsed.
add 34994f0 Slightly more accurate warning message.
add 858076b We will need the converters to work with arrays.
add 10da22a Trivial spelling fix: parseable --> parsable. The removal of the "e" is following the recommandation on http://en.wiktionary.org/wiki/parsable, which is also W3C usage according the above-cited page.
add b823de8 Upgrade some Maven build plugins.
add 691c133 Let Maven generates the table of content automatically.
add 2fb3a64 Removed anchors since the TOC macro ignores them anyway.
add 440e38a Initial draft of the release setup page. The release process page will be commited later.
add 9143d74 Initial draft of release-process page, derived from Suresh's page.
add c8d3f97 Miscellaneous documentation fixes (wording, spelling and formatting).
add 8471321 More release instructions. The vote procedure is a copy of Suresh's "release management" page, adapted to APT format.
add 7942a95 Removed documentation that migrated to the sis.apache.org site.
add 536c504 Added public code signing key for 74383E9D (Martin Desruisseaux)
add 254523f Removed pages that migrated to the CMS.
add c4b81a7 Updated the Ant script for the changes in release-management page.
add 6673172 Update the Ant script to reflect the change in release-management documentation.
add f2b4c42 Removed the "Recommended code pattern" page, since it migrated to the main site.
add f82cc07 Removed the FAQ, since it migrated to the main web site.
add b13a186 Merge from the JDK7 branch.
add d89101c Merge from the JDK6 branch.
add 112c794 SVN merge info.
add 426b568 SVN merge info.
add 995cfe9 Added convenience constructors for DefaultExtent.
add 38407af Moved the WORLD constant from DefaultExtent to the Extents static utility class.
add da425ae One more text to move from Maven site to CMS pages.
add 3e99f95 Ported the LatLonRect.toJavaRectangles() method to Envelope2D (part of SIS-69 task).
add f78d8ca Documentation.
add 9790a3e Support 'nilReason' on Boolean values.
add 5b52703 Renamed 'NilReason.getNilReason' as 'NilReason.forObject'.
add 791c7aa Added comments explaining rational for the implementation choice, and drawbacks.
add 00841cc Cache the NilObjects created so far, and add support for nil InternationalString.
add 2832497 Support NilReason on Integer values.
add e41ff04 Do not try to support a subset of primitive wrapper anymore. Support all of them (except Char for now), because we are still finding code using various primitive type wrapper in various corners.
add 6914249 Support NilReason for Float and Double types.
add 64e722f Some properties were wrongly using GO_Decimal adapter instead of GO_Real.
add 97a26a1 Implement AbstractEnvelope.toSimpleEnvelopes(), which is equivalent to Envelope2D.toRectangles() in a more general way.
add f400e20 Metadata java.util.Map view shall check for NilObjects.
add d69c2f5 First round of removal of classes to be replaced by ISO objects: - Removed LatLonRect - Replaced some LatLon usage by DirectPosition2D.
add 3bcfcb3 Second step in replacement of classes by ISO/OGC objects: - Replaced LatLon by DirectPosition (2D case).
add bc5ee7d Merge from the JDK7 branch.
add 85f5dcd Merge from the JDK6 branch.
add 537b466 SVN merge info.
add fabcfed Minor javadoc note.
add 62f6048 Removed PropertyAccessor.append(...), since it is not used anymore.
add ec37481 Minor documentation clarification.
add 3b04819 Use one instance of ServiceLoader per MarshallerPool rather than a system-wide instance. The purpose is to avoid issue with class loaders in two applications are loaded as two distinct OSGi modules.
add b31d985 First draft of a DataStores static class creating the DataStore using ServiceLoader instead than a hard-coded class instantiation.
add 351f5b7 First proposal of 'DataStoreProvider' using OpenOptions.
add fd1a480 Replace usage of the JDK7 java.nio.file.OpenOption by our own CodeList for the following reasons: - While java.nio.file.OpenOptions are mostly the same than the DataStore OpenOption for now, we have no guaranteed that it will still be the case in the future. - Sharing the same OpenOption between file and DataStore would allow to pass DataStore-specific OpenOption to java.nio.file, or java.nio.file-specific OpenOption to DataStores. It may not really hurt since java [...]
add ee4bd1f Revisit the strategy about DataStore OpenOptions: move them as options given to StorageConnector, because we need to know them when the ByteChannel is created (having the options in DataStoreProvider.canOpen(...) was too late). As a side effect, the OpenOption are not anymore directly in the method signature, which will make the port to the JDK6 branch a little bit easier.
add f13c934 Merge from the JDK7 branch.
add 782e631 Merge from the JDK6 branch.
add a96730f More conservative approach about exceptions and allowed OpenOptions in internal IOUtilities. Documentation clarifications.
add fc2c7fd Revert back to straight Boolean fields instead than bitmask. The reason is that we need the exact reference to Boolean objects in order to determine NilReason.
add d774417 Exclude the @XmlType(name="...") attribute for now for allowing external projects to define their own type. This is a temporary patch to be reverted after we implemented the sis-temporal module.
add 2ab0547 Remove unconditional class initialization of CodeList in JAXB adapters.
add 6922572 Merge from the JDK7 branch.
add 17ef452 Merge from the JDK6 branch.
add 8da175d Prefetch more bytes when the ByteBuffer doesn't contain enough bytes for allowing us to recognize the format. We try to prefetch more bytes only if necessary in order to avoid latency on network connections.
add a4774e4 Reduce the scope of the 'synchronized (loader)' block, in order to reduce contention in highly multi-thread environment.
add 07ef6d2 Remove an erroneous assertion.
add 2ce63c2 Allow external modules to specialize factories (especially TemporalFactory). This is a temporary workaround while we are waiting for real dependency injection in SIS.
add dee40c1 Provide a XML.(un)marshall variant accepting the optional map of properties.
add cea0171 Improve documentation and add an option for document encoding.
add e40ad8a StorageConnector needs to be also able to provide InputStream and Reader objects. This support complicates a bit the task of closing the stream, in part because AutoCloseable is not guaranteed to be idempotent (ImageInputStream in not).
add 878c5e0 Missing 'return null' statement when the given type is legal but no instance is available. This is different than throwing an exception when the given type is illegal.
add 46161eb Added a XMLStore implementation, in internal package.
add fac5bb1 Force the GML namespace for the "id" attribute.
add 5436ca2 Documentation fix.
add 4eeaef2 Fix a test failure when the path to the project contains a space (or any other encoded character in the URL).
add 011b7a5 Merge from the JDK7 branch.
add 9869801 Merge from the JDK6 branch.
add a79d9f0 TreeTableFormat needs to use DateFormat and NumberFormat when appropriate. This is required not only for better formatting, but also for fixing a test failure when executing the tests in various timezones.
add b7dab83 Fix an other timezone problem.
add b00fe04 Fix filename prefix of source-release.zip file.
add 83f8159 Change the name of the generated .pack.gz file to the same pattern than the one used for source and javadoc releases.
add 8b26638 Removed the link to source code and download from Maven repository in the text generated by the @module tag, because 1) the link to source code work only on the Maven web site, which is not anymore our primary web site (in particular, those links are broken on the web site and for those who download the apache-sis-0.3-doc.zip file), and 2) the Maven repository is not the preferred way to download the binaries for non-Maven projects.
add d04c925 Merge from the JDK7 branch.
add afd43fe Merge from the JDK6 branch. This merge contains bug fix for problem discovered during the release process: timezone problem, removal of broken links in generated javadoc and adjustment of bundle filenames.
add 2a3fc45 Minor adjustment in dependency declarations.
add 2ad1edf Added the skeleton for binary artifact.
add c10f42a In string representation, format the GeographicBoundingBox values as longitudes/latitudes instead than plain doubles.
add 16792b4 More tests regarding the declared type of GeographicBoundingBox longitudes and latitudes.
add ae98b45 Bug fix for missing minus sign (SIS-120), and allow optional fields (SIS-121).
add fae94fe DefaultRepresentiveFraction needs to implement IdentifiedObject (SIS-122).
add 07e8774 Force the formatting of leading fields in the case of longitude and latitude values.
add 8a4ce9c Make explicit that the date format is the default one rather than a custom choice.
add 71162e8 More robust correction to SIS-120.
add a5b1655 Updated dependencies.
add 6a582c4 First draft of <gmx:FileName> support (SIS-119).
add 03893c9 Add support for <gmx:MimeFileType> (completion of SIS-119).
add 02165eb Merge from the JDK7 branch.
add 63c737c Merge from the JDK6 branch.
add cd3c705 SVN merge info.
add ec017cc SVN merge info.
add 742881d Changed 'ProbeResult' type from enum to class, in order to allow implementors to specify additional information like MIME type and format version number.
add 4433762 Renamed 'canOpen' as 'probeContent'. As a side-effect, this change allow us to restore the 'canOpen' method that existed in SIS 0.3 as a deprecated method, to be removed in SIS 0.5. Note that SIS 0.3 javadoc clearly stated that the 'canOpen' method was going to change.
add 8524528 NetCDF provider can now provide MIME type and file version number.
add a8bfb3b Detect the "application/vnd.iso.19139+xml" and "application/gml+xml" MIME types (instead of only application/xml"). More types to be added later.
add 5c7aa73 Connect our MIME type detection mechanism to the system-wide java.nio.Files.probeContentType(Path). Make it available from the command-line.
add c74a1e2 Added test and more accurate detection of MIME type in the command-line application.
add 347945a Initial creation of a new sis-feature module, with a copy of the Feature class from the Shapefile branch.
add a34828a Forgot to remove debugging code.
add bc3c8c4 Simplify the Pack200 plugin by removing the support for various profiles. If profiles are wanted in a future SIS version, we will try to handle them in an other way.
add 655d3ea Create the distribution file automatically.
add 6626c75 Improved documentation and added links.
add 85f25a5 Added a note about use of ESRI Geometry library in the NOTICE file, and upgrated the dependency.
add 8ce4179 Ported a class to be needed for IdentifiedObject implementation.
add 92e5f97 Starting the port of WKT parser/formatter.
add 7f745a6 Move the Colors.Element inner enumeration to a top-level enumeration, since it is not specific to syntatic colors.
add 3706499 Ported the WKT Symbols class.
add eb89688 Added skeleton classes to be needed by the WKT package. We will port the concreate implementations for those classes later.
add fd29a3d Ported the Convention enumeration.
add 5d83874 Javadoc and minor tuning.
add 314c745 Partial port of the IdentifiedObjects utility methods.
add 7d2096a Initial port of FormattableObject.
add a9e357c Tuning WKT Formatter.
add cc18819 Ported some tests.
add 29b63b8 Fixed a never ending loop.
add 7d6d3a0 Initial port of "profiles/sis-french-profile" module.
add 7f752f0 Moved all French profile classes out of public API except FRA_[In]DirectReferenceSystem. This is because the properties added by this profile seem to be part of the 2013 revision of ISO 19115. Consequently all properties in this profile are expected to become unnecessary except for backward compatibility. The status of the two added classes, namely FRA_DirectReferenceSystem and FRA_IndirectReferenceSystem, is still uncertain because we are lacking documentation about the [...]
add b977319 Refactoring the French profile: moved the two remaining public classes out of public API for now, because their documentation are insufficient and they were extending internal classes anyway. We will provide instead some static methods with the minimal amount of API that we can expose.
add 2199f22 Provide static methods for indirect access to the classes that were removed from public API.
add 8b19c9a Added a missing JAXB adapter required by some projects that depend on SIS.
add 58ef5a4 Added tests. This complete (for now) SIS-129.
add 46f68b3 Added gitignore file (contribution by Olivier Nougier).
add e4d0a79 Initial copy of the Shapefile branch to the main development branch.
add b6875d8 Removed all remaining reference to the French profile from the core metadata module. The profile is now fully isolated.
add 82d0252 Fixed erroneous group id: shall be 'profiles', not 'storage' (was a copy-and-paste error).
add f951581 License header, reformating and annotations - there is no code change in this commit.
add 7a09fc0 Replaced the Feature from sis-shapefile module by DefaultFeature from sis-feature module.
add 74b4ffb Moved test resources to the standard Maven location.
add ddc9112 Added tests and fixed a NullPointerException identified by those tests.
add 18a318c Move the declaration of UCAR repo to the root pom.xml in the hope to fix the anoying exceptions reported by Jenkins.
add c18c5f3 Added capability to provide information about a SIS installation on a remote machine (only if explicitely enabled at remote JVM startup time).
add 77a9979 Initial port of NamedIdentifier.
add d1a1795 Ported from the JDK6 branch the workaround for Eclipse compiler, since experience shows that Eclipse still insists for redundancy on JDK7 too despite what the Java specification saids.
add d1701f6 Partial port of AbstractIdentifiedObject. Compared to the geotk version, we abandon the case-insensitive search for keys in the property map. This was inefficient, made the code more complicated and appears to be rarely needed in practice.
add 4bbb20e Documentation fixes.
add a2088e4 Factor out the localization part of ImmutableIdentifier in a separated method - Types.toInternationalString(Map, String) - so we can share it in AbstractIdentifiedObject.
add b40709c More conservative inference of code space if not explicitely specified.
add c64611c Ported more code for AbstractIdentifiedObject.
add 5242ad5 Documentation clarification (no code change in this commit).
add f4bf3e2 Clarify a bit the policy on null collections in private fields of AbstractIdentifiedObject, and ported implementation of equals(Object, ComparisonMode).
add 669b300 Added some tests.
add 2d8d3b7 Ported AbstractReferenceSystem.
add 3809f36 Added more tests.
add 0c43d67 Minor formatting and link fixes.
add 14bbf8c Ported AbstractDatum.
add f333f63 Ported DefaultEngineeringDatum.
add d56148d Ported DefaultImageDatum.
add 8f95bac Ported DefaultPrimeMeridian.
add 3854f45 Minor javadoc fixes.
add 6344463 Missed that file in the "Ported DefaultPrimeMeridian" commit.
add 894f767 Merge from the JDK7 branch, with omission of java.nio.file.spi.FileTypeDetector service.
add 8900c4f Merge from the JDK6 branch.
add 3025580 Merge from the JDK7 branch.
add 822828e Merge from the JDK6 branch.
add 401a8f6 Merge from the JDK7 branch.
add 05ff364 Merge from the JDK6 branch.
add d8334ea Merge from the JDK7 branch.
add a96556a Merge from the JDK6 branch.
add 72be553 Fix for SIS-132 Better support for eclipse IDE contributed by Olivier NOUGUIER.
add 8d8a11a Patch for SIS-133 ResourceCompilerMojo should execute only when properties files are modifiedcontributed by Olivier Nouguier.
add fe0b62f Documentation, formatting, and update for NetBeans.
add 3605bf7 Merge from the trunk.
add c3e0ca1 Fix erroneous report of test failure.
add 529b5f8 Follow the advice of warnings produced at Maven build, by replacing "@parameter expression=" in Mojo by "@parameter property=". Also exclude the META-INF/maven entries from the JAR files.
add 4f2f669 Revisit the hashCode(...) method, since we had an inconsistency with equals(...) in the way to take in account which interface is implemented. While fixing the inconsistency, we opportunistically lined-up the API with the equals(…, ComparisonMode) one, in the hope to be more future-proof regarding possible SIS API evolution.
add a4904da Bug fix in Eclipse integration (patch by Olivier Nouguier).
add 431bc99 Minor javadoc fixes.
add 9bca5a6 Fixed erroneous version numbers.
add 53c9b73 Ported DefaultTemporalDatum.
add 187a08b Added an implementation note.
add ed895d6 Ported VerticalDatum.
add de18354 Fixed accidental upper-case.
add 4cfbb1b Initial port of DefaultEllipsoid
add 96eac91 Renamed Spheroid as Sphere, which match better what the object is.
add dc84998 Fixed a ClassCastException in Cache.get/put/remove(K).
add 8b8b42a Modification of natural ordering of AbstractName: now case sensitive instead of case-insensitive. Javadoc clarifications.
add 8d92435 Minor documentation update.
add 6d42ab6 Initial port of matrix interface. We plan to use JAMA under the hood as the initial implementation (except for very small matrix), but we keep the possibility to change implementation in the future.
add 8978cfc Avoid an exception when creating a link between two files on different Windows drives.
add 0ab6b44 Moved org.apache.sis.math.matrix to org.apache.sis.referencing.operation.matrix for the following reasons:
add 1ae578f Make MatrixSIS an abstract class instead than an interface, and partial port of Matrices utility class.
add 507ffaf Port of a very trivial Matrix implementation of size 1x1. While trivial, this case does occur relatively often when computing derivative of a one dimensional CRS (e.g. the vertical or time axis).
add af05ccd Ported the 2x2 case.
add 7eeb15a Initial port of Matrix3. Missing the 'inverse()' function, which will need to be adapted from JAMA.
add 1822355 Push Matrix1,2,3,4 in public API, and added a rational in the package javadoc. This is the same than what Vecmath (from Java3D) and Geotk did.
add 800f565 Fixed a test failure on Windows platform.
add f4b316e Javadoc and better error message in case of indices out of bounds.
add 1ee6636 Added get/setElements methods, and javadoc updates.
add 6e10b22 Ported Matrix4.
add 3db656a More IP review.
add a54e86b Check matrix indices explicitely.
add 76ce9c6 Initial port of GeneralMatrix, for all cases not covered by Matrix1,2,3,4. The 'inverse()' method will uses JAMA. We do not expose JAMA directly because inspection of the inverse algorithm suggests that JAMA uses a less square algorithm for non-square matrix, while the referencing module will need a different approach (to be committed later).
add b2c54ed Ported the factory methods.
add 6dc3c8c Added an explanation about why many methods are declared final in this class.
add 20d468d Remove the 'setToZero()' method, replaced by a 'createZero' constructor. This is because search in existing code base has shown that 'setToZero()' was used only for clearing a newly allocated matrix.
add 07fc746 Ported some more utility methods.
add ac22d48 Simplication: a search in the code base has shown that 'negate()' was not used, so remove (for now) that method. Renamed 'transpose()' to 'setToTranspose()' for making clear that the result replaces the previous matrix.
add 1ca0af8 Added a package-private subtype for non-square matrix. The 'inverse()' method of that subtype will perform some additional check for independent axes before to attempt the matrix inversion.
add 4a8987b Isolate the method related to java.awt.geom.AffineTransform in a separated class (more methods will be added later). The intend is to separate as much as we can the Java2D dependencies, in order to make easier to use SIS with other technologies like JavaFX or Android if we wish.
add a89baa3 Initial draft of test classes.
add f57cc8b Completed the set of tests related to constructors (not yet operation methods).
add 2a700cd Differs the report of random generator seed number only in case of test failure.
add 0a0564f More simplification attempts:
add 6ecfe90 Added a test case for the transpose operation, and a bug fix.
add ee27df7 Added test cases.
add a03f2eb Matrix-related exception extends the coordinate operation exceptions, because this matrix package is designed for use as CoordinateOperationStep.
add aec09ec Ported static methods working on java.awt.geom.AffineTransform.
add 6f7104c Ported tests for AffineTransforms2D static methods.
add 22f14df Trivial javadoc adjustment.
add e32ffbc Replaced some inline values swapping by an explit 'swap' method for making the code easier to read. This helps also in Matrix.inverse() implementation. We rely on Hotspot optimization for producing the same performance than when the swapping was done inline.
add 6d06185 Added a 'solve' abstract method (not yet implemented) and test cases. Also modified the test case for running the arithmetic tests more than once with different random matrices.
add ebd6255 Renamed SingularMatrixException as NoninvertibleMatrixException because the matrix can be non-invertible for other raisons than being a singular matrix.
add c388c23 Initial port of JAMA code for matrix inversion.
add c21ee72 More lenient comparison of XML documents in tests (patch by Guilhem Legal).
add c60d7a1 The DOM builder needs to be namespace-aware in all tests. This requires the prefixes to be bind to namespaces in XML tests.
add 8e8cb7d Fixed a few javadoc warnings.
add 1600bfe Tests need to ignore the prefix when comparing element names (patch by Guilhem Legal).
add 83ebebc Minor tunings: * Renamed Matrices.create(int,int) as createDiagonal. * Removed dependency to java.awt.geom.AffineTransform in Matrices (the method will still work using the more generic checks). * Added a test case. * Trivial javadoc.
add d2319d7 Ported createDimensionFilter
add e8eed67 Make sure that the comparator detect mismatched namespaces.
add e898f0e Use italic for single letter variable in math expressions.
add 5c0a7e0 Ported Matrices.createPassThrough(...) method.
add 71ec60b Renamed createDimensionFilter as createDimensionSelect, and Javadoc editions.
add 9f4c386 Ported more code from Geotk.
add 0eb598a Added tests for Matrices.createTransform(AxisDirection[], AxisDirection[]).
add 4c3500f Added more test cases for Matrices static utility methods.
add b392344 Make Matrices.createTransform(Envelope, ...) more robust to envelopes spanning the anti-meridian.
add e70f2ca Javadoc (in particular, emphase that those methods does not check the Envelope CRS).
add 36bf4c2 Moved Matrices.castOrCopy to MatrixSIS and added variants in sub-classes for consistency with what we are doing in other classes. Added missing 'swap' method for consistency with the rest of the ArraysExt class. Added a link to the pending part of GeoAPI for the javadoc parts that talk about grid coverages.
add 8f41c78 Added double-double arithmetic support as an internal class. For now we plan to use it only for matrix multiplications and inversions, where (in the particular case of SIS) accuracy is more critical than performance.
add b4c6ddc XML output shall take in account the --encoding argument (SIS-138).
add e4f99c9 Fixed a NullPointerException during unmarshalling of an empty collection (SIS-139).
add 5004e3c Adds a few constants for double-double arithmetic, especially for values related to PI and conversions between degrees and radians.
add e624874 Forgot to remove extra digits in the previous commit... (last digits were rounding error).
add 8b6ef74 Prepare for double-double matrix arithmetic: GeneralMatrix can now allocate space for the DoubleDouble.error terms (not yet used in this commit).
add f82040d Reduce the logging level from "warning" to "config" when the Supervisor MBean is already registered.
add cf613b4 Added a convenience 'warningOccured' internal method for a pattern which happen to occurs often in practice.
add d6b0769 Set error terms to "inferred" values, and stricter check for the error terms in isAffine() and isIdentity().
add 09cec93 Matrix multiplications now use double-double arithmetic.
add 2b45b2b Slight simplification of Matrix3 and Matrix4 by the removal of their large 'equals' method, replaced by a default implementation provided in SIS.
add 1d7c7a7 Revert the previous commit that removed 'equals' and 'hashCode' from Matrix3/4 (more investigation has show that it was not a so good idea), and simplify in an other way by removing 'MatrixSIS.getExtendedElements()'. Instead, we perform that work in GeneralMatrix in a way that put unconditionally the error terms. Tthis simplify the actual computation by removing a bunch of '(foo == 0) ? foo : foo' operations. This is more apparent in the Solver class (not yet committed).
add b7bc477 Added a STRICTFP static final flag for verification purpose only. First piece of double-double arithmetic in matrix inversion.
add 5df1379 Add convenience method in DoubleDouble working on array. This make the code more readable in GeneralMatrix and Solver.
add a390a22 Renamed the STRICTFP constant as DISABLED. The old name was giving the impression that non-STRICTFP calculations were platform-dependant (by analogy with the Java 'strictfp' keyword), while it was not the case.
add 760c9cf Complete the use of double-double arithmetic in matrix inversion.
add b21793d Post double-double arithmetic cleaning: trivial renaming of local variables for more clarity.
add 659d802 Cleaning: remove unused 'precision' argument.
add 4a69d14 Fix the seed of random number generators for ensuring stable builds.
add f861975 Safety against some rounding errors.
add 8aa3e3a Improvement in Matrix string representation for making easier to spot "interesting" values.
add 0d9a0ac Leverage double-double arithmetic in magnitude computations.
add a800e36 MatrixSIS.solve(...) delegate to Solver.
add 769a560 Slightly more efficient 'getElements' for internal usage, and a little bit more documentation.
add 4f0a628 Ported from Geotk the handling of NaN values.
add 67f880b Minor simplification in the iterator over the flat matrix array.
add f929dcb Specify the threshold for zero value as constant, for clarity.
add 0baec59 Initial port of Geotk code for inversion of some special cases of non-square matrix. Still need more work for better handling of DoubleDouble.error values.
add 908c71b Support for NonSquareMatrix.solve(Matrix), and preserve DoubleDouble.error terms in NonSquareMatrix.inverse(). Added documentation and a few more tests.
add 6190b34 Special case for inversion of matrix having less columns than rows.
add 64e868f Slight reduction of test execution time.
add 439c3f8 Maven execute test suites instead of individual test cases, for control on test order and test dependencies.
add 31226cf Added missing TestSuite.
add 16fdb4d Minor javadoc fixes.
add e484b49 Initial port of BursaWolfParameters.
add b6ee545 Javadoc formatting.
add bf82248 Use double-double arithmetic in 'normalizeColumns()' method too.
add 3aa34e7 Minor documentation fixes.
add 6d295d9 Moved DefaultEllipsoid constants to StandardObjects.Geodetic.
add 9fdddd0 Moved the DefaultPrimeMeridian.GREENWICH constant to StandardObjects.Geodetic.[FOO].primeMeridian(), and added documentation.
add 8d789e1 Minor documentation tuning.
add 947afca Minor refactoring: put the code that actualy create the Greenwich prime meridian closer to where it is invoked.
add 22c7eb8 Moved StandardObjects.Geodetic inner class as a standalone GeodeticObjects enum.
add 5496c68 Javadoc updates following the move done in previous commit.
add cdff0db Moved temporal datum constants to the TemporalObjects enum.
add dce4ae4 Javadoc uniformisation, and minor API simplification in constructors.
add 78c7a03 Moved DefaultVerticalDatum constants to VerticalObjects enumeration.
add 1f2bd05 Fixed an IndexOutOfBoundsException when a call to LineAppender.flush() is interleaved between two append (SIS-140).
add 38c25fa Make the test string a little bit longer in order to test with an index different than zero (safety against regression).
add 2e0621f Minor refactoring in temporal datum name and in position of copy constructors.
add 72818fc Moved VerticalObjects and TemporalObjects enumeration as inner enum of GeodeticObjects, as suggested on the mailing list.
add 25a0442 Replaced the non-standard SIS sphere by the EPSG definition of GRS 1980 Authalic Sphere. The difference is 7 metres in radius length.
add 7244461 Trivial reformating for making the lines a little bit shorter.
add 00f13fd Added a note in documentation about the target datum, saying that target datum having a world-wide domain of validity are preferred.
add fbd3110 Minor javadoc rephrasing and compiler warning fixes.
add dbcf890 Initial port of DefaultGeodeticDatum. The getAffineTransform(GeodeticDatum target) method will need to be revisited, since current implementation has no safety against concatenation of datum shifts between unrelated geographic areas.
add 7a23b30 Added a test case.
add a2a13a0 Fix a hole in DoubleDouble.sqrt accuracy.
add 11ab143 Renamed getAffineTransform() as getPositionVectorTransformation(), which is a more accurate description of what this method is computing. The corresponding EPSG operation method is 1033.
add f019e39 Case for sqrt(2).
add e0f6427 Added an EPSG annotation for documentation purpose.
add 4e355ec Removed the convenience constructors. The original intend was to make direct instantiation of 'DefaultFoo' types easier, for example by avoiding the need to invoke Collections.singletonMap(DefaultFoo.NAME_KEY, name) in the common case where the user just wants to specify a name and no other properties. However experience has shown that it still not convenient enough. We should probably provide a 'GeodeticObjectBuilder' instead.
add 3a8323f Added some tests for BursaWolfParameters class.
add bcbe99c Fixed broken formatting.
add b33698e Matrices.toString(...) shall not append more '0' characters than the accuracy of IEEE 754 double precision.
add dd1e641 Abandon the @EPSG annotation experiment. It was polluting a bit the javadoc and source files, and was more difficult to apply than initially though because the relationship was not always one-to-one. We will rely on javadoc instead.
add 20c81d8 Added javadoc.
add f5edc43 More javadoc.
add 60e2d1c Math functions.
add 2a12cf9 MathML fix.
add f300c9d Minor javadoc fixes.
add bcc29a9 Fixed a rounding error when formatting angles.
add 3073489 Added a Extents.area(GeographicBoundingBox) for providing a surface estimation.
add f0ab57a More conservative fix for rounding errors: round to exactly the number of digits to be formatted, no more.
add 63ef497 Added a null-safe Extents.intersection(GeographicBoundingBox, GeographicBoundingBox) convenience method.
add 5757fd1 Relaxed again the tolerance threshold.
add c09503f Partial work for SIS-143: DefaultGeographicBoundingBox shall support spanning of anti-meridian. This fix allow the box to stores such value, but the operations (union, intersect, area) are not yet anti-meridian aware.
add 08bcb43 DefaultGeographicBoundingBox.add now support anti-meridian spanning (SIS-143).
add 46cf259 DefaultGeographicBoundingBox.intersect now handle anti-meridian spanning (SIS-143).
add 97d2bbd Union or intersection of NaN values shall produce NaN. Extends.area(GeographicBoundingBox) supports anti-meridian spanning (SIS-143).
add 63c02e1 Added in the javadoc the note sent by email.
add 42deb2d Minor javadoc changes (making some provision for planetary CRS). Moved some code for keeping static method together (no real code change).
add 532d414 Bug fix: ordering of metadata properties was ignoring the ordering specified in parent classes.
add 13ced97 Numerical functions.
add 45d1e71 Moved in a separated class the methods that are related to the string representation of IEEE 754 values. Those methods are not really "mathematic", and some more are going to be added. Having a separated class for them also clarify method and constant names (e.g. it is not clearer that DecimalFunctions.fractionDigitsForValue is about the fraction digits of the decimal representation of a IEEE 754 double).
add ec15431 Missing file from the previous commit.
add a41055e Added an utility method for widening conversions of values parsed from an ASCII file.
add 545d5b8 Deprecated the MathFuctions.sgn methods, because standard JDK provides equivalent methods.
add 597c3dd Renamed DecimalFunctions.convert(float) as floatToDouble(float), and minor change in the algorithm for improving the accuracy.
add 85f46f2 The previous commit accidentally contained sis-referencing changes which were not yet ready. Instead than reverting the commit, just add "TODO" comments for what need to be completed.
add 736cd38 Slightly more extensive test of Numerics.getSignificand(...). In particular, we needed to ensure that it behaves as expected with infinity values.
add c74f32e Precompute all values of 10^n. This consume 5 kb of memory, but simplify the code and guaranteed performance. The performance issue was not a concern for fractionDigitsForDelta and fractionDigitsForValue, because those methods are invoked only once for a dataset. But performance become more an issue for floatToDouble and the upcomming method for completing the error term in double-double arithmetic (to be committed later), since those methods will be invoked for all data [...]
add 34e704a Initial version of a 'deltaForDoubleToDecimal' method for estimating the difference between an IEEE 754 double value and its definitive value as defined in base 10 by international standards.
add 9011992 Added a test case for deltaForDoubleToDecimal
add 2c328a0 More tests.
add 336fb04 Take sign in account, and check for the domain of validity.
add b86eca0 Removed the DoubleDouble hard-coded constants that can be calculated by deltaForDoubleToDecimal.
add 034b023 BursaWolfParameters.getPositionVectorTransformation() now uses double-double arithmetic.
add 210b21c Remove the boolean 'inverse' argument in BursaWolfParameters.getPositionVectorTransformation(). Instead, we will compute the inverse by a call to MatrixSIS.inverse(). The intend is to get a result closer to the identity matrix when concatenating transformations A -> B followed by B -> A.
add cc90050 Minor javadoc updates.
add 4f6e4a4 Trap zero values in matrix multuplications.
add 038e8a3 Javadoc formatting.
add 94b7e7e getPositionVectorTransformation(...) API shall have arguments for geographic and temporal extent.
add a2872b2 Increase accuracy of BursaWolfParameters(Matrix, double, GeodeticDatum, Extent) constructor and add test case.
add 08cb03f Let BursaWolfParameters be mutable (make defensive clones instead) in order to simplify their construction, make the code easier to read (easier to see which values are assigned to which fields), and protect the setPositionVectorTransformation(...) method from future constructor changes if any. The need to simplify the construction became more apparent with our first draft of time-dependent parameters.
add 05e49bd Initial version of time-dependent BursaWolfParameters. The test case does not yet match the expected result according EPSG.
add 6e5069b Identified the magnitude of the difference between our calculated values and the EPSG ones. Verified that we get the same result when calculating from the pre-corrected values given in the EPSG example.
add 691b68f Copied properties reminders in javadoc.
add 3a5b16b Misplaced HTML attribute.
add 0a3596c Added import statements for javadoc links.
add 9f1be85 Brings more consistency in property lists. Contains also an opportunist NullPointerException fix.
add 5761c59 Added DefaultEllipsoidTest.
add a589deb Added GeodeticObjectsTest.
add f4e1d9d Added VerticalDatumTypesTest.
add bf64b1d Added DefaultVerticalDatumTest.
add 504e3ce First draft of DefaultGeodeticDatumTest (not yet completed).
add 5665def Added GeodeticDatumMock for testing purposes.
add 7a9e43f Complete DefaultGeodeticDatumTest.testGetPositionVectorTransformation()
add 01b2983 Do not allow anymore null target datum in BursaWolfParameters.
add f24a9b3 GeodeticObjectsTest.testGeodeticDatumMock() was actually more a StandardDefinitions test.
add c4393e1 Compute the date where to evaluate the position vector transformation from the given extent.
add 85c4ad4 Added a creation and serialization test.
add e397b27 More tests.
add 2942635 Licensing: fixed erroneous header.
add ac8a257 Added some WKT formatting tests.
add efc3d15 Provides 'castOrCopy' methods in parent class. This will be needed for the WKT formatter.
add ba69f5c Added DefaultGeodeticDatumTest.testToWKT() test case.
add d6322ff Simplification attempt: remove the Formattable interface. This interface was initially introduced for making easier to format subclasses of java.awt.geom.AffineTransform. However SIS will try to reduce direct dependencies to Java2D, which remove the main motivation for Formattable interface.
add de26676 Tolerance value relative to DoubleDouble.error is not reliable. Need to make it relative to DoubleDouble.value instead.
add 86c3a49 Minor change in implementation of 'equals': check for (x instance Foo) before the call to super.equals. Not sure what would be the impact on performance, however this reduce the risk of errors.
add 03932da Moved 'ellipsoid()' method before 'primeMeridian()'. There is no change of functionality in this commit. The intend is only to declare the methods that are more likely to be of user interest before the other methods.
add 6e5e982 Added GeodeticDatum definitions for some common ones.
add a4ef735 Added a few tests.
add 826e83d Ported JAXB adapters for datum objects.
add 8102dce Initial port of an internal class to be needed for parsing axis directions.
add 2199834 Consolidation: merged Directions with AxisDirections static class. Simplified the Directions methods by invoking the appropriate CharSequences method where appropriate.
add 6c33678 Ported DirectionAlongMeridian.
add be44dc7 Initial port of DefaultCoordinateSystemAxis.
add 7e800e1 Javadoc: try to provide more descriptive package description.
add d92282f Partial port of AbstractCS.
add 960ccfe Ported the swapAndScaleAxes static method.
add 908c062 Partial port of DefaultCartesianCS.
add 9ef653f Ported the method for parsing a String to an AxisDirection.
add 2632d4e Add missing 'equals' implementation. Rename 'dimensionOf' as 'parseAxisDirection'.
add 2820ae0 Javadoc fixes and added tests.
add e69125c Added DefaultCompoundCS.
add ec4e115 Added tests.
add 49c4076 Consolidation of IdentifiedObject.nameMatches specification.
add fe5475b Implemented the special case for the "D_" prefix in ESRI datum names.
add 2bbd2d3 Javadoc clarification, trying to emphase on the heuristic nature of 'nameMatches(String)' method. Also put the implementation in-line with what javadoc said regarding diacritical signs.
add 42c6e55 Renamed 'nameMatches' as 'isHeuristicMatchForName'.
add 9792495 Ported DefaultCylindricalCS, and opportunist javadoc fixes.
add f5616b5 Ported DefaultEllipsoidalCS.
add f0d7876 Consolidation of the way axis properties are validated.
add 092d25c Ported more coordinate system types.
add 32e1a42 Added tests.
add 4cd71de Added empty constructor for JAXB in datum objects. Added some JAXB annotations in the root referencing package.
add 1ce58b1 Consolidation of XMLTestCase as a preparation for adding tests of referencing XML objects. Added some JAXB annotations for referencing objects and fixed the RS_Identifier adapter. Added a partial test case for PrimeMeridian as a proof of concept.
add 5502685 Consolidation of the way we are handling units of measurement in XML (un)marshalling: - Units.valueOf(String) accepts URI with #xpointer(//*[@gml:id='m']) syntax as found in ISO 19115. - Consolidated the parsing of above URI and other syntax in a URIParser internal class. - Remove some unit checks from internal classes, to be moved as checks done by public classes in the hope to produce better error messages in case of wrong or missing units. - Unmarshall and test the [...]
add 2ddd2f3 Added @XmlTransient annotation on classes that are not part of standards.
add 4c4dde5 Added a temporary workaround for avoiding JAXB annotation conflicts while porting Geotk to SIS.
add 13eb9dc Patch by Guilhem Légal needed for allowing two different GML versions to co-exist. We do not yet know if this patch is temporary or if we will be able to find a solution for avoiding code duplication.
add c724ac7 Patch by Guilhem Légal for partial support of temporal objects in GML 3.1 namespace. This is hopefully a temporary hack, until we find a better way to support the evolutions of GML schemas.
add 70bc2df Patch by Guilhem Légal for supporting geometry objects in the GML 3.1 namespace. This is hopefully a temporary patch until we find a better way to support evolution of GML schemas.
add def554e Consolidation before to work on the GML versions problem.
add 04a6293 First draft of namespace URI replacements done at marshalling time.
add 91ed6e2 Allow disabling of namespace replacements.
add 015ba86 Use the encoding specified by the JAXB_ENCODING property.
add 0605b68 Added FilteredStreamReader and modified the other FilterFoo classes in order to have a more uniform pattern.
add 386c2f8 Enable unmarshalling objects from an older GML namespace.
add 19750f8 Modified the semantic of APPLY_NAMESPACES_REPLACEMENTS property: if the boolean value is present, force or disable replacements.
add 65915c1 Remove the JAXB elements for GML 3.1 namespace.
add adec41b Fix JAXB annotation on the identifier, and add tests.
add 2d9935e More intelligent parsing of <gml:identifier> elements.
add b837cdb Bug fix: the flag telling whether XML namespaces should be replaced needs to be copied to (un)marshallers.
add f12ceb7 Adjust the GML version number when the namespace changed (was GML 3.2.1).
add 4db3bb5 Minor consolidation in JAXB annotations, and complete JAXB binding on AbstractIdentifiedObject with capability to (un)marshall more than one name.
add a05f2e6 Slight modification of the policy about xlink:href. By default, write XLink attributes even if the metadata object is not nil. The XLink is then for informative purpose. This change is made on the assumption that this behavior will be less surprising for the users than omission of the metadata object from the XML output.
add 8ada053 Allow ReferenceResolver to check for empty metadata.
add 1555ce6 Reorganized the metadata XML (un)marshalling tests in order to put them closer to the implementation classes used for the tests. The initial intend of previous layout was to keep together the XML tests. However this appears to be confusing (the test classes were not directly related to any SIS implementation classes) and not always practical since XML bindings with JAXB are sometime closely related to package-privated methods. The sis-referencing module was testing XML c [...]
add 840dfb4 Minor bug fix in the information that are reported in case of test failure.
add dad9aab Uses shorts intead than integers for resource keys. This is sufficient and avoid to fill the constants pool in ".class" files.
add a7fe8ae Marshal country codes using the 2-letters code instead than the 3-letters ones (SIS-153), and consolidation of the way we handle language codes.
add 22a1c47 PT_Locale.unmarshall(...) shall use language and country codes together when building the Locale.
add b5a0c6f When a warning occurs at (un)marshalling time, leave the 'source' argument to null for now. The previous attempt to provide a non-null value added more complexity than initially though, and we had no consistent value. In a future version, the Marshaller or Unmarshaller instance may be a more appropriate argument than what we had - but for now we wait to see a need for that.
add 0d51e88 Revert the 'parse' method name change in Locales. The 'parseLanguage' was not really better, because it gave the impression that the method does not parse country and variant codes.
add 10cf6d2 Added tests and more consistent references to http://schemas.opengis.net/iso/19139/20070417/resources/
add 2730649 Parsing of dates need to take in account the XML.TIMEZONE value (patch by Guilhem Legal).
add e44251f More efficient replacement of ISO3 codes by ISO2 ones (avoid linear scan on all Locales).
add 515eb9f Leverage more of the new JDK7 capabilities for parsing Locale.
add 5d34562 Added a test for IETF BCP 47 language tag string parsing.
add 05bdece Added tests.
add 45e1f1f Format gml:id in a way closer to the epsg-registry practice.
add 3031953 - Moved URIParser.xpointer to its own XPaths internal class. - Renamed URIParser as DefinitionURI, which describe better what this object is about. - Replaced the annotation on AbstractIdentifiedObject.identifiers by a pair of getter/setter methods, in order to get more control on the URN to be marshalled.
add 7002bc2 AbstractIdentifiedObject.getIdentifier() now build a URN in OGC namespace.
add bb63e64 Minor refactoring of <gml:identifier> support. This provides slightly better division of tasks and avoid creation of an intermediate object.
add 3ae2f8d Removed Decorator annotation, which probably doesn't worth is weight (SIS-88). This annotation was used for documentation purpose only.
add 6344438 Minor javadoc improvement.
add a2b8202 Remove synchronization on XLink, since org.apache.sis.metadata.iso object are not synchronized anymore.
add 991e9b5 Removed 2 erroneous @ThreadSafe annotations.
add c337d08 Replaced the @ThreadSafe annotation by javadoc, in order to explain better the context or conditions (if any) for thread-safety to hold (SIS-156).
add d293c8c Replaced the @Immutable annotation by javadoc, because the classes were immutable only under some conditions (SIS-156).
add c6f7606 Minor javadoc formatting.
add 58bd111 Make CodeListSet tolerant to empty 'codeListValue' attribute at unmarshalling time (SIS-157). A warning message will be emitted.
add 296f325 Removed redundant 'if (element == null)' check.
add 089ce83 Exclude org.apache.sis.util.resources package from javadoc. Generate only aggregated javadoc, without per-module javadoc, for avoiding a build failure in sis-build-helper and also for reducing disk usage consumption and possible confusion caused by all the duplicated HTML pages. Note that we may need to define a profile for releases, since the later require per-module javadoc (we will revisit this issue during the next Apache SIS release).
add be1b454 Update the RAT plugin, and filter the amount of reports produced by Maven. We omit reports on the plugins used for the build, which are considered build implementation details.
add 8fb298d Added a "stop jetty" execution after tests in the hope to improve build stability.
add d18380d Added tests for DefaultGeodeticDatum XML (un)marshalling, and fixed some bugs discovered in this process.
add 4351980 Maven web site update: list modules explicitely, because links in Jenkins are broken (SIS-112).
add c9fd41f Compliant (un)marshalling of realizationEpoch.
add d1d29ea Added a few missing javadoc overview.html.
add 1450f3d Added test for VerticalDatum unmarshalling.
add 5c138bd Added JAXB adapters for coordinate systems.
add 702bc65 Minor API adjustment: - BursaWolfParameters.targetDatum is optional - Formatter.setInvalidWKT(...) accept IdentifiedObject or Class argument.
add f69b924 Isolate the hack related to WKT 1 parsing/formatting to a separated class (namely "Legacy").
add b1a0be6 Need more accuracy when formatting numeric parameter values in WKT: do not round if the trailing fraction digits are not likely to be rounding errors.
add b5079dc Bug fix: equals(Object) shall not use the "cached hash code check" optimization for any comparison mode other than strict.
add 60369f1 Replaced AbstractIdentifiedObject.hashCode(...) by a simpler computeHashCode(), because the previous approach did not worked well for caching hash code values.
add af988fb Added a serialization test for NamedIdentifier.
add 690a306 - getPositionVectorTransformation was assigning the 'tZ' value to the wrong matrix element. - toString() should prefer Unicode identifier (opportunist consolidation of CharSequences in this process).
add 809d27f Added tests.
add 1e8c011 Added package JAXB annotations for coordinate systems.
add 8d6d65f Added package JAXB annotations for coordinate systems (forgot to apply "svn add" before previous commit).
add fc65739 Consolidate XML tests and first draft of an DefaultEllipsoidalCS test.
add 06886bc Completed unmarshalling test for DefaultEllipsoidalCS.
add b5bcc39 Replaced accidental nobreak spaces by ordinary spaces. Changes appear only in comments.
add d707fb4 Completed the JAXB annotations for datum.
add cecfedd Added missing JAXB annotations for DefaultCoordinateSystemAxis, and marshal its "uom" attribute in the same way than <gml:MeasureType>.
add 732b9e5 Removed a temporary hack which is not needed anymore.
add f68e965 Added WKT formatting of matrix parameters.
add e76e69c More reliable comparison of geodetic objects, which need to check more carefully about their type.
add 1e1edb0 Consolidate the styling of Maven web site.
add b8a7bac Misplaced file.
add 7fcbfeb Test classes shall use strict math.
add 956ff54 Complete JAXB annotations in the Coordinate System package and add tests.
add dd6c4f2 Added safety checks against accidental changes of immutable objects.
add 6e614e1 Ported AbstractCRS.
add 55d1c24 Omit a javadoc {@link} more distractive than useful, and added some javadoc to AbstractCRS.
add ebbf1d2 Ported AbstractSingleCRS.
add 0a20123 Retrofit the AbstractSingleCRS subclass in its AbstractCRS parent class in an effort to simplify our class hierarchy. This is based on Geotk experience where it appears that the distinction between SingleCRS and "general CRS" is useful in interfaces, but not necessary in the implementation classes.
add 850336e Ported DefaultCompoundCRS.
add be6b5a6 Ported DefaultVerticalCRS.
add f9365ce Ported DefaultTemporalCRS.
add 2f9c652 Minor refactoring: define the datum field in subclasses instead than in the AbstractCRS parent class.
add 2ae11ea Ported DefaultImageCRS.
add afd6cc0 Minor javadoc formatting.
add 45e67cb Added missing adapter for allowing <gml:verticalCRS> inside ISO 19139 metadata, and added tests.
add 15935e9 Enable test of 'gml:id' value.
add a367c4f Fixed wrong package names in {@link} javadoc tag.
add 5891d47 Minor javadoc clarifications.
add 069b0be Trivial renaming of local variables for more consistency.
add 0c00018 Ported EngineeringCRS.
add 99bf088 Added partial GML 3.1 tests, and a note about our incomplete support of GML 3.1.1 (SIS-160).
add 0d8611b Minor javadoc formatting.
add e65ea44 Ported DefaultGeographicCRS and DefaultGeocentricCRS.
add 4ad469b Added tests for DefaultGeodeticCRS.
add 9a6e638 Added a note in javadoc about immutability and thread-safety.
add 32197e7 First draft of a GeodeticObjects.geographic() method.
add e7854c3 AbstractIdentifier.getNames() collection should be live, because JAXB implementation writes directly in that collection at unmarshalling time.
add de3a7b1 Missing file for the previous commit.
add c91abca Removed the AbstractIdentifiedObject.setNames(Collection<ReferenceIdentifier>) because whether that method was invoked or not was JAXB-implementation dependent. Instead design AbstractIdentifiedObject in a way that should work the same on all supported JDK versions.
add 59eb579 Initial proposal of an AxesConvention enumeration.
add 25ade25 Trivial javadoc clarification.
add ec42633 Javadoc.
add 1f1940a Initial port of ComparableAxisWrapper, and try to make AxisDirections utility methods more 3D-aware.
add 2a67779 Javadoc.
add cb49ce4 Modify CoordinateSystems.angle(...) API in order to let user know when the angle sign give no indication about whether the coordinate system is right-handed or left-handed, and clarify javadoc.
add b0fbc01 More conservative check for perpendicular axis: accept grid coordinate systems.
add 839b1c9 First draft of AxesConvention.RIGHT_HANDED support.
add 4a52bfa Implemented AbstractCS.castOrCopy and added documentation.
add be26ab5 First draft of an AbstractCS.forUnits(...) method.
add b6384e6 Moved AbstractCS.forUnit(...) to the internal implementation of AxesConvention.NORMALIZED. If we want to provide the functionality of 'forUnit' in public API in a future SIS version, we will be better to do that in an ReferencingObjectBuilder class instead.
add ee87206 Implements the AxesConversion.POSITIVE_RANGE case.
add 21a0fe0 Override AbstractCS.forConvention(...) in each subclass in order to ensure correct return type.
add 924d4a1 Initial support of AbstractCRS.forConvention(...).
add fa42b14 Added overridden methods and a test case for AbstractCRS.forConvention(...).
add 16b8abf Added GeodeticObjects.normalizedGeographic() method.
add f4bc63d Enable the tests that were ignored because of the lack of "CRS:84".
add 05d654c Provide a partial implementation of CRS.forCode(String).
add f7a42b0 Implemented DefaultCompoundCRS.forConvention(...).
add 0518f7b Missing check.
add 3c10f3d Javadoc and minor code tuning.
add c835937 Added crs() implementation for vertical and temporal enums.
add a7fd02c Added tests.
add 0f39bc0 Better names for vertical CRS.
add 3a96ff2 Added tests.
add 7478e5c Javadoc fixes.
add ac7b8b1 Added more tests.
add 4c2f7b5 More tests.
add 98bd2d8 Provide Extent information for world-wide CRS.
add 0e1ab45 Modification in axis comparison: when comparing in "ignore metadata" mode, ranges of values are not ignored if the range meaning is "wraparound".
add 2aac846 Added GeodeticObjects.geocentric() method.
add 79b5fc8 Renamed GeodeticObjects as CommonCRS.
add 724175d Added CommonCRS.geographic3D() method.
add 93e9451 Added test.
add a7cd49e Upgraded NetCDF dependency.
add e718b48 Documentation clarification, fixed EPSG codes for geographic 3D CRS and added tests.
add 1826e07 Modified some javadoc in order to said whether we are talking about WKT 1 or WKT 2.
add 2a2b4ee More javadoc clarifications about whether we are talking about WKT 1 or WKT 2.
add 8b89c51 Refactored and simplified the Convention enum in light of the upcomming WKT 2 standard. Partia port of WKTFormat.
add 7b346a5 More refactoring for taking in account the WKT 2 format.
add 0ce914f Tuned the API for setting paired brackets and code symbols, and use it in tests for more redeable String constants.
add 33b4600 Port of CRS.isHorizontal, CRS.getProjectedCRS, CRS.getVerticalCRS and CRS.getTemporalCRS methods.
add 166ad1a Renamed 'getFooCRS()' as 'getFooComponent()' and completed javadoc.
add 580f712 Javadoc and more complete implementation of CRS.getHorizontalComponent.
add cfa0365 Added a check in the GeneralEnvelope class for range validity, and added JUnit tests.
add cd8a460 Minor resources (typographic quotes) and javadoc (examples formatting).
add 80dad87 Fixed an ArrayIndexOutOfBoundsException and added tests.
add c9f2cab Removed the text about "Apache SIS extensions to WKT 2", because it appears that latest ISO 19162 draft now support DerivedCRS.
add ee86895 Switch to GeoAPI-SNAPSHOT on the development branch, for synchronizing the WKT2 work. This applies only to the SIS development branches - trunk will stay on GeoAPI 3.0 official release.
add 9b73a81 Remove the 'PENDING_NEXT_GEOAPI_RELEASE' flag from the development branch. This flag will need to stay on trunk.
add 12654cc WKT formatter needs to double the quote character if it appears inside the quoted text.
add 6799a23 Removed unnecessary ObjectStreamException from the method signature. Despite the Serializable interface mentioning this exception, it is omitted in the JDK code itself when not needed. Even the JDK public API sometime force us to use an other exception type (e.g. java.text.Format.Field).
add f5545f9 Fixed GeoAPI version in documentation.
add 8eb6002 Define WKTFormat as a subclass of CompoundFormat, in order to give control on the creation of the NumberFormat or DateFormat to be used for the WKT values.
add 04ed0e8 Remove internal 'Immutable' subclasses. Make Colors and Symbols cloneable instead.
add 99c080b Enable a previously ignored test.
add 80fb5ac WKT2 formatting support for SCOPE, AREA, BBOX and REMARKS.
add a72b6d9 Initial support of VERTICALEXTENT.
add 135c26d Initial support of WKT2 UNIT[...] elements.
add 1a1a65a Switched the tests to stricter WKT2, and minor javadoc fixes.
add a694a77 Syntax colors for SCOPE, EXTENT and REMARKS elements.
add 490c9ab REMARKS element not allowed in WKT 1.
add cab8d97 Partial support of TIMEEXTENT element. Non-supported aspects are documented in SIS-163.
add c6e4747 VERTICALEXTENT shall apply rounding toward floor and ceil as appropriate.
add db32ee8 Initial implementation of ID[...], except for the URI inner element.
add 675dd25 Moved org.apache.sis.io.wkt from the sis-referencing module to the sis-metadata one, in order to allow us to use it with identifiers. This is because the WKT 2 syntax is slightly more complex than the WKT 1, so it may be worth to define ImmutableObject as a FormattableObject subclass for letting it do its job itself.
add a90ec96 Moved mocks to the modules that use them.
add f776edc Trivial javadoc uniformization.
add 772851a Moved some Formatter code to the appropriate FormattableObject subclasses, in order to reduce the size of Formatter.
add 9b291b1 Simplification attempt of Formatter: remove the GeneralParameterValue special case (this case will be handled by the 'formatTo' method of implementation class) and remove 'getName(IdentifiedObject)' (case now handled by implementation class).
add 4e39dd2 Moved 'getName' private method back to its original location. This has been made possible by the previous commit on WKT Formatter.
add dd6494e Minor javadoc.
add c57a94c Initial port of 2 basic map projection parameter classes. While not really in the scope of SIS 0.4 RC, we need those classes in order to move GeneralParameterValue WKT formatting code out of the Formatter class.
add 79c3598 DefaultParameterValue cleaning.
add c331ba5 Ported AbstractParameterDescriptor.
add 389a3e2 Ported DefaultParameterDescriptor.
add ea965cf Added tests.
add b1b6cf0 Ported more tests.
add c8ec255 Moved a ParameterDescriptor test which was actually a ParameterValue test.
add f7d67bb DefaultParameterDescriptor.equals was not comparing 'valueClass'. Also clarified javadoc.
add 1fba8f0 Moved some explicit DefaultParameterDescriptor arguments to the properties map. Javadoc clarification, and modification in the stylesheet for matching the most common usage.
add aa2eb1a Minor javadoc formatting problems.
add 550c128 Move axis minimum and maximum values in the property map for consistency with the policy adopted in the rest of SIS regarding ignorable / non-ignorable metadata. This is also consistent with the factory method in GeoAPI.
add 88631eb Added an implementation note related to previous commit.
add a970170 Simplification: removed an abstract base class which doesn't implement enough services. Various javadoc fixes.
add 2a8abd4 Simplification: removed an other abstract class which was not so helpful.
add 92d3fcf Simplification: try to be less surprising to the users: - Getter methods clone the returned array, like what many libraries do. - If no value (i.e. setValue(null) is invoked), unconditionally use the default value. Do not check anymore if the parameter is mandatory or optional.
add 74cdf5d Implemented WKT in DefaultParameterValue.
add 21b2205 WKT2 formatting: - Completed ID[...] with the URI[...] inner element. - Formatter provides information about the enclosing element (necessary for the above URI[...]). - Consolidation of Formatter.getLinearUnit()/getAngularUnit() in a single getContextualUnit(...). - Explicit requests for new lines instead of trying to guess automatically - the later was too convolved. - Javadoc.
add 632348b Simplified the check for whether we need to add a separator before the next element. Javadoc fixes.
add 0d88eed ISO 19162 compliance: there is restrictions on the places where SCOPE, AREA, REMARKS, etc. can appear.
add 2dffd5d Tuned WKT formatting of UNIT elements.
add af7c0b1 ISO 19162 requires use to consider negative conversion factors as invalid.
add 75a52fa Partial support of WKT2 CS element.
add cd44f8d Javadoc update, and check for compliance of WKT CS element.
add 7870b85 Partial support of WKT2 formatting of AXIS elements.
add cf30851 Added check for coordinate system validity, more conformant code list, and documentation fixes.
add c487001 WKT: switch to camel case for easier reading of keyword made by combination of two words (e.g. TIMEEXTENT -> TimeExtent, BASEGEODCRS -> BaseGeodCRS). Provide a KeywordCase enum for letting the user choose his preference.
add d36333c WKT bug fix: the citation element inside ID[...] needs to be wrapped inside a CITATION[...] element.
add bbb8ddf Added formatting of MERIDIAN[...] element inside the AXIS[...] one.
add 19d70ad Added formatting of UNIT[...] element inside AXIS[...]. This requires knowledge about whether the enclosing CRS has specified a CS-wide unit.
add a21fa19 WKT2: initial support of GeodeticCRS formatting, except for its datum.
add 1ffadb1 Minor adjustment to GeodeticCRS WKT formatting.
add 3fccda9 WKT 2 formatting for DefaultEllipsoid.
add 04e319a WKT 2 formatting for DefaultPrimeMeridian.
add 8213541 - Format "Anchor" element for all Datum. - Documentation fixes in "@return The WKT element name, which is..." descriptions.
add 1223781 WKT 2 keywords for VerticalCRS and EngineeringCRS.
add dc96d19 Implemented WKT 2 for ImageCRS and TemporalCRS.
add 4a36a36 Javadoc, and add units in WKT 2 formatting of parameters.
add b5a179e Minor javadoc formatting.
add 6a2705c GeocentricCRS and GeographicCRS now share their WKT formatting code.
add d043dc6 WKT 2 formatting for other CRS that inherit the AbstractCRS default implementation.
add 18d80d3 Modified the Formatter.setContextualUnit method in a way that allow us to set the unit even when we do not know the quantity type. Miscallaneous correction in javadoc and added/moved tests.
add e4b9817 Added test for GeocentricCRS WKT 2 formatting.
add 7b1ca6a WKT 2 formatting of CompoundCRS.
add d9838b0 Fix indentation of PrimeMeridian and Axis in WKT 2 formatting. assertMultilineEquals(...) does not ignore anymore the leading spaces (i.e. the indentation). Fix tests accordingly.
add c2566d2 Renamed Convention.versionOfWKT() as majorVersion(). Removed Convention.getNameAuthority() from public API.
add 6b667d8 Attempt to fix reported performance issues in logging: - Use a single monitor instead of two. - Cache MessageFormat and use the existing StringBuffer.
add 43e2392 Fixed javadoc warnings.
add a142954 Look at the type explicitely declared by GeoAPI in order to determine if we shall check for the "Abstract" or "Default" prefix in the implementation class name.
add 54a8219 Be more specific in the choice of 'castOrCopy' static method to invoke depending on the object type. This is necessary for avoiding never-ending loop if the user choose to implement both CoordinateSystem and CoordinateReferenceSystem interfaces in the same object.
add 57515d0 Minor javadoc: override getDatum() in order to show it at the right position in subclass javadoc.
add b01d469 Faster surefire-report, and disable UCAR repository when searching snapshots.
add 76c3db8 New attempt to declare the UCAR repository only in the NetCDF module, since a few experiments with Maven 3.1.1 suggests that the exception previously seen with Maven 3.0.4 has been fixed.
add 4dd092e Needs a more recent maven-site-plugin for fixing the NoClassDefFoundError during site generation.
add b7065d6 Try to upgrade more Maven plugins in case it would help avoid exceptions reported by the Jenkins server.
add e9a10b5 Version numbers must match the ones declared in the pom.xml file.
add d740d52 Choice of WKT 1 keyword needs to be performed by GeodeticCRS, not by subclasses.
add dfa0dab Removed the @website taglet, because the Maven generated site is not the SIS main web site. The javadoc to be released should not contain links to the Jenkins builds.
add eb4d413 Remove the site/apt/index.apt files that do not provide any useful information, or APT files that repeat the information existing in the package-info.java file.
add b0aa8b6 Javadoc simplification: replace some custom {@note} tags by CSS. Advantages: * Easier to maintain since editing the CSS produces immediate result (no need to recompile plugin and javadoc). * More control on the title ("Note", "API note", "Implementation note", "Note for implementors", "Compatibility note", etc). * Allows to use {@link}, {@code} and other usual javadoc tags. * Better rendering in IDE help window.
add 9282ff4 Complete the replacement of {@note} and {@example} custom taglets by CSS.
add 943619b Maven web site simplification: use a single site.xml configuration for all modules, and remove API pages that we do not plan to maintain.
add f3e84d7 Maven site: menus need to be inherited.
add 90bf334 There is no module javadoc.
add 1ce9ae6 Maven site simplification: remove CSS customization in all sub-modules (note: this is unrelated to Javadoc CSS). Keep CSS customization only in the root (because easy to define and less intrusive than CSS in sub-modules). Rely on Maven default for all sub-modules. This allows us to remove '<module>/src/site/resources/css/site.css' symbolik links from all modules. Most of the time this change allows us to remove the whole 'site' directory. We make this change because Mave [...]
add d5a20de Missing dependency for test executions.
add 2f5dcf7 Initial draft of support classes for DefaultFeature.
add f1c2244 Change in DefaultParameterDescriptor implementation: replace the minValue, maxValue and unit properties by a Range property. The Range objects contain information about whether the bounds are inclusive or exclusive. This change also simplify a little bit the DefaultParameterDescriptor implementation.
add f44f5af Added a test case.
add c6cc20e Added a test.
add fd23ead Bug fix in validation of ParameterValue of type double[].
add 04f32ee Added a ParameterDescriptor builder in the hope to make the task easier. Provided an example in javadoc for "Mercator (variant A)" projection.
add 73d749c Renamed some 'DescriptorBuilder' methods and added new methods for metadata properties.
add c0fd88d Clarification of GenericName <-> ReferenceIdentifier mapping. Attempt to simplify DescriptorBuilder with an API which handle "name" and "aliases" as just "names", like GML does.
add 4230959 Refactored the builder: moved all identification information (i.e. properties related to IdentifiedObject) to a new super class, to be shared by the Datum, CS and CRS builder to be provided in a future SIS version. Renamed the remaining of DescriptorBuilder as ParameterBuilder for clarity.
add 21b9028 Added more tests.
add 4936012 Continue Feature work: complete DefaultFeatureType based on the DefaultParameterDescriptor experience. Despite the API being intentionally similar, there is no relationship between those two classes because they are different concepts.
add 03536cb Added an example in Builder javadoc, minor other javadoc fixes and tests.
add 408196f Use the Map approach in AbstractIdentifiedType for allowing extension with new properties in the future. This is the same approach than AbstractIdentifiedObject. We will provide a builder in next SIS version for making construction easier, similar to the ParameterBuilder we just experimented.
add 64d5698 Change in method name policy in Builder class: explict "add" and "set" verb for differentiating the methods that overwrite the previoius values from the properties that accepts multi-values.
add fa3ac63 First draft of a DefaultFeatureType implementation containing the attributes.
add 97c7fcb Initial port of parameter groups, to be used as inspiration for DefaultFeature and DefaultFeatureType implementations.
add 2d16b5b Fixed javadoc sentence.
add 06dc7f2 Initial port of DefaultParameterDescriptorGroup together with a few tests.
add 451712c Improve implementation of parameter groups.
add c94c779 Added tests.
add b7957af Added tests and javadoc.
add 5abe3b5 Implemented the clear() method and added javadoc.
add 97df748 Initial port of ParameterFormat (in order to implement ParameterDescriptorGroup formatting), and partial cleaning (not yet completed).
add 1daa653 Added a debugging tool.
add 3b1b9b6 Complete the cleaning of ParameterFormat. We still have to add some more tests.
add 3c439c6 Complete the support of ParameterFormat.setPreferredCodespaces(String...).
add e7509a9 ParameterGroup.toString() now delegate to ParameterFormat.
add 0078c77 Provides a pseudo-WKT for parameter descriptors, for compliance with AbstractIdentifiedObject contract.
add 6e2ab8f Initial port (incomplete) of matrix parameters support.
add 7762131 Wrong names in OGC parameter names for False Easting / False Northing.
add 6c29377 Missing datum detection when SIS is used with non-SIS implementations.
add cad150d ParameterFormat should include a column about parameter obligation (mandatory / optional).
add 103d350 Renamed MatrixParameters as TensorParameters, which describe better what the class is.
add 4b9c766 TensorParameters API tuning.
add 9ab46fd Completed TensorParameters. Still need more tests.
add 872d1ae Added package info documentation.
add c5356a0 Updated the copyright year from 2013 to 2014.
add 6b1c6f8 Minor javadoc fixes.
add c34f3e2 Upgraded maven-surefire plugin.
add 58c7d07 Javadoc.
add 3dcaaee Added tests.
add 215b1f1 Minor javadoc.
add 7af8e06 Partial revert of LatLonPointRadius to its state before we made it a GeneralDirectPosition subclass. I wrongly interpreted 'radius' as the radius from Earth center, while it was the radius around the circle center. Note that this class may be refactored as a geometric object in a future SIS version.
add 18e1b5d Added a 'crs' sub-command, bug fix in colorized formatting, and javadoc.
add 0f762a1 Omit unecessary class name in static method calls.
add 079ea72 Moved LatLonPointRadius to the same package than DistanceUtils (for now - pending refactoring as a geometry class), as suggested on the mailing list.
add 928abe5 Update the URL to the NetCDF Attribute Convention for Dataset Discovery web page. Link provided by David Neufeld on the mailing list.
add 8107893 Added AbstratEnvelope.contains and intersects method expecting only an Envelope argument, without boolean. Those convenience methods cover the vast majority of cases, and are added in anticipation to SIS-172. The intend is to reduce the risk that a fix for SIS-172 would be an API break.
add 33ee363 Added a warning in javadoc of contains(Envelope, boolean) and intersects(Envelope, boolean) methods that their API may change (see SIS-172 for this issue). Users are advised to use contains(Envelope) and intersects(Envelope) instead for API stability.
add b5f4dd9 Remove the CHANGES file because not unmaintained. This file still exists on the branches and tags prior to SIS 0.4. Update the copyright year in the README file.
add 2b80a19 Trivial javadoc formatting fix.
add 4180184 Minor corrections related to the release process.
add ed2d345 Add explicit resources for English locale, even if they just inherit all their resources from the default locale, in order to allow the "--locale en" option to work on non-English systems.
add cf9956c Upgrade for NetBeans 8.0 (optional).
add f8e9d6f sis-build-helper inherits from the root pom.xml instead of core/pom.xml. This avoid a cyclic dependency reported by Maven 3.2.
add 93f8313 Upgrade the parent pom.xml version.
add 01596f7 Prepare for next development cycle: update version number.
add 21de11a Minor corrections.
add 2292d58 Cleaning for new development cycle: remove deprecated methods.
add 7136697 Change artefact versions from JDK 7 to JDK 8.
add d3c9212 Updated NetBeans project.
add 3d5e619 Workaround the removal of ConfigurationImpl.getInstance() method in JDK8.
add 2f4156c Fixed compilation errors.
add 908cade JDK8 javac needs this transitive dependency at compile-time.
add 37f4e89 First round of replacement of JDK7 placeholders by JDK8 API.
add 51d4bd2 Replaced masks by calls to JDK 8 "toUnsignedInt" methods for readability.
add fd60152 Use version 0.4 of the sis-build-helper plugin for better stability on Jenkins.
add 98b4010 Update for JDK8 changes: Logger.logrb(..., String bundleName, ...) deprecated in favor of logrb(..., ResourceBundle bundle, ...).
add 9d20736 First draft of a DOAP for SIS.
add 6124832 Add ISO 19162 to the list of (partially for now) implemented standards.
add a494f4b Added browse link for Git mirror.
add 2d1e83c Complete missing information.
add 1873a07 Resolved a few warnings.
add 00e5a86 Move the "date string to ISO 8601" method to the NetCDF module, because it was used only in the context of NetCDF file. This move will make easier to replace the JDK8 methods by java.util.time formatter.
add 41d64ac Replace the JDK8 placeholder by use of java.time package.
add 0c2fee7 Added <caption> elements or summary attribute in HTML tag, because they are now required by JDK8 javadoc tool.
add 3f7854a Fixed other JDK8 javadoc warnings.
add 64e0fc3 More JDK8 warning fixes.
add 2646ceb Fixed more JDK8 javadoc warnings.
add 2c39510 The "initialize" phase for the "reserve-network-port" goal was too aggressive: it trigged network port reservation even for simple tasks like "compile" or "javadoc". Use "pre-integration-test" phase instead. One possible issue is that the "start-jetty" task also uses the "pre-integration-test" phase but need to be executed only after the port reservation. A quick test suggested that tasks in the same phase are executed in declaration order. We hope that this assumption i [...]
add bf5bb62 Fixed wrong @link references.
add 4ca3519 Fixed more javadoc errors identified by JDK 8.
add a70c4c5 Moved the javadoc configuration from <reporting> to <build>. The intend is to generate javadoc with "mvn javadoc:aggregate" instead of "mvn site".
add a52f7a2 Change in the approach: do not ignore anymore javadoc build failure. Instead reduce the amount of checks. We make this change because the previous approach were leaving temporary files in the javadoc directory. The inconvenient is that we lost warnings about invalid HTML or references.
add 3c0cffa Update the SIS Javadoc stylesheet for JDK8. In this commit, we also modify the way stylesheet is provided: instead than overwriting the standard stylesheet with our own, we keep the standard stylesheet and provide a separated file which overwrite only the part that we need. This protect us from future stylesheet change in the JDK (there is some changes from JDK 7 to JDK 8) and also avoid the licensing issue of commiting a file derived from the Oracle file on the SVN. The [...]
add e762b49 Removal of all Maven APT pages except the root one, since we do not generate Maven site anymore. The APT content moved to Javadoc or to SIS web site.
add 8d01823 Added a README file for helping peoples to find the source code.
add 1533cac JDK8-specific: use the new .BYTES constants where appropriate.
add d4ac5d2 A (buffer, channel) pair similar to ChannelDataInput, but for write operations (contribution by Rémi Maréchal). This will be needed for adding write capability to our data stores (Shapefile, NetCDF, GeoTIFF, etc.).
add 49cf135 Factor the common parts between ChannelDataInput and ChannelDataOutput.
add de4a74a Move more common code to the ChannelData parent class.
add 2e2407d Share common test code.
add bcc726e Added 'writeBits' method.
add 7dc3d30 Renamed static constants.
add 5f1e19c Added more tests (contribution by Rémi Maréchal).
add 4d8c266 More tests. We have an issue with the getStreamPosition() when writing individual bits, which will need more investigation.
add 93284b9 Fixed ChannelDataOutput.getStreamPosition().
add 5c9af2f More tests, especially regarding mark/reset operations.
add 5cd3bbd More tests.
add aa972e0 Minor post-merge cleanup.
add 7473940 Upgraded the NetCDF version.
add 1901819 More tests when seeking ahead in the output stream.
add 565e556 Test a code path for non-seekable channel.
add 5ef76b7 Bug fix: can not seek in the area between buffer limit and capacity.
add feba6dc First version of support classes for DefaultFeature.
add 824d5e2 Starting application of DefaultFeature changes proposed by email on February 24th: Replaced getRecord() et setRecord(Map) methods by getAttributeValue(String) and setAttributeValue(String, Object).
add 2745278 Complete the DefaultFeature changes proposed on February 24th. It is not yet a complete Feature class, but should have enough for Shapefile reader needs for now.
add 96a7930 Added tests and package javadoc.
add 7d50f83 Added an @include taglet for allowing us to reference MathML formulas in an external file. Note that the Javadoc team in OpenJDK is also considered to add an @include javadoc tag, but we do not know if and when this may happen. This commit allow us to get this functionality in the mean time. This is needed in order to workaround the javadoc tools in JDK 8 which does not accept unknown HTML tags.
add 81163a8 Added tests for units of measurement.
add 1d0ee66 Enable javac and javadoc HTML checks. This implies: - Moving MathML formulas in a separated file - Avoid using the <s> tag in CommonCRS - Fix misplaced <p> tags in NetCDF AttributeNames
add ecfb095 Attempt to fix encoding issue when viewing from a web browser.
add cbaf62f Created an initially empty sis-javafx module for Google Summer of Code development.
add 76aa658 Minor JDK 8 specific change: inherit Iterator.remove() implementation when appropriate.
add f795b57 Initial draft of SingletonValue, to be used under the hood by DefaultFeature implementation.
add a023fae Removed the @scmUrl taglet, since JDK 8 does not accept tags inside <a href="..."> element.
add 5f7ef03 Added more Feature tests.
add 7a860af Initial support of Attribute in Feature, for now only in the case of [0...1] cardinality. This cover the vast majority of cases and is handled in a special way for lower memory consumption. We still need to implement the multi-values case (cardinality [0...n]) and add test and documentation.
add fe80fba Fix broken links in javadoc.
add aa600a6 More documentation.
add 504f523 Added more verifications of attribute validity.
add dc029bb Fixed a hole in type checking: need to wrap subList. Note that this is only a partial fix since it does not protect agaisnt null value. Furthermore, other holes still exists (e.g. in listIterator()). We are only performing the checks on a "best effort" basis.
add 3ab27f6 Replaced the 'NumberRange<Integer>' cardinality by a pair of minimum/maximumOccurs as int. This is an anticipation for the GeoAPI interface which would not know about the Range type, and also for performance reason since the maximumOccurs appear to be requested often.
add de18bdd Renamed SingletonValue as PropertySingleton (previous name was confusing, because we make a distinction between property and value), and provide an initial draft of PropertyList.
add cdb7df6 Attempt to simplify the feature model. The ISO 19109 specification said that attributes may have a [0 ... n] cardinality, but does not said how multi-occurrences should be represented. There is 2 ways to represent an occurrence of n attributes:
add 4a6077d Removal of the PropertyList class, since the approach allowing a [0 ... n] cardinality for Attribute instance has been abandoned (see comment in commit 1593149 for more details). The case of PropertySingleton still needs to be re-evaluated.
add cd8c6b0 Consolidation: add package-internal class as place-holders for GeoAPI interfaces not yet standardized. The intend is to allow us to write the code in a way that anticipate the fact that Attributes will not be the only kind of Properties in a Feature (other properties will be Associations and Operations).
add afb02b3 Added AssociationRole and Operation (derived from ISO 19109). We are not yet sure about what will be the final version of those types, but we are better to add them now in order to allow our code to take them in account.
add bb6f267 Added DefaultAssociation as a complement of DefaultAssociationRole, so we have the complete set of expected java classes. The intend is to help to take those properties in account while working on DefaultFeature internal.
add 80f4008 Added basic tests for Feature Associations.
add da129bf More efficient implementation of DefaultFeatureType.isAssignableFrom. Document the fact that the check is based of type name only.
add 30a89a1 Trivial formatting.
add 111490c FeatureType.isAssignableFrom(FeatureType) needs to be safe. While in theory checking the name should be sufficient, in practice we may have FeatureType of the same name (even if the name is scoped) but different properties. So we will also check the property names and types.
add 200154a Use IllegalArgumentException instead than planing to add an IllegalAttributeException. If we want a more specific exception, we will define it in SIS rather than GeoAPI.
add 01755ca 'validate()' method now return a DataQuality report instead than throwing an exception when a property does not met the constraints.
add e3dcda3 Moved common dependencies to core/pom.xml file.
add 6588e2c Renamed FeatureType.characteristics as FeatureType.properties for conformance with common usage (I'm not sure that ISO 19109 "characteristics" was exactly the same thing, since ISO seems to use "characteristics" in a broader sense than "properties"). Also provide better check about whether a property overrides a property of the super-type, and whether is overriding is legal.
add f7ce34e Added more tests.
add 5a1ca5b Added a multi-inheritance test.
add a2cef71 Avoid javadoc references to items that may not be provided.
add f9db800 Test consolidation.
add 5aa2565 Added a test for a property overriden in the sub-type.
add 8fb9301 Javadoc.
add b6a1211 Added tests for 'toString()' implementation.
add 6bafa4d Renamed 'properties(boolean)' as 'getProperties(boolean)' and 'superTypes()' as 'getSuperTypes()' for consistency with other feature classes, and also for analogy with java.lang.Class.
add e6b1b9d Added a convenience 'getName()' method in Property. The previous GeoAPI model did the same.
add bd00600 Modified PropertySingleton for its new use in DefaultAttribute.getValues() (later method not yet provided).
add 22098f6 Implemented the String representation of Feature in a tabular format.
add 72321b2 Attempt to make DefaultFeature more robust.
add 7671e43 Minor javadoc.
add d9b56b9 Refactored DefaultFeature in two different implementation: DenseFeature and SparseFeature. The intend is to have an efficient storage method in the common case where all attributes are expected to be present (also known as "simple feature").
add f9e3673 Missing test file in previous commit.
add 64c4ff5 Document better the Feature.quality() contract and fix a hole in their implementation. The new implementation can now invoke the user-overridden methods, if any.
add 94cab45 More tests.
add 17eaeaa Added tests.
add ae94c9a Additional test and bug fix in the evaluation of Feature quality.
add 961a1bb Test the plugin of custom Feature quality evaluation procedures.
add 15ec6bf Trivial javadoc fix.
add f1faca9 Added tests.
add d6c442b Initial support of multi-valued attribute.
add ad59f96 Continue on MultiValuedAttribute support.
add 1aefc97 Renamed an erroneous method name, and added test.
add dde3e31 Added tests related to MultiValuedAttribute.
add 9a28a00 Apply to association the same pattern than for attribute (1/2): renamed DefaultAssociation as AbstractAssociation, and implement as SingletonAssociation.
add bd5bb15 Apply to association the same pattern than for attribute (2/2): added MultiValuedAssociation.
add af7e7f0 Ensure that the feature is not abstract before to instantiate it, and do not use reflection anymore for some clone implementation. The reflection was used for cloning a final field. But given that the classes that used them are not so big, the risk of removing the 'final' keyword may be reasonable.
add bde4602 Added a justification of org.apache.sis.feature internal design.
add 49c1832 Clarifications.
add d7547f8 Retrofiting in GeoAPI step 1: class AbstractIdentifiedType implements IdentifiedType.
add 444df97 Use the GeoAPI PropertyType interface. This is a branch-specific change; the trunk will need to use the current hacks, since those feature interfaces are not part of GeoAPI 3.0 (the will be submitted for next GeoAPI version).
add fda2e1f Use GeoAPI FeatureType interface. Like the previous commit for PropertyType, this is branch-specific.
add b78ff60 First draft of a set of convenience static methods in Names class.
add d07ab16 Renamed FeatureType.getProperties as getPropertyTypes for consistency with getSuperTypes and hopefully for clarity.
add 186f352 Move toGenericNames to DefaultNameFactory, nail down tests to SIS name factory, and add javadoc.
add dca4250 Added tests and documentation for the Names convenience class.
add b1d9095 Forgot this class in the previous commit.
add 55c7ab3 Relax the result type of feature operations from 'AttributeType' to the more generic 'IdentifiedType'. This allow operations to return features.
add 4aec549 Minor javadoc fixes.
add 630ff03 Added a converter for Units. This is needed for some feature operations.
add 0336c03 Removed accidental ID.
add 4ad90ef DefaultFeatureType now implements FeatureType. We had to disable the check against infinite recursivity in 'isAssignableFrom'. The previous check was wrong anyway (we need to compare feature pairs, not only the base feature type). We will implement a new recursivity check later.
add 13c5beb DefaultAssociationRole now implements FeatureAssociationRole.
add 98e1b0c DefaultOperation now implements Operation. This complete the implementation of GeoAPI interfaces derived from ISO 19109. The next step will be to implement GeoAPI interfaces for feature instances (as opposed to feature types).
add cf6496e Omit for now the convenience method without separator argument. Javadoc formatting.
add 51b46e4 Update for a GeoAPI change: the Set returned by ScopeDescription are now Set<CharSequence>.
add 0765b19 Documentation updates.
add ec29899 Implement the GeoAPI Property interface.
add c47a70b AbstractAttribute now implements GeoAPI Attribute interfaces.
add 4f59821 AbstractFeature now implement the GeoAPI Feature interface.
add 1b836c7 AbstractAssociation now implements the GeoAPI FeatureAssociation interface. This was the last SIS class to retrofit in a GeoAPI interface.
add b5c25f1 Remove warnings that do not apply anymore to this branch. Those warnings will stay on trunk however.
add 3f87c32 Javadoc clarification attempt.
add 38ee628 Javadoc: replace the artificial example by an example closer to the URN that we actually deal with in spatial information systems.
add dcdd72a Trivial formatting: replace "// Related to JDK7" or "JDK8" or "GeoAPI" comment by a single "// Branch-dependent imports" line, in order to have a single label and to be more explicit about the purpose of keeping those imports together.
add 8222910 Restrict the FeatureType name from GenericName to TypeName.
add 83778a7 Rollback the restriction of FeatureType name to TypeName. While FeatureAssociationRole.valueType in ISO 19109 was suggesting that FeatureType names were instances of TypeName, the evidence is not strong enough. So we keep GenericName for now as a conservative approach.
add 97a9d2e Back to referencing work: initial port of AbstractMathTransform.
add b1a9c30 Ported some tests.
add 947ad5e Ported AbstractMathTransformTest.
add c89e9c5 Ported ConcatenatedTransform implementations and some of their dependencies.
add 9d0ed0e Ported the code that apply a transformation on a Java2D Shape.
add 1400c81 Packaging change: moved ShapeUtilities in its own package. The purpose is to put in a separated package the internal classes having a dependency toward Java2D, in order to make easier to identify which parts may need to be replaced in a JavaFX application.
add 2219fc4 Initial port of ProjectiveTransform and its dependencies.
add 3cc250b Exclude provider package from javadoc.
add f1fb0ec Javadoc.
add a866439 Maven incremental compilation has results opposed to the expected one.
add 205b386 A little bit of consolidation.
add f173756 Moved AffineTransform2D to the "j2d" internal package, for making clearer its dependency toward Java2D and for allowing reuse by other packages than org.apache.sis.referencing.operation.transform.
add 0fcf806 Completed implementation.
add 95f0886 Ported PassThroughTransform.
add a966736 Minor javadoc formatting fixes.
add 450dd46 Javadoc.
add 2938f98 Ported CopyTransformTest.
add f65ff02 Ported ProjectiveTransformTest.
add 3948e1e Ported LinearTransformTest.
add 8df3217 Ported PassThroughTransformTest.
add ef02e9b Cleaning and port of a first non-linear class.
add 779a0e1 Post-merge cleanup: rearrange import statements in order to isolate the test classes not available in GeoAPI 3.0.
add c612453 Initial port of LogarithmicTransform1D and ExponentialTransform1D. Will need revision - we may simplify LogarithmicTransform1D by fixing the base to 10 or e, which are the majority of cases. Other cases can be handled by concatenating a LinearTransform1D.
add b5bfaeb Consolidation of Exponential / Logarithmic Transform1D.
add 48b0197 Completed and added tests for TransferFunction.
add 19f9772 Simplify LogarithmicTransform1D by removing the explicit support of arbitrary logarithm bases. Instead, for the rare cases where someone wants a base other than e or 10, we concatenate the natural logarithm with a linear transform.
add 3e968da Starting integration of new ISO 19115 classes from Rémi's patches.
add 5a79a7d Declares the new metadata class as an implementation of GeoAPI interfaces.
add 3f52776 Integrated more SIS-94 patches (from Rémi) for update to ISO 19115:2014.
add 43ee628 Deprecate DefaultResponsibleParty, to be replaced by DefaultResponsibility as of ISO 19115:2014.
add dac4b23 Minor bug fix.
add 1bce0c4 Fixed a NullPointerException.
add 9d4274c Upgraded DefaultCoverageDescription to ISO 19115:2014 (SIS-94).
add 887aaf5 Added DefaultMetadataScope (SIS-94).
add bdea32d Javadoc fix.
add bdec879 Renamed LegacyProperties as LegacyPropertyAdapter.
add f0cb610 Javadoc.
add 153c6bc Uncommented the JAXB annotation for the new classes only (not yet for attributes in existing classes).
add efe9720 Applied more patch for upgrading to ISO 19115:2014 (SIS-94).
add f14598a Update for the changes in GeoAPI interfaces for the upgrade to ISO 19114:2014 (SIS-94).
add 1f41796 Ported a test.
add 2c801a6 Missing methods.
add c3f8bef Store the error terms for double-double arithmetic in AffineTransform2D and ProjectiveTransform.
add 4b32b87 Fix a never-ending loop. Opportunist replacement of hard-coded values by constants.
add 826759d Inline the matrix comparison. This is safer since it make more obvious where the infinite recersivity may happen (in the call to Matrices.equals(this, ...)).
add ae53985 Added a (hopefully temporary) tolerance threshold when checking if the result of MathTransform concatenation is the identity transform.
add 7e92ab7 Fixed bug in the number of dimensions of identity transform.
add 5cb0dba Better implementation of DefaultSource.getSourceExtents() in order to avoid an UnsupportedOperationException at unmarshalling time.
add f3b4f33 Needs public access to ImmutableAffineTransform for code to be ported later.
add 5ed246c Conversion from Double to Float needs to be tolerant to the precision lost.
add 0e11401 Added classes from the service package (SIS-94). Fixed an erroneous information in package javadoc.
add 61a5fc7 Side effect of upgrade to ISO 19115:2014: PropertyAccessor shall been able to read/write using deprecated getter/setter methods, while keeping the deprecated methods hidden from the list of standard properties.
add b6e72d2 Document better why we skip deprecated setter methods.
add 6bb846b Slight generalisation.
add e85fc6b Complete a little bit more the support of Record and RecordType (not yet tested). This is needed for support of ISO 19115 metadata - the lack of RecordType support was a problematic hole. However XML (un)marshalling is not yet implemented.
add e4c5626 Merged DefaultRecordFactory with DefaultRecordSchema in the hope to simplify, and added tests.
add 3c7d7af Missing class in previous commit.
add d9bf1d7 Initial DefaultRecord implementation. This commit implied a reorganization of DefaultRecortType internal for making it more convenient to DefaultRecord. We also tried to make implementations Serializable, but DefaultRecordSchema appears to be a blocking point (difficult to make it Serializable in a reliable way).
add 839ae44 Completed DefaultRecord implementation (except for XML (un)marshalling) and added tests.
add 05738a6 DefaultRecord uses array of primitive type when possible.
add b1fa9d6 Upgraded DefaultTelephone and DefaultContact to ISO 19115:2014. Those 2 classes were tricky, because those 2 standards changed the places were multi-occurrences of telephone numbers were managed. Keeping compatibility between both the old and new standards required DefaultTelephone to know about the DefaultContact instance that contains it.
add dfefdf8 Make MD_RestrictionCode tolerant to both "license" and "licence" spelling. The former was used in ISO 19115:2003 while the later is used in ISO 19115:2014. XML document shall continue to use the "license" spelling for now, until ISO/OGC publish the new XML schemas.
add 91e0441 Upgraded more implementation to ISO 19115:2014 (SIS-94), in particular DefaultResponsibleParty which now delegates its work to DefaultResponsibility.
add 598adf4 Added ServiceIdentification implementation.
add 371c808 Missing JAXB adapter for DCPList.
add 947f578 Added test.
add 6cc35e1 Fix the way to search for the test file.
add f86950f Minor vocabulary tuning.
add 57bb611 Upgraded MD_Identification to ISO 19115:2014.
add 61a7b7c Ported the ServiceIdentification test from Geotk, and fixed XML bugs in this process.
add a014a07 Bug fix: enum shall not be marshalled when null.
add 0f74375 Added tests and fixed XML (un)marshallig bugs accordingly.
add 77b2b1e Documentation.
add d9377d8 Added @XmlTransient annotation on classes that can not (in current Apache SIS version) be (un)marshalled directly without the help of a JAXB adapter. The intend is to avoid accidental misuse.
add 727fb90 Moved the GML internal package from sis-metadata to sis-utility, because some GCO objects (e.g. LocalName) have a dependency to it
add bcaa782 Replaced the 'Name' temporary object by a more generic <gml:CodeType>. This allowed us to get support for the 'codeSpace' attribute in NameAdapter.
add 027ae1b Minor simplification.
add d51e751 Update for GeoAPI changes: replaced MD_CharacterSet code list by direct use of java.nio.charset.Charset. The reason for this change is that ISO 19115:2003 defined its own code list for character sets, while ISO 19115:2014 still define an MD_CharacterSetCode but the new definition does not enumerate any element and instead refer to IANA registry (http://www.iana.org/assignments/character-sets/character-sets.xhtml). Consequently there is no need anymore to handle the ISO 1 [...]
add 8174b98 Isolate a branch-dependant import.
add 011aaa7 Fixed a NullPointerException.
add 1d7dc0b Removed developper guide (docbook), since it moved to the main web site as HTML5 page.
add 22a9ee1 Update for GeoAPI changes. Those changes are corrections for various errors in the upgrade to ISO 19115:2014.
add 7d6bc10 Update for GeoAPI changes (more review of upgrade to ISO 19115:2014).
add 267b617 More accurate return type in MetadataStandard.getInterface/getImplementation(...) methods, and added a trivial Characters.isHexadecimal(int) method to be needed later for a JSON parser.
add 3473328 Updates for GeoAPI changes (review upgrade to ISO 19115:2014).
add eb3660c Added a minor design note in comment.
add 24346ff Added Christina Hough to the list of contributors.
add 01b2ff5 Update for GeoAPI changes (upgrade to ISO 19115:2014).
add b37374a Fixed a NullPointerException at unmarshalling time.
add a46c716 Fix dependency version number (must be consistent with pom.xml).
add 05071a4 Upgrade GeoAPI dependency from 3.1-SNAPSHOT to 4.0-SNAPSHOT.
add e584783 Update for a GeoAPI change (DQ_Scope moved to MD_Scope).
add 0ad5b66 Renomed some tests method for making clearer which names are XML names (as opposed to UML names).
add af6b35f Document the new type hierarchy.
add a0c9ed7 Moved ReferenceSystemMetadata (an internal class) to its own package, in order to prepare for the addition of ServiceParameter in that package too.
add bebd6fb Adapt SIS code for the GeoAPI change http://jira.codehaus.org/browse/GEO-242 This is about trying to provide a unified parameter API for ISO 19111, ISO 19115 and WPS standard.
add 344a63e Consolidation of parameter work: we will move the Class <-> TypeName mapping in a dedicated class outside of DefaultRecordSchema, so we can use it for ISO 19115 <-> ISO 19111 parameters as well. This work is still in progress.
add 9949ab0 Missing class from previous commit.
add c12d650 Synchronization problem.
add 76d82d6 Complete the support of a TypeName <-> Class mapping.
add eaeb9f4 More robust check about whether it is safe to associate a value class to a TypeName.
add 942abe6 Added a test.
add 1b0c45e Start using the Identifier <-> TypeName mapping in ServiceParameter. An open issue in this commit is the fact that ISO 19139 does not include the namespace of TypeName objects in XML document, so we currently fail to infer the java.lang.Class from an unmarshalled XML TypeName because of the missing "OGC" or "class" namespace.
add 9fdbbb2 Accept to parse also OGC type name in global namespace (rather than only in "OGC" namespace). This is needed for parsing of web service parameters from XML document, because TypeName does not marshal its scope in current standards.
add a32cf90 Stricter check for equality.
add dee8e7f ServiceParameter shall infer the ReferenceIdentifier from the MemberName. This is the reverse of the "MemberName to Identifier" mapping done previously.
add 130d74c Connect ServiceParameter (an internal class) to DefaultParameterDescriptor (the public class). The later is defined from ISO 19111, while the former is used only internally for ISO 19115 support.
add 2ccc590 Complete AbstractParameterDescriptor with code that moved from subclasses.
add fe2184f Moved the service interfaces in the org.opengis.metadata.identification package. This avoid the ServiceIdentification dilemna (should it be in service or identification package?), reduce the amount of deprecated interfaces by 1 (we no longer need to deprecate the ISO 19115:2003 class), and avoid the addition of one more package with only 4 classes.
add 49fd390 Javadoc.
add 5cb4c18 Minor adjustments as a side-effect of the ongoing "merge to trunk" work.
add 211d68d Minor javadoc fixes.
add 9a93dd0 ParameterValueGroup implements LenientComparable.
add 8f60973 Port from trunk some changes which were necessary for the merge. Those changes are mostly for helping the trunk to deal with the changes in GeoAPI, which are not yet known to the trunk since the later is nailed down on GeoAPI 3.0.0.
add e2bc155 CSS with a warning logo for API that may change.
add 4348223 Removed link to stylesheet.css, since they are no longer needed without custom Doclet.
add 12b742c Replace the 'maven-resources-plugin' (previously declared in the root pom.xml) by Java code in our custom doclet. The reason is that I didn't found a way to get 'maven-resources-plugin' executed when 'mvn javadoc" is executed, rather than when "mvn install" is executed. The better alternative would have been to use the <javadocDirectory> or <javadocResourcesDirectory> maven-javadoc-plugin configuration, but I have been unable to get it to work even with absolute paths.
add e7846f2 DefaultParameterDescriptorGroup.getDirection() infers the value from the parameters that it contains.
add 8562bdc Add 'TimeOrigin' element in temporal datum WKT.
add 90eab39 Rearrange property order (no significant code change in this commit).
add fa034dc Reduce usage of deprecated methods or patterns.
add 97dfca9 Added a test case for TemporalCRS WKT formatting.
add ee89f05 Added a test case for pseudo-WKT 1 temporal CRS formatting.
add affac9f Added support for dependencies in MetadataStandard. For example ISO 19111 standard depends on ISO 19115.
add cb24c36 Reorder properties in the more common (x,y,z,t) order. No significant code change in this commit.
add ef616d7 Better inferrence of accuracy to use in TemporalExtent and VerticalExtent WKT.
add efa94e2 CharSequences.split(...) create String[] array for String, StringBuilder and StringBuffer input. This is a convenience for some Apache SIS code, but still considered an implementation details not to be published in the API (for now).
add 7e8de85 Deprecate CharSequences.toString(...) since as of JDK8 its functionality is provided by java.util.StringJoiner.
add c7e0be8 TreeTableFormat checks for more types to localize.
add 27051b1 Javadoc (no code change).
add 3e2640e Minor anticipation on GEO-199 resolution (replacement of 2 CodeList by Enum).
add e4115db Normalized version of EPSG:4326 should have the "CRS:84" identifier.
add 9e80452 Apply Rémi Maréchal's patch for RangetSet.remove(...) implementation. https://issues.apache.org/jira/browse/SIS-79
add f351b62 Fix a NullPointerException.
add 5ab2e5f Reordering of some properties. No significant code change in this commit.
add 6db7850 Fixed a few warnings (mostly javadoc).
add bdeb9fb Added PositionalAccuracy constants to be needed later by the referencing module. Adding them now in SIS allows us to start preparing the Geotk code for migration.
add da3a7d8 Added a test for PositionalAccuracy constants.
add 3c5b9c4 Trims trailing space and null characters in attribute names and values.
add e45f713 Bug fix: first property value was always null. Bug identification and patch by Marc le Bihan. https://issues.apache.org/jira/browse/SIS-178
add e21a89e Merged ReferencingIdentifier with Identifier. This reflect a change in ISO standards, where MD_Identifier and RS_Identifier (from ISO 19115:2003) have been merged in the MD_Identifier type in ISO 19115:2014. Concequently all usages of ServiceIdentifier in Apache SIS have been replaced by usage of the Identifier parent type.
add 8318c54 Minor adjustments making easier the merge to trunk.
add 8ead8fe Upgrade NetCDF dependency.
add a7b2421 Documentation update from ISO 19115:2014 reading (especially the example sections).
add 0a1f1bb Updated DefaultMetadata to ISO 19115:2014.
add 9463273 Added a special case for the "language" property, which is not handle in the same way than what ISO 19115:2014 said. Those difference exists because JDK already has its own java.util.Locale, which we want to use and which is different than the ISO 19115 PT_Locale construct.
add 7913831 Factored out the handling of "defaultLocale+otherLocale" special property in a separated OtherLocales class. This is currently used only by DefaultMetadata, but we will need to leverage that OtherLocales class in the DefaultDataIdentification class too when we will implement ISO 19115:2014-3 XML marshalling.
add 85f9e16 Added more tests.
add e8dd4d4 Bug fix in ScopeAdapter: the value was lost if the MetadataScope was not an instance of DefaultMetadataScope. This bug has been identified by the port to trunk (it has not been identified by the tests on the JDK8 branch, but the fact that the tests on trunk sometime follow a different code path has made this bug visible).
add e38e887 Partial implementation of bidirectional feature association. Still work in progress.
add b021d3a Commited the refactoring done by Marc Le Bihan https://issues.apache.org/jira/browse/SIS-180 This commit does not include yet the JDBC classes. Those classes will be the subject of a separated commit.
add 8035ab1 Removed CmdLineDriver since it was not yet implemented. Updated version number of other classes.
add bcb34fa Initial commit of Marc Le Bihan's work on JDBC driver. https://issues.apache.org/jira/browse/SIS-180
add a37c3d8 Minor formatting.
add 8239654 Make 'prune()' and 'isEmpty()' operations tolerant to metadata properties of unknown type.
add 48eee48 Upgraded parent POM dependency.
add 0bcac91 Try to improve the resolution of feature types in case of cyclic graph.
add 27736e6 Complete the support of cyclic FeatureType graphs.
add d86d2ee Avoid usage of some deprecated metadata methods.
add 2cb15d7 Review of JDBC base driver class: - Retrofit resources in to the SIS system. - Do not log exceptions. - Provide default implementations for some methods. - Rearrange method order for keeping together related methods.
add 789c6d7 Avoid usage of deprecated methods.
add f48f1a0 Post-merge cleanup.
add bf41ac9 Consolidation of deprecated method implementations: - Setting a null value should remove the wrapper object if the later became empty. - The deprecated getter methods invoke only the non-deprecated getter replacement. - The deprecated setter methods invoke only the non-deprecated setter replacement (unless the invoked methods are final). This means that if a deprecated setter methods need the old value, it will read the field directly. The intend is to avoid surprising c [...]
add db79d16 Added a test for verifying API changes.
add 7a11776 Update for GeoAPI changes.
add cef86a9 Add the code that we used for generating the "api-changes.properties" file. This may be used again if we need to upgrade an other part of the library for an other standard some day.
add 7a5caf2 Allow implementation to alter the API defined by interfaces.
add 4a763a4 Added a test and minor cleaning.
add 6578d07 Replace explicit declaration of DefaultResponsibleParty by a @XmlSeeAlso annotation. This allow less surprising behavior for applications that use Apache SIS with their own JAXBContext. Credit: this is a proposal from Guilhem Legal.
add ad7d2c0 Minor simplification.
add 2f548af Trivial cleaning.
add 05fd0b7 Consolidation of logging messages occuring at XML (un)marshalling time. This is cleaning work prior the consolidation of ArgumentChecks call in metadata implementations.
add 1544a97 Consolidation of checks for property values in metadata objects.
add 60a006c Added documentation.
add 4ad0e2d Added test.
add bdf5230 Added the missing DefaultKeywordClass implementation.
add 75b23f9 Added the benchmark class that we used for measuring the memory usage of Feature implementation.
add 40b8894 Need to use a different ClassLoader than the APIVerifier one, because we do not want to inherit its GeoAPI dependency in this case.
add 9d0deeb Reduce memory usage by avoiding the creation of unused empty collection in equals, hashCode, toString, freeze, isEmpty and prune methods.
add 39ef25b Flag automatically generated code.
add 7733c25 Update for GeoAPI change.
add 5875c29 More informative message in case of error.
add d65bcf7 Fixed two resource strings.
add bd03ae3 Factor out default implementation of 'equals', 'hashCode' and 'toString' for Map.Entry. This change fixes a hole in DefaultRecord.
add d309692 Initial implementation of AttributeType.characterizedBy association. This association is part of ISO 19109, and will be useful for providing information about accuracy of measurement. Corresponding association has not yet been added to Attribute.
add 32a7556 Cache entrySet reference shall be volatile. Trivial formatting fix.
add 4f23c6b Removed useless call to String.valueOf.
add 4052a2b Added an AbstractMap with slightly different assumptions and implementation strategy than java.util.AbstractMap. This is strictly for internal usages, only in some specific cases, and shall be invisible to users.
add 2fd39e6 First draft of DefaultAttribute.characteristics() method.
add e3d33dc Added tests.
add e96f51d Attribute.equals/hashCode should take characteristics in account. Added more tests.
add a3d9ad4 More tests.
add 352348a Feature: 'newInstance()' method added in GeoAPI.
add 0019593 ISO-19115 TopicCategory and PixelOrientation shall be Enum, not CodeList. http://jira.codehaus.org/browse/GEO-199
add 8f0d4c0 Replace usage of reflection by a more efficient call to a method available in java.lang.Class.
add 9f9beb9 Allow Types.getCodeValues(Class) to work with Enum in addition to CodeList.
add be13b7d Update for GeoAPI change: Obligation code list replaced by Obligation enum, for compliance with ISO 19115.
add 19debd3 Removed the hack about the "defaultLocale+otherLocale" UML identifier, which does not exist anymore since GeoAPI now provide the version number of specifications used.
add 974f76e Update for GeoAPI changes: - Added StandardOrderProcess.getCurrency() method for integration with JDK standard class. - Moved Band.getTranfertFunctionType() and getNominalResolution() up in the hierarchy into SampleDimension. - Changed ScopeDescription.getOther() return type from String to InternationalString.
add a025a1a Bug fix: need to inherit the range of values from the super-class.
add dabd716 Update for GeoAPI change (one more upgrade to ISO 19115:2014).
add a416265 Trivial update for GeoAPI correction.
add cfa375c SIS-184 : Ability to run SQL request on DBF 3 Database. SELECT * FROM <DBase> [WHERE] simple condition
add e0e4846 Fixed wrong argument order when formatting error message.
add e72cce3 Fixed SVN properties. There is no code change in this commit (the apparent changes are only a result of SVN adjusting automatically the EOL style to the platform).
add cf190a0 Refactoring on SIS-184 : Changing from java.util.Logger.getLogger(...) to java.apache.sis.getLogger(...).
add 62ed39b Refactoring for SIS-184 : MappedByteBuffer is ejected from Database class and put into internal classes in order to be upgrated to something better later.
add af4794d Refactoring for SIS-184 : (properties refactoring were missing) MappedByteBuffer is ejected from Database class and put into internal classes in order to be upgraded to something better later.
add 4448574 SIS-185 : - ShapeFile public variable members reduced to private. Method getFeatureMap() added to allow a test to continue working. - FieldDescriptor public variable members reduced to private. - Database methods : close, isClosed, loadRowIntoFeature and readNextRowAsObjects marked as deprecated to warn programmers against using them.
add 64fd883 SIS-185 : - getRecordCount() changed to getRowCount(). - Method return HashMap in database now returns a Map.
add 6082d3c Trivial renaming of test methods, and added one test about the "String to Integer" case.
add 7747804 Comment-out (for now) the copy of 'sis-shapefile' resources in NetBeans project configuration.
add 8445ff7 Support parsing of "degK" symbol for Kelvin. This symbol is used in some NetCDF files.
add 1dd03be Add parsing of unit symbols from NetCDF files.
add 0c11c5e Change in the contract specified by javadoc: in SpatialTemporalExtent, the temporal component is no longer mandatory as long as if have at least one of spatial, vertical or temporal parts.
add 1bbb1b2 SIS-185 : - Database object removed. - Access to fields description by DatabaseMetaData.getColumns(...) method. - Many internal objects hidden. - Most error message reduced their level from SEVERE to WARNING.
add 48715f9 SIS-185 : Correcting previous commit.
add 2aff0d0 Ported CRS.getComponentAt(...) - previously named CRS.getSubCRS(...) on Geotk.
add 55970d5 Ported the AxisDirections.indexOfColinear method.
add d3aa5f5 SIS-185 : Removing duplicated resources tests files.
add dd38ed2 Moved into a separated class (NameMeaning) the ReferencingUtilities methods related to assigning a meaning to parts of OGC URN.
add fa441b4 Moved ReferencingUtilities from sis-metadata to sis-referencing module. This move has been made possible by the extraction of URN-related methods in a separated class (NameMeaning) in the previous commit.
add a92e8a8 Introduce a new AxesConvention.CONVENTIONALLY_ORIENTED constant more clearly targeted to Web Map Service (WMS). This new constant is functionally between AxesConvention.RIGHT_HANDED and AxesConvention.NORMALIZED. This give us more freedom for tuning NORMALIZED, for example by forcing the prime meridian to Greenwich (whatever this would be a good idea or not is still an open question).
add 5c9c5ba AxesConcention documentation, and renamed a few test methods for distinguish whether we are testing CONVENTIONALLY_ORIENTED or NORMALIZED enum value.
add caccfa4 Clarify that Bursa-Wolf parameters shall be between two Geodetic Datum having the same Prime Meridian. This commit contains also some error messages to be used in a later commit.
add c85e51b SIS-185 : Shapefile content is read through an InputFeatureStream.
add 71c6fb2 SIS-185 : Feature values taken from Database are temporary recast to String instead of their true type.
add c638075 Clarify in the AxesConvention contract that we do not rotate the prime meridian. Instead provide two methods which, used together, simplify a little bit the task of handling longitude rotation: - CRS.getGreenwichLongitude(GeodeticCRS) which take care of converting the prime meridian to angular degrees. - GeneralEnvelope.translate(double...)
add 675c2cb Documentation update and added tests for the Paris prime meridian.
add f1b1615 Trivial change of method declaration order (no significant code change). The intend is only to keep related methods together.
add c6a8251 Added tests for toNormalizedGeographicCRS(CoordinateReferenceSystem).
add 9c2ffc5 Added test, documentation update, tuned error message.
add 51dbd5c Port more geometric formulas, some of them needed for Envelope transformations (next commit).
add 96e4e7d Port the code performing Envelope transformation.
add 2651cd0 Ported the class that perform the link between our ISO 19115 implementation and a few services provided by the sis-referencing module.
add 402add2 Coding conventions.
add 831d49b Avoid dependency to Java2D in the Envelopes class. Added documentation and bug fix in ShapeUtilities.toPrimitive(Shape).
add f5173ff Updated version numbers of a few plugins and dependencies.
add b5d8286 Fixed some javac and javadoc warnings.
add 4684771 Temporarily disable the custom doclet, which seems to block the copying of doc-files directories.
add 83722a2 Re-enable custom doclet and fix more javadoc warnings.
add 9b61d75 Minor documentation tuning.
add 3105054 Intermediate commit for internal.shapefile.jdbc renaming.
add 0a2b5b7 Change in the custom doclet implementation strategy, trying to avoid wrapping the standard RootDoc. With the previous implementation (using a wrapper), the doc-files directory were correctly copied on JDK6 and JDK7, but not on JDK8.
add 1da89e4 Documentation clarification: represent the projected envelope by a red rectangle.
add c214078 Initial draft of a Checkstyle verification as part of the build. For now, only enforce the replacement of tabulations by spaces.
add 426c0e9 Second intermediate commit for internal.shapefile.jdbc renaming.
add 4843270 End of refactoring : - Rename AbstractUnimplementedFeaturesOfDatabaseMetaData as AbstractDatabaseMetaData. - Rename AbstractResultSet into DBFResultSet. - Rename AbstractUnimplementedFeaturesOfResultSet into AbstractResultSet. - Rename AbstractBuiltInMemoryResultSet as BuiltInMemoryResultSet. - Rename AbstractClauseResolver as ClauseResolver.
add dfd84e7 Refactoring : changing package of AutoChecker class.
add c8d8f1e Added tests.
add 84a5eeb Added tests.
add 35c0873 Apply "svn:eol-style" properties on Shapefile classes and remove trailing space. This commit does not contains any code or formatting change.
add 9fb0fd7 More extensive tests, and fixed a bug identified by those tests.
add 6a56667 Test adjustments.
add b0af2c7 Make LogarithmicTransform1D method names consistent with ExponentialTransform1D field names.
add 6781875 Apache header added.
add 5f5aac4 Remove trailing spaces for reducing the risk of conflicts during merge. There is no code or formatting change in this commit.
add 5c44a4d Apache header added.
add e918b60 Temporarily disable the check for prime meridian in Bursa-Wolf parameters. We need to revisit this policy, since NTF datum (for instance) have TOWGS84 parameters. We need to make clear that longitude rotation shall be applied by the callers.
add 7a4b51c Removed completely the check for BursaWolfParameters.targetDatum.primeMeridian. Document in the javadoc who is responsible for applying longitude rotation. Re-use the old error key for an other error message to be used in a future commit.
add 8bbe213 Renamed DefaultMetadata.getDates() as getDateInfo() for compliance with ISO 19115:2014 identifier name, which is "dateInfo".
add 0abb3a8 Update for GeoAPI change: Attribute[Type].characteristics() now provided in the interfaces.
add 825fb26 Provide 'equals' and 'hashCode' implementation on the metadata Collection that are view on other metadata elements.
add 5f172a5 toASCII(...) now replace also various kind of space characters.
add 2257c8d ISO 19162 requires that we replace non-ASCII characters by ASCII ones for all WKT elements except REMARKS["..."]. Note that we make an exception to this rule when formatting a WKT using the SIS-specific Convention.INTERNAL mode.
add 0c630f9 Update for a change in GeoAPI pending interfaces (org.opengis.temporal).
add 376dd01 Minor clarifications about WKT 1 versus WKT 2.
add 74d9f53 Ported the DefaultFormula class.
add 58956e2 Ported DefaultOperationMethod.
add 8f3b56a Fix a javadoc error.
add acc7284 Added tests for DefaultOperationMethod. Consolidated some other tests as a side-effect.
add a6e043b Add tests.
add 56a77c2 Fix a NullArgumentException in DefaultOperationMethod(MathTransform) constructor. This force us to take a slight departure regarding ISO 19111 regarding the obligation of OperationMethod.parameters.
add 85af931 Removed MathTransforms.getCore(...) from public API, because its contract is not clear enough. Its functionality moved to the internal OperationMethods.checkDimensions(...) method, since the only purpose of 'getCore' was to help checking the source/target dimensions compatibility.
add 2cb668e More accurate error message in case of mismatched source/target dimensions.
add 85412d8 Use pre-defined constant.
add a247025 Ported Parameters.copy(...) and tuned formatting of multi-occurrences of a parameter value.
add afcf87a Make Parameters.copy(...) robust to multi-occurrences of a parameter value.
add 26aa3c0 Add a not about why Parameters.getOrCreate(group, name, index) is not a public API.
add aa9ffa7 Clarify which components of Identifier are compared by Citations static method. Add comparison of Identifier.codespace (new in ISO 19115:2014) when possible.
add 66ae156 Initial draft of an enumeration representing the result of checking if two IdentifiedObjects are the same by looking at their identifiers. According ISO 19162, identifiers shall have precedence over names at least for OperationMethod and ParameterValue instances.
add 5b27c38 Ported the Plane class, which will be needed for approximating an AffineTransform from a collection of source and target points.
add 4035c74 Initial draft of a LinearTransformBuilder.
add d4015a5 Clarifications in Javadoc, and added a check against values very close to zero in Plane.
add 74a0365 Added tests.
add f85139c Plane fields are no longer public - use accessor instead. The intend is to keep room for improvement if a future version want to store values with double-double arithmetic (for now only the 'fit' method needs such arithmetic), or if we want to support planes with vertical orientation (sx ou sy term tending toward infinity). Also rewrite the equations in the javadoc for using the more common order where the constant is last.
add 369446e Partial port of the Line class. Does not yet include the methods computing shortest distance between a point and the line, etc.
add 9ee3f2f Add support for the one-dimensional case in LinearTransformBuilder.
add 0f7b784 Provide more information in LinearTransformBuilder.toString().
add d10d351 After more though, removed IdentifierMatching from the public API. Writing a test case with real-world data (the EPSG identifiers of the "Mercator (variant A)" projection) shows that the previous enum did not worked as intended. For now we keep a simpler implementation as internal API.
add 98c25af Enable the check for identifier (before to check the name) for Datum and OperationMethod.
add 774621c Moved org.geotoolkit.referencing.operation.provider to an internal package.
add 06bd11c Removed the "(derived from geotk-##") part in the "@since 0.#" javadoc annotation. I think it is not in ASF usages to carry such links to an history outside Apache, and removing them will also allow us to enable the "since" tags in the generated javadoc without distracting the users with an information not relevant to the Apache SIS project.
add a2c74e9 Updated copyright year in NOTICE and README files, and enabled inclusion of "since" information in javadoc.
add 89a9128 When formatting in the WKT 1 format, try to check if using the "PROJECTION" keyword actually make sense. Note that WKT 2 does not have this problem, since its "METHOD" keyword is more generic.
add fe4d9a6 Documentation updates. In particular explain better what a MathTransform is, and its relationship with Formula.
add 3f6b860 Fixed javadoc warnings.
add 2dad633 Allows to specify the bootstrap classpath. This will be needed for compiling the release targeting JDK6 using a JDK8 compiler.
add 33c2b36 More accurate for the style change.
add 02b77a8 Minor javadoc adjustments for slightly more uniform package descriptions.
add 043e066 Slight increase of tolerance threshold based on empirical tests.
add af36f8b Rewrite the private 'getConfiguration()' method in a way which will make easier for the JDK7 and JDK6 branches to be compilable with JDK8. The difficulty come from the fact that the way to get the Configuration object is different on JDK8 than on JDK7 and JDK6.
add e41c31f Move the DOAP (Description of a Project) file from the source code repository to the web site repository, following the suggestion on http://projects.apache.org/create.html#submit
add fec7116 Updates identified as a side-effect of preparing the 0.5 release.
add 225246f Missing format in @preformat custom javadoc tags.
add 2448ac6 Ant script used for the release process need to be adapted to a code change in the Version class.
add 591719e Specify the boot class path to the javadoc tools in addition to javac.
add 05b8015 Do not copy stylesheet.css if the javadoc failed, in order to avoid adding an other confusing error messages after the first one. Typo fix in MetadataUtilities.
add 9aef61a Upgrade version number from 0.5-SNAPSHOT to 0.6-SNAPSHOT, so we can start next development cycle while waiting for the vote to complete.
add 3e301f4 Javadoc, consistency in the way to access AbstractIdentifiedObject members, and parameter renaming for clarity.
add 5c4e5d3 Ported MathTransformProvider, refactored as a functional interface.
add f17831c Ported OperationMethodSet, to be needed by DefaultMathTransformFactory. Added tests (this is new code).
add 46b4f42 Explain a design choice about OperationMethodSet.contains(Object).
add f61002b Added javadoc. Restricted DefaultOperationMethod.getOperationType() to SingleOperation subtypes.
add afc96d3 Additional javadoc clarification.
add e834574 Location of GeoAPI project changed: it is now hosted in the OGC group on GitHub.
add c4a983b Partial port of DefaultMathTransformFactory. Abstract for now, will become a concrete class after the port has been completed.
add 8c61544 Ported the ParameterizedAffine internal class, to be needed by MathTransformFactory implementation.
add ab3640b Added a CoordinateSystems.normalize(CoordinateSystem) method, which will be needed by the MathTransformFactory implementation.
add bd3f2d5 Continue the port of DefaultMathTransformFactory.
add 27253d0 Documentation updates.
add 40e32a8 Suppression of "3.2" in "http://www.opengis.net/gml/3.2" does not work (SIS-192).
add 5dc8027 Change in the contract of DefaultOperationMethod.redimension(...). The javadoc tries to explain better its purpose, with "Affine" and "Molodensky" methods as examples. This is an incompatible change compared to Apache SIS 0.5 release, but this class was the very last one added before the release (maybe too late) and we hope that since it will not be used before SIS 0.6, few users would be affected.
add 7accb91 Redimenion the OperationMethod before to return the MathTransform.
add 73ec89d Javadoc fixes: expected <div>, not <span>.
add 793cc82 Initial draft of DefaultMathTransformFactory tests. Will be completed later.
add d26ebd3 Added documentation.
add 82f28cc Documentation editions.
add 64aa6e7 Ported the "Affine" operation method. This is our first provider ported to SIS - we are comming closer to a working MathTransform factory providing real coordinate operations support.
add f60a55d Removed accidental references to Geotk in the documentation.
add be8e6b1 Allow the "Affine general parametric transformation" coordinate operation method to understand the parameter names used by EPSG:9624 in addition to the OGC syntax.
add 385ea31 Clarified the way codeSpace are inferred from Citation objects: - Added a getUnicodeIdentifier(Citation) method which guarantee that the returned String is a valid Unicode identifier - Remove ignorable identifier character for better compatibility with XML identifier - Documented the relationship between Unicode identifier and XML identifier - Make use of the above-cited getUnicodeIdentifier(Citation) in most places where we need to infer a scope or codeSpace, except w [...]
add 0f32cc3 Minor javadoc formatting: separator between the EPSG and WKT example, put the note about EPSG prameter names closer to the EPSG example.
add 6ca7650 Usage of getIdentifier(...) versus getUnicodeIdentifier(...) - Document better the policy. - Replace getUnicodeIdentifier by getIdentifier when used only for WKT or toString() formatting purpose.
add a8857a6 Better formatting of "Affine parametric transformation" parameters in Well Known Text (WKT) format:
add 66def0f Better separation of matrix using WKT1 and EPSG parameters. - The WKT1 case is implemented by MatrixParameters and still a general case, despite understanding the EPSG names (but only as alias). - The EPSG case, which contains a little bit of "magic" that depends on the matrix size, is isolated in MatrixParametersEPSG.
add 618d4c7 Replaced a few String litteral by static final value from the Constants internal class.
add e2e9c50 Adapt the parameter group name depending on wether the matrix is compliant with EPSG:9624 definition or not. EPSG:9624 is only for affine matrix of size 3x3, while OGC definition is does not put any restriction.
add 0452a77 Partial rollback of previous commit, which was an attempt to adjust automatically the ParameterDescriptorGroup content according whether the matrix content matches the EPSG:9624 definition or not. This was complicated and probably at risk to cause confusion to the users. Instead, we will accept that the parameter description provided by:
add c3f8781 Affine.parameters(Matrix) now select the appropriate parameter set (EPSG or OGC) depending on the matrix characteristics (size and whether it is affine).
add 8f30e24 Renamed "Affine general parametric transformation" as "Affine parametric transformation". A verification in http://epsg-registry.org/ show us that the "general" word has been dropped.
add d9d7a32 Allow the user to control the logging configuration of the SIS command-line tool.
add 6231d2b Workaround for a JDK bug: ServiceLoader does not support usage of 2 iterators before one iteration is finished. To workaround this bug, we use the LazySet internal class.
add 4eaca52 Missed test class in the previous commit.
add 9caa0fc Adjustement to the workaround for java.util.ServiceLoader bug.
add 51eb848 Register the Affine method in META-INF/services and added more tests.
add df2e622 When reporting an error about a class, do not show the name of private classes. Instead, go up in the hierarchy until we find a public class or interface.
add e295140 Re-target the Parameters class as the base class of DefaultParameterValueGroup, but providing an API which is more convenient to use at least for the referencing module.
add 2bafe67 Initial port of a collection of map projection parameters.
add ceeb994 Refactoring: moved MapProjectionParameter classes to org.apache.sis.parameter in the hope to make easier to find them. Removed some complicated "UniversalParameter" code (we may remove more later); we will try to use ParameterBuilder instead.
add 1a72396 Javadoc updates and changed some method declaration order for keeping related methods closer. No significant code change in this commit.
add 09a8fa3 Javadoc refactoring in an attempt to clarify the usage of ParameterBuilder.
add abfecd3 Javadoc formatting: replaced the table by a more classical list. A few tests suggest that the list is more redeable.
add 3bc85e0 Added JUnit tests for MapProjectionParameters.
add 4ab2d6d Referencing: added the LongitudeRotation operation method. This is probably the simplest operation.
add 3b96e3a Referencing: moved a test closer to where the tested objects are defined.
add a9b44c0 Added javadoc and a test case for "Longitude rotation" operation method.
add 4233932 Minor Javadoc updates (include formatting fixes).
add c4a362b Remove a parameter name which is used only in the ESRI's "New_Zealand_Map_Grid" map projection. This projection will not be ported to Apache SIS for licensing reasons.
add 5d8deeb Diamond operator and lambda expression.
add 08e4b73 Referencing: initial port of Mercator1SP projection parameters. Not yet complete, since the projection code itself is not yet ported.
add 36a9c25 Referencing: remove the "UniversalParameters" class. We will try to achieve the same goal with the help of ParameterBuilder, as seen in the Mercator1SP class.
add 71831bc Referencing: use the dedicated "createGroupForMapProjection" methods when creating Mercator parameters.
add c1440c5 Referencing: added a test for the case where a parameter group contains sub-groups.
add 3f81481 Metadata bug fix: DefaultResolution.isEmpty() and prune() need to detect when RepresentativeFraction is empty [SIS-194].
add ffc2264 Added a test and links to JIRA tasks.
add 3f82a6c Referencing: consolidate the creation of legacy (deprecated) names and identifiers into the Builder base class.
add a2fb0fc Referencing: add MapInfo identifiers to Mercator projection.
add 97a6602 Referencing: added a small test for Mercator parameters.
add 2c6bce6 Minor formatting and warning fixes.
add 2cfa40d Initial port of the class which will separate the linear parts from the non-linear parts of map projections.
add db38e0b Referencing: port the code to be used for hiding the (linear / non-linear) separation at WKT formatting time.
add 017e5c0 Tests shall use StrictMath instead than Math.
add 312e2c9 Referencing: take in account the separation between linear and non-linear parameters before WKT formatting.
add 3174d46 NetBeans project configuration: fixed a dependency path.
add 6e9403c Referencing: after call to NonLinearParameters.createConcatenatedTransform(...), stores the normalize/denormalize transforms as immutable matrices if possible.
add 548051e Referencing: tries to bring more consistency in the equals(...) and toString() methods of various LinearTransform implementations.
add 0b461e9 Referencing: reduce the number of casts needed before to multiply of inverse a matrix.
add 9c3ab29 Consider the transform as affine only if the matrix is square.
add 5a4ef84 Renamed normalize(boolean) as normalization(boolean) because "normalize" was suggesting that the method performs a normalization, which was not the intend. Instead, the method returns information about the normalization.
add 4e23430 Method was public by accident (should be protected).
add 2e8eca2 Matrix update before to port first map projections: - Moved normalizeColumns() in the super-class for saving place (maybe at a slight performance cost) since this method is rarely used. - Moved equals() and hashCode() in the super-class for saving place in Matrix3 and Matrix4, since we rarely put matrices in a HashMap. - Initial version of a 'concatenateAffine' method, to be needed by map projection constructors.
add 6a77cc2 Matrix: added a test case for MatrixSIS.concatenate(...), and documentation fixes.
add 451af0b Javadoc: fixed a bug in our stylesheet, and removed some <p> elements which are no longer needed after this fix.
add 8431be2 Javadoc: more corrections in stylesheet.
add 06d6868 Javadoc: replaced {@section} custom taglet by <div class="section"></div> HTML. Rational: - The custom taglet was not understood by IDE, thus showing broken javadoc in IDE windows. - The custom taglet produced <H5> and <H6> HTML tags, which should not be used at least in member javadoc because javadoc produce a structured document, and our heading tags break the structure. - Since JDK 8, javac can ensure that the comments are well formed but can not verify what our [...]
add c8aaf85 Javadoc: minor formatting updates for a little bit more consistency with the new usage of <div> for section header.
add c3385d0 Javadoc: move the quotes inside the <cite></cite> elements for better rendering. This change has been applied by an automatic search-and-replace.
add 2b8a716 Javadoc: other replacements for consistency.
add f2b1b78 Referencing: Rename NonLinearParameters as ContextualParameters since its purpose is not to describe the non-linear parameters (this is done directly by the MathTransform implementation), but rather to put those non-linear parameters in their context. Also start a refactoring as an implementation of ParameterValueGroup instead than a container for an other ParameterValueGroup. This eliminate one level of indirection, which we hope will help to simplify a little bit the API.
add 3644063 Referencing javadoc: try to explain better the purpose of ContextualParameters.
add 330a541 Referencing: partial port of UnitaryProjection, which is the base class of code performing the map projection on a ellipsoid having a semi-major axis length of 1. Note: the class name may be changed. For example maybe "NormalizedProjection" would be more understandable. We will submit the question on the mailing list after we ported the Mercator projection.
add 06d8ad2 Referencing: documentation fix, and added missing methods in UnitaryProjection.
add 51c508f Referencing: enabled the JUnit tests in UnitaryProjection which were ignored.
add 1e006b0 Referencing: ContextualParameters need to create matrices with extended precision.
add 916b46c Referencing: added parameter declaration for the "Mercator (variant B)" case.
add b09330a Referencing: added parameter declaration for the "Mercator (variant B)" case.
add bf5f28e Removed empty javadoc tags.
add aaa44d4 Parameters: write remarks in footnote when formatting the parameter descriptions. The intend is to flag the parameters which are not formally defined by EPSG.
add f51f338 Referencing: added parameters for "Popular Visualisation Pseudo Mercator" projection (EPSG:1024).
add d1493ba Referencing: added parameters for "Miller Cylindrical" projection.
add 4488eff Referencing: added some verifications of parameter names.
add 3d05be7 Referencing: ported code to be needed for assertions in map projections.
add 6bbf3a9 Referencing: initial and incomplete port of Mercator projection. Missing the initialization in the constructor for now.
add 4b927d6 Minor constant declaration and renaming for sharing existing methods.
add b935c0c Referencing: rewrite some equation in a way closer to EPSG Guidance Note Number 7, part 2, Version 49. This has the side effect of bringing the equations meaning closer to a "real world" meaning. For example the former "t function" is now more clearly related to a part of the Mercator projection (Note: we define that equation in the parent class because Mercator is considered a special case of Lambert projection with the equator as the single standard parallel, so we wil [...]
add 3c27c08 Referencing: clarified what the formulas mean.
add 72e5766 Referencing: partial port of Mercator initialization operations (construction of normalization and denormalization affines).
add de6c7c0 Referencing: renamed "UnitaryProjection" as "NormalizedProjection".
add 5df46d8 Referencing: documentation fixes and minor code tuning (e.g. no need to cache the non-linear part of the concatenated transform).
add c90e93b Referencing: trivial javadoc fix (include: fixed wrong Unicode character).
add d4e06c1 Referencing: call to ContextualParameters.completeTransform(...) mark the parameters as unmodifiable. This method is invoked after we finished to build the ContextualParameters and need to keep the reference.
add 81bf328 Referencing: protect the ContextualParameters matrices by wrapping them in an unmodifiable view after construction has been completed. Also added more javadoc.
add 101847f Referencing: completed ContextualParameters implementation, added documentation and tests.
add 6861f51 Referencing: clarified that in the particular case of Mercator projection, latitude of origin is always 0°. Begin the port of Mercator projection tests.
add 1fcc3ac Referencing: review our policy about the tolerance threshold in map projections.
add 5449b7d Referencing: register the Mercator projection in the list of transforms known to DefaultMathTransformFactory.
add ca7beef Referencing: register DefaultMathTransformFactory implementation in META-INF/services.
add c67674a Use META-INF/services registration instead than hard-coded reference for DefaultNameFactory. The intend is to prepare the ground for dependency injection in a future version.
add 1475668 Referencing: added a minor test, and prepare for WKT parsing (to be implemented later).
add 1ce2f1e Referencing tests: attempt to simplify a little bit the MathTransformTestCase base class: - Removed the 'messageOnFailure' field, which was rarely used and rarely honored. - Renamed some "verifyFoo" methods as "assertFoo". - Moved 'assertIsIdentity' to ReferencingAssert.
add 094b78a Referencing: first real test of Mercator projection. The test is defined in the GeoAPI conformance module from the example provided by the EPSG database.
add 6b421bb Referencing: added tests and bring some parameters in closer conformance to what seems current usage: - "Mercator (1SP)" and "Mercator (2SP)" no longer deprecated since EPSG added them as aliases in their database. - Common usage for "Miller Cylindrical" seems to be "central_meridian" rather than "longitude_of_center".
add e718663 Referencing: added test case for derivative of Mercator projection.
add 4ee21a8 Referencing: change in our construction of CoordinateDomain (a class used only for testing purpose). We now store the domain bounding box, for making easier to use it with 'verifyInDomain' GeoAPI test.
add acea1de Referencing: last Mercator tests.
add 4af9c3e Referencing: added a test case for WKT formatting of the "kernel" part of Mercator projection. This was initially not planned to be part of MercatorTest, but since the WKT of the "kernel" part is highly implementation dependant, it may be better to keep it with the specific test class.
add 0bc0c2f Fix a bug identified by the port to the JDK6 branch.
add 67d1c95 Referencing: scale factor of Pseudo Mercator projection should have only the EPSG name.
add 5c839c8 Referencing: add parameter definitions for EquidistantCylindrical projection. As a side effect, added 'replaceNames' method in ParameterBuilder in order to make easier to use an existing ParameterDescriptor as a template.
add 7cd18bf Temporary useless local variable put in comment. (to check the ability to commit in SVN).
add 14262f6 Referencing: simplified a little bit by removing the Builder.replaceIdentifiers(...) method. It is less likely to be used than Builder.replaceNames(...). Also renamed "replaceNames" as "rename".
add d82a247 Referencing: added parameters for "Mercator (Variant C)" and "Mercator (Cylindrical)". As a side effect of those new parameter groups, try again to re-organize the way we manage parameters in an effort to make easier to find which OperationMethod use which parameters, and which parameters are defined by EPSG and which are extensions found in GDAL.
add c67f2ed Referencing: renamed EquidistantCylindrical as Equirectangular. We reserve the "Equidistant Cylindrical" name for the ellipsoidal case.
add 00c5dad Referencing: minor fix in parameter names, and added tests for "Mercator (variant C)" and "Mercator (Spherical)".
add 297fd92 Referencing: complete the implementation of Equirectangular projection (actually implemented by an affine transform). As a side effect, tuned again the way we manage parameters, especially the calculation of radius of conformal sphere.
add ea128f9 Referencing: added test for Equirectangular projection, in particular its WKT formatting. This implied a change in the way matrices were formatted in WKT (no more special case for Matrix, use a more generic mechanism for MathTransform instead).
add d727cc0 Renamed "OGP" as "IOGP" since the organisation name is now "International Association of Oil & Gas Producers". This replacement is not yet done in XML files. Added tests.
add b47136b Referencing: defines a constant for the "IOGP" string (internal usage only).
add 27cdd0e Referencing: rename "OGP" as "IOGP" in XML files as well (SIS-196). This action is taken after feedback from a member of EPSG group.
add 00bb42a Referencing: NamedIdentifier should not create automatically a NameSpace anymore. https://issues.apache.org/jira/browse/SIS-197
add e60a00d First draft of a tools generating a HTML page listing projection parameters, for SIS documentation purpose.
add 8ef87c6 New HTML generator for the page listing the map projection parameters.
add 70a579b Referencing documentation: Generates a slightly more compact HTML.
add d66fb1a Remove ImmutableIdentifier.remarks, which is replaced by 'description' (SIS-198). Allows parameters to be declared deprecated. Review Mercator parameters, declaring "scale_factor" in Mercator2SP as a deprecated parameter.
add 4f2524f Referencing: added a provider for "Lambert Conformal (1SP)". Not yet connected to the actual map projection formulas.
add 6bc27e9 Referencing: added parameters for "Lambert Conformal (2SP)" and the Belgium case. Not yet connected to the actual map projection code.
add 68a3d4a Referencing: initial port of Lambert Conformal map projection formulas. As a side effect of this port, tuned again parameters handling.
add c8e1f33 Referencing: LamberConformal constructor does not need to make special case for spherical formulas. Avoid negating the 'n' field in transformation methods.
add 9af08f3 Referencing: fixed the special default values in HTML report.
add fafd7e8 Referencing: renamed MatrixSIS.concatenate(...) as convertBefore(...) and added a convertAfter(...) method. This allow us to bring a little bit more consistency in NormalizedProjection constructor, by doing all the work for the common parameters (central meridian, scale factor, false easting, false northing) without the need for subclasses to invoke 'scaleAndTranslate2D' themselves (the later method can actually be removed).
add 34ad867 Minor documentation updates.
add fb84fef Referencing: provide a mechanism allowing non-SIS subclasses of NormalizedProjection to specify explicitly the semi-major, semi-minor, central meridian, scale factor, false easting and false northing parameters.
add 623397e Referencing: bug fix in ConcatenatedTransform.getParameterized(): the ContextualParameters instance was not correctly recognized as a Parameterized object.
add aacba41 Referencing: bug fixes 1) be less aggressive about unmodifiable ContextualParameters (we should be able to get a parameter default value if the parameter is not present). 2) ParameterizedAffine should return the "Equidistant Cylindrical (Spherical)" parameters when queried from a ProjectedCRS element no matter axis swapping.
add 64e02c7 Referencing: LambertConformal2SP "scale factor" parameter needs to be declared optional, since it is not formally a parameter of that projection.
add ba0fb7f Needs to accept non-SIS factory implementations since the port from Geotk is not yet completed.
add 17d6f47 Referencing: added "Scale factor at natural origin" parameter to "Mercator (Spherical)" since it was used in EPSG:3785 (the legacy "Popular Visualisation CRS / Mercator").
add f782d10 Referencing: removed the code that tried to infer automatically the parameters to use in NormalizedProjection constructor. This was more a risk of confusion than a help.
add a9c798a Remove some of the deprecated methods.
add ee85700 Workaround for a JSR-275 bug: Unit.toString() sometime throws IllegalArgumentException.
add 6b2fa5e Referencing: initial port of AbstractCoordinateOperation, together with an opportunist improvement of WKT2 formatting of axes.
add fe7f8c6 Referencing: clarify support for 'interpolationCRS' in CoordinateOperation.
add 6aed681 Referencing: initial port of DefaultConversion and DefaultTransformation.
add 989ecf3 Referencing: make implementation slightly more straightforward.
add ced811c Referencing: initial port of pass-through and concatenated operations.
add cfa04e2 Referencing: ported support for "defining conversions".
add 2f9caba Referencing: add projection subtypes (Cylindrical, Conic, Planar or Azimuthal).
add 7fa997e Referencing: more 'castOrCopy' implementations in CoordinateOperation sub-types.
add 967eec0 Referencing: Moved internal methods closer to methods doing similar work, and added DefaultConversion.specialize(...) method.
add 3a622ca Utilities: leverage a little bit more ArgumentChecks.
add e3fc82b Referencing: initial port of DefaultDerivedCRS.
add 2a3c943 Referencing: initial port of DefaultProjectedCRS.
add 3bf3e4f Referencing: consistently invoke public methods instead than fetching the values directly from the private fields during WKT formatting.
add 707c555 Referencing: better replacements of non-ASCII characters in WKT formatting, as required by ISO 19162. The replacement of axis abbreviations can be controlled by users.
add a75cb99 Referencing WKT: added support for ORDER[...] element inside AXIS[...] element. https://issues.apache.org/jira/browse/SIS-163
add 0d56659 Feature: add a column for "characteristics" at formatting time.
add 812529f Omit PrimeMeridian element in WKT2_SIMPLIFIED mode if the meridian is Greenwich. Added test for WKT 1 formatting of ProjectedCRS.
add 7013007 Referencing: fix accuracy problems when formatting map projection scale factor in a ParameterValueGroup.
add 64c155c Referencing: provide a GeodeticObjectBuilder for making easier to create ProjectedCRS. For now we keep this class in the test directory because it may need more experiment before we freeze its API. But we may move this class to the main source code once we feel it is stable enough.
add 48c5d21 Referencing: first WKT2-compliant formatting of ProjectedCRS.
add 1ea1a43 Referencing: store the original parameters, in order to preserve original units of measurement.
add ad97c4a Feature: accepts short tip (instead of requirying fully qualified names like "head:tip") when there is no ambiguity.
add 4fafa78 Feature: renamed DefaultOperation as AbstractOperation, since an abstract "invoke" method has been added.
add 64f1f32 Feature: renamed AbstractOperation.invoke(...) as apply(...) for compatibility with JDK8 BiFunction interface.
add dd9a00b Feature: initial support of parameterless operations used as "virtual attribute". Existing tests continue to pass, new tests still need to be written for the new capability.
add 38c5125 Feature: in the special case of LinkOperation, we can redirect to get/setPropertyValue in a more direct way.
add b3e1724 Feature: added a test case for LinkOperation.
add 5a8e79b Feature: added a test case for LinkOperation (missing file).
add 22968cb Feature: added AbstractOperation.getDependencies() method. This information is needed for writing the "SELECT" SQL statement to send to a database server.
add fd81eb2 Utilities: provide a way do disable the "this operation requires the sis-temporal module" warning in SIS releases.
add 13b840c Referencing: fixed some JAXB annotations for the recently added CRS and operation classes.
add 1854229 Referencing: add @XmlTransient annotation to all subclasses of DefaultConversion, since they are not part of GML schema.
add 6f6b029 Referencing: more steps toward GML support for ProjectedCRS.
add 25ef59f Referencing: added missing "castOrCopy" methods.
add 8f1fdc9 Referencing: partial support of WKT 2 formatting for DerivedCRS. This work implies a change of strategy in the way we handle "baseCRS" formatting, because almost all CRS can be used as "baseCRS". We also restrict the 'sourceCRS' and 'targetCRS' types allowed in 'Projection' in order to reduce the risk of errors.
add b9ba59a Referencing: move the restriction about non-null transform into the CoordinateOperation base class.
add 425d783 Referencing: use consistent parameter order in constructor.
add e36c1eb Referencing: clarified usage of Formatter.getEnclosingElement(int).
add 576b7b8 Add a historical note.
add 78f0d6f Referencing: make AbstractDerivedCRS more type-safe.
add 4730d82 Minor documentation update and typo fix in method name.
add f16845e Referencing: added links to WKT 2 online specification. We link to the most specific section when possible.
add 6046070 Referencing: better support of DerivedCRS WKT. According ISO 19162 a DerivedCRS can itself be a GeodeticCRS, VerticalCRS, TemporalCRS, ParametericCRS or EngineerindCRS.
add e59ee4d Referencing: define WKT keywords as static final constants. Some of those keywords are already used more than once (e.g. "Param_MT", "GeodeticCRS", etc.), and all of them will be used again in the WKT parser.
add 068eeb9 Referencing: more tests and documentation.
add 598be79 Referencing: add the missing 'forConvention(AxisConvention) method in DefaultDerivedCRS and DefaultProjectedCRS. This required additional checks for axis order in DefaultConversion and subclasses constructors.
add fcdad71 Add a few clarifications in javadoc.
add 3867a9f Referencing: DefaultConversion.specialize(...) method should accepts a MathTransformFactory argument. This factory was previously hidden because it was used only for axis swapping or scaling. But we will need also for creating a MathTransform when the defining conversion has been created with only a ParameterValueGroup instance (no MathTransform instance), in which case the need to control the MathTransformFactory instance to use become clearer.
add fc262a8 Referencing: the "defining conversion" constructor now accepts a ParameterValueGroup argument in replacement to the MathTransform. This is needed when creating a ProjectedCRS since the "semi-major" and "semi-minor" parameter values are usually not yet known at Conversion construction time.
add d79622d Referencing: fixed a ClassCastException in the WKT formatting of some ProjectedCRS.
add 9161a8f Referencing: check for number of dimensions can make an exception for "Affine" operation, since it can easily be extended to any number of dimensions.
add 158be1a Referencing: removed an assertion which was too strict.
add 0cbc0d8 Referencing: WKT formatting should be more tolerant to malformed CRS, since we would like at least the 'toString()' method to work for investigating the problem.
add 79442f4 SIS-189 : InvalidDbaseFileFormatException should extend DataStoreException
add d5b2887 Referencing: consolidation and first tests for DefaultTransformation.
add b4a0347 Referencing: more consolidation and tests.
add f8c0e1c Referencing: minor tests consolidation.
add 650e35c Test: promote the 'STRICT' constant to the 'TestCase' parent class, since it is shared by more than 30 test classes.
add ba05721 Minor editions: - set the "svn:eol-style" property to "native" - set the "svn:mime-type" property to "text/plain;charset=UTF-8" - omit the import declaration since the class is in the same package - follow the convention asking to use the third person form in the first sentence of methods: "Construct" -> "Constructs" - expand a little bit the first sentence in order to differentiate the two constructors
add 4b191e6 Referencing: added more tests.
add 7fe2286 Referencing: test and debug the support of "InterpolationCRS" in DefaultConversion.
add 936610e Referencing: added tests for WKT formatting of DefaultDerivedCRS.
add acd87a7 Referencing: initial port of the factory of all geodetic objects (excluding MathTransform, CoordinateOperation and the AuthorityFactory). Javadoc still needs to be expanded.
add 5319e97 Referencing: use the user-supplied Locale for formatting some error messages, when possible.
add 28b6a0d Referencing: add some javadoc.
add 923dcdd Referencing: GeodeticObjectFactory applies default properties for all object constructions.
add 9b22b97 Referencing: fix a confusion with theory: LongitudeRotation is a transformation, not a conversion, because it changes the prime meridian, which is part of datum. Improved the check in DefaultConversion for making sure that we do not change the datum. This force us to revisit the DefaultConversionTest, which was wrong from a theory point of view.
add b55eb78 Referencing: javadoc.
add a3ae6b1 Metadata: FormattableObject.toString() do not convert Unicode characters to ASCII, since 'toString()' method is often used for debugging. If the user wants a more ISO 19162 conformant string (including replacement of some non-ASCII characters), (s)he should invoke FormattableObject.toWKT() instead.
add 05a52fd Referencing: fix javadoc warnings.
add 237a6f7 Fix the "svn:eol-style" property to "native" before merge with other SIS branches. This is necessary for reducing the risk of conflicts during future merge operations if those files have been modified.
add 6d0cb6f Referencing: relax the datum check in DefaultConversion constructor. Explain in javadoc why there is sometime a gray area (example of epoch change between TemporalCRS).
add 683ca95 Referencing: add a note on SIS tolerance about different datum.
add ad55a8b Referencing: starting the port of DefaultCoordinateOperationFactory.
add 9d08e23 Referencing: javadoc.
add 770f257 Referencing: register GeodeticObjectFactory in META-INF/services.
add 062d9c4 Build: replace the com/sun temporary classes (used at compile-time only) by a dependency to 'com.googlecode.jaxb-namespaceprefixmapper-interfaces' on Maven central. This is used at build time only - those classes are not included in the classpath at runtime.
add acf51d0 Referencing: starting the port of WKT parser.
add 08a48dc Referencing: added more test for WKT element.
add e4fd09d Referencing: complete the tests for WKT 'Element' class.
add 0d90fac Referencing: ported MathTransformParser (WKT 1).
add 63b3190 Referencing: added a few WKT parsing tests (simple MathTransforms only).
add bef6650 Referencing: initial port of WKT 1 parser for Coordinate Reference System objects.
add 1f07a94 Referencing: moved GeodeticObjectFactory into a 'factory' sub-package. Other factories will be put there later.
add 29c66cd Referencing: ported a first test case.
add 19bc070 Referencing: removed the 'Pending' hack. DefaultMathTransformFactory and GeodeticObjectFactory now use the WKT parsers.
add 7334a00 Referencing: implement WKTFormat.parse(...) method by using GeodeticObjectParser internally.
add 506e3f7 Referencing: remove the map of axis directions from GeodeticObjectParser. Instead we will rely on the work done by the 'Types' utility class.
add c02245f Utility: WKT formatting should be consistent with the one provided in the "sis-metadata" module.
add f21132e Clarifications in Javadoc.
add 7299df6 fix(Referencing): try to solve the ambiguity between EPSG and IOGP codespace (SIS-199). The "authority" citation should be EPSG, not IOGP. But IOGP should be declared a the responsibly party of EPSG.
add 5240d12 Referencing: Citations.getIdentifier(Citation) should take Identifier.codeSpace in account (SIS-201). This work is a consequence of SIS-200 (Citations should not provide constant for organisations), more visible with the case of "ISO 19115" citation.
add fd635f3 Metadata: adjustment in the declaration of ISO 19115 standards. This commit changes the ISO_19115 constant type from Citation to List<Citation>, which allow us to list ISO 19115-1 and ISO 19115-2 together (because SIS's API merges those standards together).
add f66b9c0 Metadata: minor javadoc, and remove the HardCodeCitations.GEOTIFF constant (was used in tests only). We will use the "real" Citations.GEOTIFF constant instead if needed, or the HardCodedCitations.SIS constant if a "dummy" codespace is needed for testing purpose.
add 853acb2 Metadata: added ISO 19115 version information.
add c897367 WKT parsing: moved MathTransformParser from sis-referencing module to sis-metadata module, in order to avoid splitting a package in many modules (an OSGi restriction). This force us to get ride of the OperationMethods internal class. Its work is now done by ReferencingServices instead.
add e11bf1e Referencing: initial version of a CoordinateSystems.modifyAxes(...) method for changing the units of a CoordinateSystem. This is needed for WKT parsing of a GeocentricCRS.
add 1ec885b Referencing: allow AxisFilter to filter out some axes (which is what many peoples would probably expects from its name) and retrofit CoordinateSystems.normalize(CoordinateSystem) into CoordinateSystems.replaceAxes(CoordinateSystem, AxisFilter).
add a9fbfe5 Referencing: fix a Parameters.copy(...) bug, which was not copying correctly the subgroups. https://issues.apache.org/jira/browse/SIS-202
add e74fc70 Referencing: Register DefaultCoordinateOperationFactory in META-INF/services. Note that the registered implementation may need to change in a future version when we will implement caching by (sourceCRS, targetCRS) pairs.
add 699552d Referencing: avoid direct reference to DefaultCoordinateOperationFactory from GeodeticObjectParser. This is needed for allowing us to move GeodeticObjectParser to sis-metadata module, for OSGi compatibility.
add 3238617 WKT parser: removed some more direct dependencies to "sis-referencing".
add 9216d2c Referencing: avoid direct usage of AbstractCS and DefaultConversion in GeodeticObjectParser.
add 5cb6559 Referencing: avoid direct dependencies to BursaWolfParameters and CoordinateSystems (from sis-referencing module) in GeodeticObjectParser. This is part of the effort to make SIS compliant with OSGi.
add ad2dd6b Added clarification in javadoc about the BursaWolfParameters values.
add 42f6657 Referencing: added test cases for BursaWolfParmeters.get/setValues(...) methods.
add 07d526a OSGi: moved VerticalDatumTypes from "sis-referencing" to "sis-metadata" module, for allowing us to move GeodeticObjectParser later.
add e4e29d2 Fixed a NullPointerException when a citation constant is built during XML serialization.
add 2347282 OSGi: removed last direct "sis-referencing" dependencies from GeodeticObjectParser, and oppostunistically reorganized method declaration orders in ReferencingServices.
add 036cd8c OSGi: moved GeodeticObjectParser from "sis-referencing" to "sis-metadata" module. As a result of this move, there is no more "org.geotoolkit.io.wkt" package in "sis-referencing".
add 512578d If an optional module is not found, log a better message at Level.CONFIG. This logging service is factored in an internal 'OptionalDependency' parent class.
add c96242f Bug fix: getUnitReplacement return the unit of the enclosing method, not of the inner method.
add 9e0883b Referencing: removed reflection code which are not needed anymore after the migration of GeodeticObjectParser into the "sis-metadata" module.
add d4c5451 WKT parsing: parser should parse axis abbreviation in the name, or infer axis abbreviation by itself when the abbreviation was not specified in the name.
add 3c90d50 WKT parsing: fix a bug in the handling of abbreviation of "South-South-East" and similar axis directions.
add f80d77e WKT parsing: Axes names "Longitude" and "Latitude" should be replaced by "Geodetic longitude" and "Geodetic latitude". This is the converse of the work done by DefaultCoordinateSystemAxis.formatTo(Formatter). Added corresponding tests.
add c87c3d1 Referencing: DefaultConversion.getParameterValues() should contains the semi-major and semi-minor axis lengths.
add d8bfa3e WKT parsing: fix wrong axis names when axes were not explicitly specified. Declare the ISO 19111 and ISO 19162 axis names as constants in AxisNames class.
add f5d3a68 WKT: added tests.
add 561cbfd WKT: added tests.
add 516ab4b WKT: fixed the handling of units in PrimeMeridian, and added tests.
add 22caec7 WKT: fixed handling of linear unit in projection parameters and added tests.
add 7dc8143 WKT: workaround for a JSR-275 bug when formatting DMS units.
add 7a10eca Referencing: removed the parameter checks in MathTransformFactory.createFromParameterized(...) since it duplicates the check done by the actual MathTransform implementations. The check done in createFromParameterized was not efficient anyway, since it was implemented by a copy of all parameter values in an implementation known to perform some checks.
add 3441014 Documentation: add the (presumed) publication years in reference to ISO 19162 chapter, in case those numbers change in future publications.
add 73d3c59 WKT: tests verify the TOWGS84 element.
add 9577752 WKT: conversion of geocentric coordinate system axes between ISO 19111 and legacy OGC 01-009 shall preserve linear units of measurement.
add f383fe1 WKT: GeodeticObjectParser should use the java.text.Format instances provided by WKTFormat.
add a2ba1f1 Added a MathTransforms.compound(MathTransform...) convenience method.
add 988e914 WKT: starting the upgrade of the WKT parser to WKT 2. Add support of AREA, BBOX, VERTICALEXTENT and TIMEEXTENT keywords. The vertical extent still need to create its VerticalCRS.
add 4b31918 WKT: document relationship between AbstractIdentifiedObject.isHeuristicMatchForName(String) and section B.5.2 of OGC-12-063r5.
add 5725132 WKT: consolidation in the way some metadata are constructed and in the report of warnings.
add d099c76 WKT: report warnings about unknown elements.
add f1e7873 WKT: provide information about WKT problems in a dedicated 'Warnings' class instead than a plain String. The intend is to allow users to have programmatic access to the issues during WKT parsing or formatting.
add 1a6e6d9 WKT: Moved the Parser interface into the org.apache.sis.io.wkt package.
add ed3194a WKT: replaced 'ignoreAxisOrder' boolean flag by Convention.WKT1_IGNORE_AXES enumeration value.
add 7724c14 Referencing: added a CRS.fromWKT(String) convenience method and fixed some related javadoc.
add deb5f4c Improved javadoc.
add f6a56d1 WKT: warning message include the name of the root element.
add c225ced WKT 2: complete the support of VerticalExtent element.
add 445c322 Added tests for Extents.getVerticalRange(Extent).
add b8630c7 WKT 2: support parsing of LengthUnit, AngleUnit, etc. in AXIS[...] components.
add c9899e5 WKT 2: fixed the spelling of "Remark" (without trailing "s") and completed the support of "ID" keyword.
add 6b53217 WKT 2: Unit keyword is inconditionally "TimeUnit" for temporal CRS. This is because temporal CRS did not existed in WKT 1, so ISO 19162 does not make provision for backward compatibility in this case.
add 94ecdce WKT 2: refactoring of the parser in order to have better control on mandatory and optional elements.
add 1570e1a Feature: throw more accurate exceptions.
add 026a66b Feature: bug fix when the value to format is a collection.
add b98460c Feature: bug fix in the implementation of Dense/SparseFeature.equals(Object).
add 5887c1a Feature: hashCode() shall be consistent with equals(Object).
add 43b0fe2 WKT 2: implemented parsing of the CS[...] element, and use it in the easier cases where the expected CoordinateSystem type is known.
add 448c3b3 WKT 2 parsing: all CRS parsing methods use the parseCoordinateSystem(...) method.
add cad93a1 WKT 2: complete the parsing of AXIS element as specified in ISO 19162, except for the "BEARING" element which is deferred to a future version.
add c4b03f1 WKT: Renamed 'CharEncoding' class as 'Transliterator'.
add eab2ced WKT: give to user more control on transliteration of axis abbreviation to WKT abbreviation at both formatting and parsing time.
add b96e9f1 WKT: use the transliterator for mapping the axis names.
add 6d0eed4 Move AxisDirections internal class from 'sis-referencing' to 'sis-metadata' module for reducing the amount of methods in ReferencingServices internal class.
add cd63f31 WKT: delegate the decision to format Geocentric axis name to the transliterator.
add e565e43 Minor javadoc formatting.
add e1afbe2 WKT: minor javadoc.
add 1d64317 Add a link to the ISO 19162 section that this class tries to implement.
add 81a5e0d WKT: javadoc.
add c60517a More accurate links to WKT 2 specification.
add 1f0cbda Ignore HTML and TXT files in NetBeans IDE configuration.
add 72bfef4 Ignore PNG files in IDE configuration.
add e944ea1 Bug fix: localization of InternationalString according the value of XML.LOCALE at XML marshalling time.
add 3dcc6c5 WKT 2: initial support of "GeodeticCRS" element. This imply the merge of parsing methods for GeographicCRS and GeocentricCRS into a single method.
add 5e69e33 WKT 2: tests using some WKT examples provided in the OGC specification. We are adding those tests in GeoAPI conformance module. Apache SIS inherits them in the WKTParserTest class.
add bf35a2d Avoid usage of TestCase.NO_FACTORY field, which may become private.
add 4df801b Post-merge cleanup (for avoiding some conflicts in next merge operations).
add c8dbd33 WKT 2: replace all-lower case axis names by camel case axis names when the name is known. Axis names are not really free text. They are specified by ISO 19111 and ISO 19162. SIS does not put restriction on axis names, but we nevertheless try to use a unique name when we recognize it.
add 3035578 WKT 2: added documentation and more tests for Geodetic CRS.
add db0eb22 WKT 2: initial support of "ProjectedCRS" element in the WKT 2 way.
add 1adca96 Javadoc: minor CSS update.
add 049547a WKT 2: Parser shall ignore Convention.WKT1_COMMON_UNITS and Convention.WKT1_IGNORE_AXIS flags when it detects that the format is WKT 2.
add c1e0458 WKT 2: test and fix parsing of ProjectedCRS elements.
add c105cd5 WKT 2: added support for parsing of VerticalCRS element in the WKT 2 syntax.
add 2ca8263 WKT 2: tuned the parsing of EngineeringCRS.
add 7cfac7d WKT 2: tuned parsing of TimeCRS element.
add 95e51a6 WKT 2: be careful about sexagesimal units. Convert them to degrees when possible. Note that this is possible for parameters and prime meridian, but not fox axes (and consequently not for the unit that apply to a CoordinateSystem as a whole) because axis units apply to numbers outside the CRS definition.
add 5e89c9c WKT 2: parse ImageCRS.
add b6d4215 Add a KeywordCase.LOWER_CASE enum for completness with the UPPER_CASE enum.
add fdc8464 WKT 2: CS types are not quoted text. Also fix the detection of "Mean Sea Level" datum as VerticalDatumType.GEOIDAL.
add 8fa98a2 WKT 2: initial support of Derived Geodetic CRS parsing.
add 92b5058 Moved some mocks to the sis-utility modules in order to keep them together as much as possible.
add e60b92c WKT 2: add a mock for the "Pole rotation" operation method. This allow us to execute the GeoAPI test for Derived Geodetic CRS.
add 6bb5be1 WKT 2: added support for Derived Vertical CRS and Derived Temporal CRS parsing.
add b4b9968 Added a test for consistency of parsing/formatting using Convention.WKT2_SIMPLIFIED.
add d04198e Renamed test methods for making clearer which kind of CRS we test.
add e26e832 Modified order of test methods for more logical order. No change in the code.
add 65ca99a Added tests.
add bcf6d97 WKT 2: fixed the parsing of "Derived Engineering CRS from Geodetic CRS base" when the Geodetic CRS is three-dimensional. Added a TopocentricConversionMock for allowing us to run the GeoAPI tests.
add e4b074c WKT 2: fix parsing of Derived Engineering CRS from Projected CRS. Add an other mock for running GeoAPI test.
add 814a895 Adapt test method for name changes in GeoAPI, and add more tests.
add e41e006 WKT 2: add check of character validity.
add 7f489b2 WKT 2: add a test about the warning in case of invalid character.
add 99e56fe Add a warning about the fact that the WKT format is not lossless.
add f53dc98 WKT 2: more homogene behavior regarding contextual default units.
add 28766f0 Default axis order is (longitude,latitude) in WKT 1 but (latitude,longitude) in WKT 2.
add 6c2c3f3 WKT 2: implement parsing of CoordinateOperation (missing only the call to a factory method).
add 7748359 WKT 2: complete parsing of CoordinateOperation.
add d873da8 "Affine" operation can be both a Conversion or a Transformation, depending on the context in which it is used.
add 854396c Apply ISO 19162 recommendation to ignore leading and trailing spaces.
add dae3d3a Verify conformance of DefaultCompoundCRS to ISO 19162 at WKT formatting time.
add 50b7671 Log a warning when a WKT can not be fully parsed.
add 7fb85e9 Ported the support of WKT fragments.
add b63bc5e Javadoc fix.
add 32a515a Diversify WKT parsing tests.
add 0078817 Clarification in documentation.
add 890cf91 Build: report the test cases that produced log records.
add 6af5bb2 Do not log warning for GML "nil value".
add a74a957 Apply to 'ensureInRange' the same fix than 'ensurePositive': accepts arguments identified as GML "nil value".
add b458926 Allow integration tests to shutdown only after all TestSuites.
add adb1403 Move LoggingWatcher in the sis-utility tests so we can use it in other tests than metadata.
add 8d5ba38 Review the logger used by some messages, and test the warning produced by DefaultMathTransformFactory.
add 874db35 Consolidation of loggers: declare the name of the logger that we use in an internal 'Loggers' class. Deprecate the Logging methods that infer the logger name from the package name, because it sometime select a logger too close to implementation details (e.g. "org.apache.sis.internal...").
add f1274a2 Log messages at Level.FINE about Coordinate Reference System creations.
add 64df6be Consolidation in the use of loggers, especially regarding warnings during XML (un)marshalling.
add 88e003f Include the identifier codes in the WKT of CompoundCRS elements. This is a small departure from ISO 19162 recommendation, but still allowed. The reason is that we often need to decompose a CompoundCRS back to its original components, especiall the horizontal component.
add ad9a82e WKT formatting using Convention.INTERNAL should show the axes of base CRS.
add 662aec4 Allows to specify the factories to be used at WKT parsing time.
add e8ab99e WKTFormat.getFactory(Class) should be consistent with GeodeticObjectParser constructor.
add 3bd63e1 Maniac precision hunting.
add 9d4a4d4 Add "Lambert Conic Conformal (1SP West Orientated)" projection method (EPSG:9826).
add 06c3b57 Fix the code that generate the HTML page that list available projection methods. We need to ignore the "mock" methods created only for testing purpose, and to handle the "Affine" case in a special way.
add 336367a Add a note about the fact that we currently do not serialize the factories.
add dbceeba Modify the way we handle the "West orientated" case, keeping in mind that the "kernel" part of SIS projections used normalized (easting,northing) directions. The reversal of the 'x' axis from "easting" to "westing" is done outside the projection package, by the CoordinateSystems.swapAndScaleAxes(...) method.
add 7bd7185 Add the "Lambert Conic Conformal (2SP Michigan)" (EPSG:1051) projection method.
add be4fa76 Modification in the sorting order of coordinate operation methods.
add ffd5dca Analyzed the impact of using the series expansion given by §1.3.3 in Geomatics Guidance Note number 7 part 2 (April 2015) instead of the current iterative method. Our benchmarks show that the series expansion is twice faster than the iterative method for an excentricity relatively small like the Earth's one, but its precision decrease as the excentricity increase. Numbers are in the MercatorAlternative test class.
add fd7e0e9 More explanation.
add 8058585 Use the series expansion given by EPSG instead than the iterative formulas. The EPSG approach is twice faster, but less accurate for hight excentricity. In this first approach, we try to keep the best of both world by falling back on the iterative approach if the smallest term of the series expansion is not small enough.
add 91e0361 Use a threshold for checking when the planet's excentricity is too high for the accuracy of the series expansion. In such case, we will fall back on an iterative method.
add e1ae149 Renamed MercatorAlternative as MercatorMethodComparison and updated documentation.
add e092542 Review Lambert Conic Conformal formulas in light of §1.3.1.1 in IOGP Publication 373-7-2 – Geomatics Guidance Note number 7, part 2 – April 2015.
add 948d0e0 Renamed 'GeneralLambert' as 'AbstractLambertConformal'. There is no code change in this commit other than renaming.
add fb914bc Initial version of a TransverseMercator projection rewritten from scratch. We did not port the Geotk code, both for more legal safety and because the formulas changed anyway. The Geotk version use the USGS formulas, while Geomatics Guidance Note recommends the JHS formulas.
add 6240782 Do not project the coordinates if not needed.
add 5479345 Use trigonometric identities for reducing the amount of calls to Math.sin/cos.
add 0c4e487 Add "TODO" comments for code to complete later.
add e40e8f1 Added "Transverse Mercator (South Orientated)" operation method.
add 1d49205 Add projection identifiers and fix documentation.
add c511852 Rename the CENTRAL_MERIDIAN constant as LONGITUDE_OF_ORIGIN for better conformance with EPSG wording. Add documentation.
add 9ad2148 Initial commit of providers for the Stereographic projection. Missing: - Polar Stereographic (variant C) (EPSG:9830) - actual implementation (to be done in next commits).
add f1f1617 Fixed a wrong documentation.
add 0c6a092 Modify the symbol used in LambertConformal for consistency with the formulas published in Synder's book and other parts of the EPSG guide. In particular, PolarStereographic use "rho" for a variable which is playing the same role. Fix also some documentation holes.
add 7e0a578 Initial version of PolarStereographic projection, written from the equations in the EPSG guide. Not yet producing the expected result: we have a bug to correct.
add bb40413 Added a note about surprising class hierarchy.
add 7469846 Renamed 'AbstractLambertConformal' as 'ConformalProjection'.
add 9e0ae9e Moved some formulas related to conformal projections from NormalizedProjection to ConformalProjection. Moved the corresponding test methods too, and updated javadoc.
add 3cddc22 Fix the PolarStereographic projection (tests pass). Rearrange Mercator and LambertConformal code in order to have a consistent pattern accross all our projection implementations.
add e9e6268 Remove the comparison between elliptical and spherical formulas from the assertions in the main code. Instead, perform the comparison in the test suite with the help of ProjectionResultComparator. The reason is that performing comparisons in the main code was very difficult because of approximations in formulas (especially when using series expansion), for example in TransverseMercator for points far from the central meridian. This resulted in either assertion failures b [...]
add 6bdf35c Added some tests and documentation.
add a4c7e6d Added "Polar Stereographic (variant C)" projection method (EPSG:9830).
add d09ee9f Add the Polar Stereographic projections in the list of operation methods known to SIS.
add bcc1055 Separate the Stereographic North/South pole cases from variant B. We make this separation because the default values are not the same.
add 7d656fc Reduce the number of compiler warnings by either resolving the warning, or adding a @SuppressWarnings annotation.
add 4233813 Make some fields private when possible, and resole some other warnings.
add d4f5e30 Bug fix in the computation of scale factor at standard parallel in the North pole case.
add ea91b5d Fix an ambiguity when determine the projection variant by checking the OperationMethod name instead than the ParameterValueGroup name.
add bc94859 Minor rewriting of the case handling with standard parallel in North hemisphere. The intend is to be more consistent with the handling done in other projection classes.
add 55cd7a0 Fix the dependency to the ESRI geometry library in IDE project configuration.
add aa9bb84 WKT formatting: use scientific notation for small or large number, but not at the same threshold than the one used by default in the JDK. The reason is that ellipsoid axis lengths expressed in feet are around 2.1E+7 but are still commonly formatted in non-scientific format.
add d625659 WKT formatting: merge consecutive synthetic affine transforms.
add e75c510 WKT: Convention.INTERNAL should display the real internal parameters used by a map projection implementation. Those internal parameters are very different than the public parameters, but are sometime needed for debugging.
add 6fe4eca Renamed LambertConformal as LambertConicConformal for compliance with common usage.
add fbec2c0 Consolidation of the tolerance threshold when comparing objects: try to use thresholds having a physical meaning: - LINEAR_THRESHOLD (1 cm) when comparing the Ellipsoid axis length, - ANGULAR_THRESHOLD (equivalent to about 1 cm on Earth) when comparing the PrimeMeridian Greenwich longitude, - A threshold computed in a way that describe an error of about 1 cm on Earth when comparing map projection excentricity.
add 9eea320 Add a tolerance threshold when checking if a "synthetic" matrix computed during WKT formatting is the identity. Add comments explaining why the tolerance threshold is set to ANGULAR_TOLERANCE for those particular matrices.
add 6455faf Added a Builder(IdentifiedObject) constructor for allowing usage of an existing object as a template.
add 584be1c Added comments for readability.
add f1a11be Moved the code used for map projection initialisation in a separated Initializer class (package private). Opportunistically use more double-double arithmetic. While the digits modified by this extra-precision are not significant, the intend is not to increase map projection accuracy but rather to improve the result of concatenations of MathTransforms (through an attempt to improve the result of matrix multiplications and inversions).
add a3b6973 Fix: sqrt() of 0 was producing NaN.
add a7f4222 Partial rollback of the use of double-double arithmetic in map projection initialization. Our usage of double-double arithmetic has proven its value in matrix operations, but has less value in NormalizedProjection subclasses after the point where we use transcendental functions (sine, logarithmic, etc.) because we have no double-double versions of those functions. By reducing double-double arithmetic usage in those cases, we keep the code more readable and avoid to give [...]
add cafa019 Minor consolidation: factor out the computation of semi-minor axis length and inverse flattening factor, provide some analysis in the comment about the accuracy.
add e26fab7 Allow NormalizedProjection constructors to know whether the second defining parameter of the Ellipsoid is the semi-major axis length or the inverse flattening factor, and in the later case allow constructors to get the definitive flattening factor in order to compute the excentricity more accuratly.
add 42a81b6 Minor documentation (no code change).
add 94ce255 Less missleading error message if the user gives the internal Anchor class in argument to the constructor, and if that object is incomplete.
add 522d566 Final adjustement (for now) about where to use double-double arithmetic and where it is not worth.
add 54032a6 Update depencencies to newer versions.
add 38fc4da Enabled the NewlineAtEndOfFile checkstyle rule.
add 6001b63 Enabled the RedundantImport and GenericWhitespace checkstyle rules.
add 75ba1f9 Javadoc adjustment: make group in overview closer to the modules content.
add 33aceed OSGi metadata (SPI FLY)
add 6c2ed57 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3002.
add d28fcea Javadoc fixes.
add e61e780 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3003 and 3004.
add 4f1fdd3 Added Geospatial Integrity of Geoscience Software (GIGS) tests 3005.
add f2cf73a Partial JAXB annotations for GML (un)marshalling of DefaultParameterValue (SIS-159).
add d507de4 Complete the <gml:ParameterValue> support with the (un)marshalling of the <gml:OperationParameter> element. This is a little bit tricky since the DefaultParameterDescriptor.valueClass property is mandatory in SIS but not part of GML, so we have to infer it from the enclosing <gml:ParameterValue>. Since <gml:OperationParameter> may not be always enclosed in a <gml:ParameterValue> element, we also make the code a little bit more robust to null descriptor and null valueClas [...]
add 53508ad Added JAXB annotation to DefaultParameterDescriptorGroup for <gml:OperationParameterGroup> support.
add 0473c49 Partial support of <gml:ParameterValueGroup>. Still missing the handling of the ParameterDescriptorGroup under the <gml:group> element.
add 289acc4 Completed JAXB annotations for <gml:ParameterValueGroup> support.
add 6b80948 Upgrade from ISO 19111:2003 to ISO 19111:2007.
add 4c92f41 Update for GeoAPI change: CoordinateOperation.getOperations() returns list of CoordinateOperation instead than SingleOperation. This is an upgrade from ISO 19111:2003 model to ISO 19111:2007 model.
add 1073a80 Relax the restriction on the type of elements in the CoordinateOperation[] argument given in constructor. This is a consequence of the upgrade from ISO 19111:2003 to ISO 19111:2007 model since PassThroughOperation is no longer a SingleOperation.
add 0f3421b Renamed XML test files for making clearer which kind of object we are testing.
add 5e9e181 Trivial addition of white line for making the formatting consistent with other XML test files.
add 1890b1b Allow reusing an internal convenience method for marshalling InternationalString as localized String.
add e2daa5a Add a missing @XmlSchemaType, and trivial formatting.
add 48dea94 Fix a warning and a typo.
add d3ce617 Add JAXB annotations on DefaultOperationMethod.
add 497f74d Consolidation of JAXB annotations on DefaultOperationMethod and parameters: - Delegate more works to JAXB adapter classes. - More effort for merging information provided by duplicated parameter descriptors.
add acc9fcd Fix incomplete tests: missing 'Assert.fail' statement if the expected exception wasn't thrown.
add d538b12 Add tests for CC_GeneralOperationParameter.java JAXB adapter.
add 027c76c Add test for CC_OperationParameterGroup JAXB adapter.
add 30bbfee Complete CC_OperationParameterGroup test with a case for merge operation.
add 3d0999e Use public class as the source of logging messages.
add 14340fe Add a test for CC_OperationMethod. For now, we add this test in CC_OperationParameterGroupTest in order to leverage existing data.
add bdad20c Add test for <gml:Conversion> unmarshalling.
add 07e66bc Add JAXB annotations on DefaultTransformation.
add d767540 Verify the parameter value in <gml:Conversion> test.
add df51ee9 First draft of a <gml:Transformation> test.
add bb6f3e1 Add GML (un)marshalling of CoordinateOperation.sourceCRS and targetCRS.
add 917ab14 Reconstruct the MathTransform after <gml:Transformation> unmarshalling.
add 2466ea0 Add links to the JIRA task.
add c0504b4 Add links to other JIRA tasks.
add 4e5186d Replace set of methods annotated with @XmlElement by a single method annotated with @XmlElements. https://issues.apache.org/jira/browse/SIS-166
add dc25bcd Add test case for ImageCRS WKT and XML formatting.
add 5ecc1ff More straightfoward checks for duplicated property assignations.
add 8593f6c Clearer separation before the part for Geographic Markup Language (GML) support.
add 0b62482 Group together the private methods that are provided only for JAXB support. The intend is to isolate what will need to be removed when porting to Android, or to make easier the task for anyone who decide that he doesn't need XML. As a side effect it makes more visible the cost of supporting this format since we can see the amount of code added in some classes.
add 31d98c7 More accurate description about where the SIS-166 fix can not be applied, and consolidate the workaround.
add 4c22e80 More liberal use of afterUnmarshal(Unmarshaller, Object parent) when needed. Experience suggests that the JVM does not load JAXB dependencies as aggressively as we feared.
add dc6dd96 Complete test files.
add ef629d6 Safety checks against some NullPointerException.
add 3ab603f Initial support of <gml:ProjectedCRS> (un)marshalling.
add 42c97a2 Test consolidation.
add 28df8d6 A little bit more tests.
add 440acdd Update for GeoAPI change (renamed 'assertTitleEquals' as 'assertAnyTitleEquals').
add 93c13b7 Fix a hole in support of <gml:OperationParameter>: take in account that identifiers and aliases are collections when merging two descriptors.
add 61625e9 Added comments and a check against too strong restriction on parameter values.
add 5f1da3f Change default formatting of Convention.WKT2: follow ISO 19162 recommendations regarding short versus long keywords and usage of upper-case keywords. Users can still congigure WKTFormatter explicitely if they want another formatting style.
add e0afa42 Allow the command-line to display the CRS in WKT format.
add 95ed585 Use 'StrictMath' instead than 'Math' in tests.
add 1db4f11 Minor tweak in syntax coloring for the command-line.
add 94f1059 API simplification: remove the public 'addDeprecatedName' and 'addDeprecatedIdentifier' methods. Instead, rely on the 'isDeprecated()' status.
add 5731e98 Updated the list of coordinate operation methods.
add 05dc5c8 First draft of a derivative function, not yet simplified.
add fe7d998 Use trigonometric identities and factor some common terms.
add d26dd6e Update code formatting for derivative projection implementation.
add ab3a50e Added the spherical implementation of TransverseMercator projection.
add 0490ea0 Register TransverseMercator provider for use with java.util.ServiceLoader and enable ignored tests.
add c19972e Add WKT test for Transverse Mercator.
add f0591ba Added a test for the "South-Orientated" case.
add 3949f59 Fix an accuracy problem identified by the test added in the previous commit. As a side effect of this fix, the internal AffineTransform2D class can no longer be mutable.
add 017233f Minor documentation fix.
add f21f9b3 Bug fix: unmarshalling of Enum value was lost if the name contains more than one word (SIS-297).
add 2ed8d9d Refactor Trigonometric identities formulas.
add 06c0957 Minor reformating, and apply the same identities to inverse transform.
add f7d8d7f Port fixes from the SIS-0.6 branch.
add b600003 Upgrade version number to 0.7-SNAPSHOT for the next development cycle.
add 59989a1 Post-release cleanup: remove some deprecated methods.
add 0d73e57 Bug fix: do not cache empty ranges.
add ffc5e36 WKT formatting: try harder to use the name of the requested authority when formatting an OperationMethod.
add 730a3aa Starting the helper tools for building the developer guide.
add cae9f7b Generate table of content.
add e21020a Minor formatting in HTML output.
add f29e38e Ported the developer guide GeoAPI section.
add aab2940 Use a little bit more of HTML5 semantic tags in <aside> elements. The <aside> elements that could have been published in separated pages are replaced by <article> elements.
add e1cc34f Added section numbering.
add 4b47347 Move CoordinateOperationMethods.html from 'content' directory to 'book/tables' directory.
add a93b2b7 Add links to previous and next chapters.
add 1d0b51c Use a separated exception for problems related to the content of the files used for building the book (e.g. missing identifier for a chapter).
add 7afef05 Addition of per-chapter table of content.
add 426c746 Localization.
add 0bafe99 Added documentation.
add 941fbb9 Begin replacing manuar code colorization by an automatic one (for now just applied on Java keywords). After completion of this tools for the developer guide, we may use the same tool for javadoc too.
add aec07b0 Put comments in light gray and quoted strings in italic.
add 74bd355 Initial list of OGC/ISO and GeoAPI identifiers to recognize when formatting the developer guide.
add cf6e5db Simplify a little bit the developer guide source files by removing the "class" attribute of many (but not all) <code> elements. Those <code class="..."> attribute values are now inferred from a list of known identifiers when building the guide.
add afb7ed3 Rename the file containing the list of identifiers.
add 39095c9 Javadoc update, and deprecate a convenience method which is not worth its weight.
add 1d6c9e6 More conservative way to search for an OperationMethod alias: search in the ParameterDescriptorGroup associated to the enclosing object. At least that descriptor has some association (even if indirectly) with the OperationMethod being formatted, as opposed to the previous approach which was searching unconditionally in the hard-coded system-wide aliases.
add 6de3f14 Fix a NullPointerException.
add 9d74824 Documentation and variable name fixes (no significant code change in this commit).
add 8bf6b0e Tune the application of trigonometric identities in map projections.
add c81e768 Factor out some more constants (only when rewriting the equations with trigonometric identities) using the same technic than the one we used for Lambert Conic Conformal. Actually the saving of a few multiplications is probably unnoticeable, but the main intend is rather to see some more symmetry emerging from the formulas, which is often a good sign in map projection implementations.
add ae674a3 Minor formatting and javadoc (no significant code change).
add 6904b19 Refactor TransverseMercator as a ConformalProjection subclass.
add a3da3bc Close SIS-81 as "will not fix". This commit contains documentation changes only.
add 0dd8b4c Partial fix of holes in metadata immutability (SIS-107).
add 0bb7c21 Refactor the IdentifierMap internal implementations in order to allow construction of unmodifiable map (SIS-107).
add f00dff2 Allow DefaultRepresentativeFraction to be immutable (SIS-107).
add 444b3b2 Remove a OtherLocales method which was duplicated in CollectionsExt.
add fff22e5 Ensure that gml:id in all AbstractIdentifiedObject subtypes are unique in a XML document.
add eaad206 Initial support of xlink:href referencing gml:id (SIS-173).
add ca1a253 Fixed a NullPointerException when viewing a RecordType which has been read from a GML document.
add 8ee01cd Take advantage of xlink:href in some test files.
add f183f69 Check also in the list of aliases for inferring a gml:id. Give precedence of gml:id over uuid or other xlink.
add 0e2820d Fix some javadoc warnings.
add a9df401 Support xlink:href="#foo" in ISO 19139 documents too.
add fab9088 Avoid ambiguity in a local variable name.
add 4c3ba84 Emit a warning of no object is found for a xlink:href. Add some documentation.
add 8d5bae7 Add some missing @XmlSchemaType annotations (SIS-286).
add f7098b4 Replace javadoc annotations by Java annotations in Mojo (SIS-75).
add b728563 Tests suggest that we do not need explicit declaration of maven-plugin-plugin.
add 9f363f7 Updated some dependencies.
add ae84f34 Revert the removal of build configuration for the Mojo. It seems to be required by the build on Jenkins server.
add f5633ec Upgrated the Jetty plugin (SIS-111), but we had to change a little bit its configuration. https://www.eclipse.org/jetty/documentation/9.3.0.v20150612/jetty-maven-plugin.html
add cfff07d Avoid a random test failure.
add b3e283b Jetty 9 use a different way to specify the port than what Jetty 8 did.
add f7ab630 Removed files from the old day when we where generating a Maven web site. Those files were obsolete because not maintained.
add 114bd57 Add path to GMD schema.
add 68a9876 Initial support of GML for DerivedCRS (SIS-294).
add cf8554c Complete GML support for CompoundCRS (SIS-159).
add 5bec346 Tests also ProjectedCRS marshalling (after unmarshalling).
add 34bea6f Test also gml:id values.
add 2cd7180 Relax the restriction on use of '_' in resource keys.
add 2c259e0 Add GML support for DefaultConcatenatedOperation (SIS-292).
add 7d55d11 Renamed OperationMarshallingTest as SingleOperationMarshallingTest since ConcatenatedOperation has its own marshalling test.
add 852ceb3 Identifier shall not be marshalled in "urn:ogc:" namespace if the authority is not one of the authorities recognized by OGC.
add 403a8bd Opportunistically exploit the fact that we had to remove the 'final' keyword on some fields (required for JAXB unmarshalling) for simplifying constructors of various CoordinateOperation subtypes.
add f0a2086 More tests for ConcatenatedOperation GML marshalling.
add b25f037 More documentation explaining the reason for the (object instanceof DefaultGeodeticCRS) check (side-effect of the work on ConcatenatedOperation GML support).
add d7a62ec Add GML support for PassThroughOperation.
add 93915ee Update a version number tht we forgot to update in a commit done last month.
add 5343075 Projection : add Radius Conformal Sphere computing into Initializer class and add relative test
add 67ec28f Projection : Add ObliqueStereographic projection and relative tests
add 453dd61 Fix the order of XML elements in MD_Identifier and RS_Identifier (SIS-301).
add 1fd5907 Projection : fix unexpected javadoc tag
add dae25dc Projection : update serialVersionUID of ObliqueStereographic
add 8ac0711 Minor formatting (no code change).
add 9389fc8 Add paths to XSD where the XML definitions of referencing objects come from.
add 1849af1 Clarification on the use of Names at (un)marshalling time.
add 9c407a2 Allow user to override the properties to be marshalled, and do some verification on the integrity of unmarshalled CRS objects (SIS-295).
add f4b31f8 Projection : Add ObliqueStereographic spherical case and relative tests
add 39cb5f9 Rearrange oblique stereographic tests for more uniformity with other tests.
add d3db241 Projection : ObliqueStereographic, update tolerance for spherical and geodetic mathematical formulas comparison tests
add 34d472b Simplification of some ObliqueStereographic equations. Attempt to provide more uniformity in projection code formatting.
add 40f908d Allow ObliqueStereographic to delegate to PolarStereographic when the latitude of origin is a pole. Register the ObliqueStereographic projection on the list of supported projections.
add 47e1344 Added tests.
add 191c8e0 Minor documentation and a bug fix.
add c5614ad Dependency update.
add f173f8b GeoAPI interface "Enumerated" has been renamed "ControlledVocabulary".
add 3e9c14b Allow substitution of <gco:CharacterString> by CodeList as (un)marshalling time (SIS-124).
add 5ca3968 Renamed the "CodeListProxy" internal class as "CodeListUID" (for "Unique Identifier") in order to better reflect its purpose.
add b1227c0 Use @XmlElementRef for RS_Identifier as well.
add adf26c8 Minor documentation fixes.
add 700452a Initial port of geocentric affine operations. The EPSG codes are not right (we should use the code for the geocentric domain instead) - we will fix them in the next commit.
add e444a16 Fix EPSG codes for operations in the geocentric domain (used by GeocentricAffineTransform).
add 9f17792 Added UML annotation for allowing SIS to pickup the right name in XML documents.
add c8a0c42 Slightly more robust check for inverse transforms of linear operations.
add 391148a Since ProjectiveTransform is not a public class, make final the methods that we do not intend to override.
add 9d03d4b Abandon the approach consisting in using a special ProjectiveTransform subclass for geocentric translation. The intend was to allow formatting of Bursa-Wolf parameters instead than affine coefficients in Well-Known Text (WKT). Instead, we will try to achieve the same goal by overriding the 'beforeFormat' method. The reason is that we already have various affine transform implementations depending on the affine case, and more may be added in future versions. The Geocentri [...]
add c494906 Initial port of Geographic to Geocentric conversion (SIS-257).
add d3194c4 Initial implementation of the Geocentric to Geographic conversion.
add 1449c4d Complete the implementation of Position Vector Transformation and Coordinate Frame Rotation in the geographic domain.
add 000c497 Added test for the derivative of Geographic/Geocentric conversion, with bug fix in the two-dimensional geographic case.
add c15fcda 1) Override a wrong charset defined in a DBase file Passing the property record_charset=<a charset> on Driver.connect(url, Properties) function, allows to override a wrong charset defined in a DBase file, or set one when they are none.
add 16c2019 A little bit of uniformisation in the loops for iterative methods.
add 5138f4d Documentation and added serialization test.
add e148ed1 EllipsoidalToCartesianTransform.Inverse.derivative(DirectPosition) implemented in a way which, indirectly, invoke a method that the user can override. The intend is to keep consistency with other methods that the user can override.
add f5158ff Fix WKT formatting of "Geocentric_To_Ellipsoidal" transform.
add 45a6cb2 Well Known Text (WKT) formatting of datum shift operations.
add 15a2e50 Added a test for PositionVector7Param and documentation.
add 5b56fd8 Revised charset management on Dbase files. Querying data will allow no charset defined in Dbase file and then default to the system one, with a warning.
add 6d56245 Fix a misplaced closing bracket in the documented Well Known Text (WKT).
add cc5e6c0 Reorganize the providers for operations performing datum change (internal SIS classes only). The operations that operate in the geographic domain and moved as subclasses of GeocentricAffineBetweenGeographic. Molodensky operations are defined as subclasses of GeocentricAffineBetweenGeographic because they are approximation of the "Geocentric translations (geographic domain)" operation.
add dfbaf91 Fixed code formatting inconsistencies. This commit contains mostly changes in amount of spaces - there is no significant code change.
add cca32ab Add registration of (Abridged) Molodensky operation method.
add 0461541 Reorganize test order.
add 6f13bf8 Fix a javadoc warning.
add d9cd877 Partial implementation of Molodensky transform. This still a work in progress, but there is enough for running some tests.
add 35cbd59 Suppress some compiler warnings and minor formatting.
add e6806d1 Provide default Parameters.toString() implementation.
add 12f8b73 Add convenience method for computing the difference between flattening factors.
add 9dbcf1d Try to share existing instances.
add 7eaa748 Refactor of MolodenskyTransform using a little bit more of services provided by DefaultEllipsoid.
add f914f9e EllipsoidalToCartesianTransform and MolodenskyTransform force usage of static factory methods (not anymore just convenience methods). Added MolodenskyTransform2D (part of the reason why we need to force usage of static factory methods). Moved documentation about units of measurement in the appropriate contructor or factory method. Complete implementation of Molodensky provider.
add 8150252 Rollback the attempt to do too much analysis of unit of measurement in Molodensky. The OGC 01-009 specification said explictly that heights are in metres anyway. In MolodenskyTransform, fix the documentation about units of measurements.
add e15f75b Minor simplifications: - Molodensky.optional checks for null values instead than catching IllegalStateException. - ContextualParameters does not cache anymore the inverse matrices. Instead we keep a reference to ContextualParameters for the inverse operation and rely on its own caching.
add 171c026 Initial support of Molodensky.inverse(), getParameterDescriptor(), getParameterValues() and WKT.
add 914ba0e Replace the bitmask by straightforward booleans.
add 14672f9 Initial port of the Molodensky derivative formulas.
add 66ce669 Fixed a wrong condition about the FeatureType that can be associated in a Feature object.
add 281eb52 Added more tests.
add fa5d761 Fix wrong French resources for the developer guide.
add c03e5da Load multiple parts polygon from shapefile.
add aadff23 Enable Pattern.MULTILINE as an attempt to address end-of-line style issue (Windows versus Unix).
add a966471 Multiple calls are made to Polygon.startPath() when a polygon has multiple parts.
add 1c52f53 Developer-guide generator: allow word break in some <code>...</code> expressions, and add some keywords to recognize.
add 658c6ad Update in NetBeans project configuration (generated automatically by NetBeans 8.1).
add fb1e729 Try to make the test pass under Windows style of EOL.
add 9783c0b Added tests.
add d0bbf39 Replace "excentricity" spelling by "eccentricity".
add 25d2309 Simplify the MathTransform WKT in Convention.INTERNAL mode by omitting the unit of measurement if equals to the default unit. This make the debugging WKT much less verbose.
add 385748e SIS-260: Implemented the "Geographic 3D to 2D conversions" (EPSG:9659) While this operation is in principle very trivial (just drop the last ordinate value), a difficulty is to ensure that the inverse of that operation set the ellipsoidal height to zero instead of NaN. Since this operation is often just before or after a "degrees to radians" conversions, those two steps have been put together in a new ScaleTransform package-private class as an optimization of ProjectiveT [...]
add ff3297a Automatic update of NetBeans project configuration.
add c38aa28 Shapefile Features type, descriptor and database fields descriptors are avaiable in the Shapefile object by calling the methods : public DefaultFeatureType getFeaturesType(); public ShapefileDescriptor getShapefileDescriptor(); public List<DBase3FieldDescriptor> getDatabaseFieldsDescriptors();
add f74e12d Format "Geographic/Geocentric conversion" in the two-dimensional case as a concatenation with the "Geographic 3D/2D" conversion. This is at WKT formatting time only - the objects in memory are different (they are matrices). Opportunistically fix indentation of first element in CONCAT_MT[...].
add f6a2af6 Bug fix in formatting of "INVERSE_MT[...]": in some cases we concatenated a matrix which was not supposed to be there.
add 4f77169 Avoid the use of the non-standard "DIMENSION" parameters in "Geographic/Geocentric conversions". This force us to improve the concatenation of EllipsoidToCartesianTransform with affine transforms in order to detect if an affine transform is actually a "Geographic 3D to 2D" conversion or conversely. As a side effect, we had to refactor the 'removeRows' and 'removeColumns' matrix operations in order to preserve the double-double precision when it exists.
add 208e939 Renamed EllipsoidalToCartesianTransform as EllipsoidToCentricTransform in order to keep room for conversions to spherical CS in addition to Cartesian CS (most of the class is identical; the spherical case could be handle with a small "if" condition). This change also make the class name closer to the OGC operation name, which is "Ellipsoid_to_geocentric".
add 5ef41a0 Add a TargetType enum in the EllipsoidToCentricTransform API in anticipation for the support of the spherical case. For now we support only the Cartesian case, but we make the API ready for addition of other coordinate systems later.
add 6ccb318 GeocentricAffineBetweenGeographic now create the Geographic/Geocentric steps directly instead than through the MathTransformFactory, for efficiency and also for robustness since the GeocentricTranslation and other operations created here are designed for working with the SIS implementation of Geographic/Geocentric conversions.
add 6b6b6c8 Provide link to SIS tasks and remove a method not needed anymore.
add dd82490 ShapefileDescriptor lacked the getters to get its useful values.
add 86bc3a7 Added "Geographic offsets" operation methods.
add 7f4f38b Replace some HTML formatting by Unicode characters.
add ca3eb5b Add "Vertical Offset" (EPSG:9616) operation method.
add 22ba458 Modify the DefaultMathTransformFactory API in a way that allow us to infer more accurately which of the "semi_major", "semi_minor", "src_semi_major", "src_semi_minor", "tgt_semi_major" and "tgt_semi_minor" parameters should have their values inferred from the source and target geodetic datum. We do that by introducing a new Context argument, overload the 'createParameterizedTransform(...)' method with a new version expecting that Context argument and deprecating the old one.
add 22492d4 Take in account the way EPSG handles axes of opposite directions in the "Vertical Offset" operation method.
add e76e203 Safer checks against integer overflows.
add 8829e4d Partial work toward datum shifts based on grid files (NADCON, NTv2, RGF93).
add 4aa7e9f Move DatumShiftGrid into the datum package and make it public, which remove the need for the CoordinateOffsets interface.
add 0b92b8e Moved part of Molodensky formulas in new super-class. The intend is to share the formula with InterpolatedGeocentricTransform.
add 99ec05d Minor documentation fixes.
add 99a4576 Added a test case for FranceGeocentricInterpolation.
add 4026909 Support conversion of File, URL or URI to java.nio.Path in ParameterValue.setValue(Object).
add 5f18de4 Initial implementation of InterpolatedGeocentricTransform (forward transformation only; the inverse transformation will require an iterative approach as documented in NTG_88).
add b2ab9a6 Remove the flexibility on the number of dimension of 'derivative(DirectPosition)' where is was not needed (MolodenskyTransform). Keep that flexibility only where it was really needed (EllipsoidToGeocentricTransform) and add a comment explaining why that flexibility is needed in that particular transform.
add 61beaca Extent the "France geocentric interpolation" in order to allow support for other regions than France (unfinished work). This force us to declare non-EPSG parameters because EPSG defined this transformation only for France. We keep the parameters close to the Molodensky ones (including the OGC parameters) with (TX, TY, TZ) replaced by the grid file.
add f76cf69 Rearrange the Molodensky parameters in a way more consistent with other transforms.
add 7b73448 Move the FranceGeocentricInterpolation.Grid implementation in a new DatumShiftGridFile class in anticipation for NADCON and NTv2 datum shift grid files support.
add d2abd24 - Bug : DBase III reader was reading all the records of a DBF, except for the very last. - Shapefile constructor will attempt to respect the same case than ".shp", ".SHP", ".Shp", to deduct a ".dbf", ".DBF", ".Dbf" file associated. - New constructor added to Shapefile to give the ability to design another DBase file with the Shape file than the one the first constructor would deduct.
add 402164a Fix DatumShiftGridCompressed creation and add more tests.
add 0bf4898 Move the tests that perform a coordinate transformation into the 'transform' package.
add 0bab97f Apply the France-specific TX, TY, TZ geocentric translation terms only if we detect that the datum grid shift file is "GR3DF97A".
add 2d67841 Removal of DEPARTEMENT shape and DBase files.
add b5f2c2f Fix inconsistencies between the parameter descriptors and the parameter values set by InterpolatedGeocentricTransform. This fixes exceptions thrown during 'toString()' or 'toWKT()'.
add 3c8ece7 More rigorous checks in situations where an ellipsoidal coordinate system (EllipsoidalCS) is involved:
add acf7799 Implement InterpolatedGeocentricTransform.equals(Object). This implies implementing DatumShiftGrid.equals(Object) too.
add fee803a Express the DatumShiftGrids envelopes in radians instead than degrees. Since those grids are "low level" objects, majority of users will not handle them directly.
add 81fbbeb Initial support of inverse of InterpolatedGeocentricTransform. This inverse operation require an iterative process during the coordinate transformation. For now, we iterate only once as suggested in the NTG_88 document.
add 1b63a77 Bug : Removal of bytes values lower than space at the end of the string must be made considering byte value as unsigned.
add f9d2644 Add more tests, especially comparing Molodensky with Geocentric translations. Molodensky method is an approximation of Geocentric translations and we want to quantify better how good the approximation is.
add 11b5d40 Complete FranceGeocentricInterpolation support:
add 4a2222f Renamed the GR3DF97A.txt test file as GR3DF-extract.txt for making clear that it contains only a small subset of the data (less than 0.14%). Minor rewriting of bilinear interpolation code in DatumShiftGrid for reducing the amount of multiplications.
add b3749bb Reorder the files to be ignored and add some ide-project subdirectories to the list of files to ignore.
add 6a0457d Redesign DatumShiftGrid API in an attempt to make it safer: - Unit of measurement are explicitely declared. - Input units are no longer required to be radians. - Separated the interpolation method in two methods: 1) one expecting "real world" coordinate (only a convenience method which delegate to the method below), 2) one expecting a coordinate in grid units. This is the method really used by InterpolatedGeocentricTransform.
add 12ed2e9 Add InterpolatedTransform class and support for NTv2 datum shift grids.
add d02fc3a Add support for NADCON datum shift grid files.
add 8d38736 Add the two-dimensional case of InterpolatedTransform.
add 71a0744 Fix erroneous example in documentation.
add 56b0746 Use the SIS_DATA environment variable for the directory where to search for datum grid files.
add 71e2241 LinearTransform.inverse() should return an instance of LinearTransform.
add 8aaa758 Add missing parameter types and remove unneeded IOException.
add 13c96ff Port the TransformSeparator class. Fix a subtle bug in AbstractLinearTransform.equals(Object).
add 7c0429f Base class of authority factories.
add 60089b6 SIS-305 : Shapefile reader should be able to use .SHX (shapefile index) Shapefile receives a new method : shp.find(String sqlStatment);
add 7080c5e Add @see javadoc annotations.
add 0f7b03b Initial port of CachingAuthorityFactory - still incomplete. We commit this incomplete class before to retrofit ThreadedAuthorityFactory into CachingAuthorityFactory in case we want to re-separate those classes in the future.
add 2e6ecb7 Retrofit 'ThreadedAuthorityFactory' (from Geotk) into CachedAuthorityFactory.
add e1c9af2 Renamed CachedAuthorityFactory as ConcurrentAuthorityFactory.
add cc2f630 Add hyphenation support to Javadoc doclet.
add 8bfd6b0 "sis about" command on a distant machine should report to user the warnings, if any.
add d2ba10b Port more tests.
add 98480a8 Removed the getBackingStoreDescription() method. Instead, suggest a location in the citation returned by getAuthority().
add 4c6d64b Fix javadoc warnings.
add fb41987 Port authority factory for CRS:84, CRS:83 and CRS:27 Add support of CRS:1 and CRS:88 (NAVD88).
add 6793290 Add test case for AuthorityFactoryProxy.
add 388a0da Add tests for IdentifiedObjectFinder.
add d90a3dd CommonAuthorityFactory.getAuthorityCodes(Class) can filter according the given type. Improved some javadoc.
add 2edf632 Rename InterpolatedGeocentricTransform as InterpolatedMolodenskyTransform, and rewrite InterpolatedGeocentricTransform on top of real geographic/geocentric conversions.
add 8a5d103 Consolidation of DatumShiftTransform.
add e861c07 Begin the port of EPSGFactory.
add 428c3b6 Revisit the policy about AuthorityCodes disposal of JDBC resources. Port more EPSGFactory methods.
add 2b87813 Moved DeprecatedName and DeprecatedCode in internal package so we can reuse them in EPSGFactory. Opportunistic trivial reformatting of "//" comments (inserting more space between code and comment).
add 6ad0aa7 Reorder the EPSGFactory methods in order to keep related methods closer to each other. Log a warning when a deprecated code is requested and provide information about the replacement. Give control on the locale to use for error messages.
add 9441ddc First real geodetic methods in EPSGFactory: createEllipsoid and createPrimeMeridian.
add fcc8db6 Provide a shutdown hook for ConcurrentAuthorityFactory to be executed either when garbage collected, at JVM shutdown time or when the OSGi or Servlet container uninstall the bundle.
add 96074f0 Provide more information in the "SIS about" command: - The remote server where the information came from. - The logging level for loggers used by SIS.
add c817b9f Ported EPSGFactory.createCoordinateSystem(String) method.
add 9b93d3e Reordered private methods in EPSGFactory and ported 2 more private methods.
add 2b9f9a4 Initial port of EPSGFactory.createBursaWolfParameters(code).
add 1178a78 Port EPSGFactory.createDatum(String). Simplify EPSGFactory.createBursaWolfParameters(...) by targeting only a hard-coded list of datum (for now WGS84). This is okay since that method was for constructing the TOWGS84 element in WKT 1 format, and TOWGS84 is now deprecated as of WKT 2 (ISO 19162).
add 46c189d Removed the support for time-dependent Bursa-Wolf parameters when used through the deprecated TOWGS84 element, because that legacy WKT 1 element is not designed for those time-dependent parameters anyway. Time-dependent Bursa-Wolf parameters will be supported, but only through the non-deprecated coordinate operation methods.
add f26ec36 Port EPSGFactory.createCoordinateReferenceSystem(String). Partial port of map projection parameters.
add cdef6f8 Javadoc only (no code change).
add 7fc7371 Javadoc: - Use the EPSG::#### syntax instead of EPSG:#### - Add EPSG codes for Extent and CoordinateSystemAxis - Add @see tags in geodetic object contructors - Fix broken Javadoc for Units#valueOfEPSG(int)
add c8cb6b9 Initial port of EPSGFactory.createCoordinateOperation(String) method.
add 638a888 Port of EPSGFactory.createFromCoordinateReferenceSystemCodes(String, String).
add 6c87980 Port EPSGFactory.createIdentifiedObjectFinder(Class).
add a1282c3 First draft of an EPSGDataset which get the connection to the EPSG database from a DataSource.
add 6720495 Renamed EPSGFactory to EPSGDataAccess for making clearer that it acts as a Data Access Object (DAO). Renamed EPSGDataset as EPSGFactory.
add ea2aae4 Attempt to simplify EPSGDataAccess: - Abandon the possibility to use EPSGDataAccess alone (without EPSGFactory as a parent). - Abandon the EPSGDataAccess.createObject(String) optimization (this method should be avoided anyway). - Merge the calls to trimAuthority, prepareStatement and executeQuery into a single call. As a side-effect, this allow us to use only one try ... catch block in methods where two blocks were needed.
add fdd8b49 Initial port of the code in charge of adapting SQL statements from the MS-Access syntax (the original distribution format of EPSG dataset) to the syntax used in the Data Description Language (DDL) scripts provided by EPSG.
add 15c5bac Renamed SQLAdapter as SQLTranslator, taking inspiration from existing projects on the web.
add 1143aae Documentation fixes.
add 714eb1c Renamed createBackingStore() as newDataAccess(). The "DataAccess" part is for matching the name used in DAO. The "new" prefix instead of "create" is for differentiating this method from all the other 'create' methods inherited from GeodeticAuthorityFactory, which perform a very different task.
add 196328b Make javadoc and field names consistent with the renaming of "backing store" as "data access". Also make the 'close()' method to just close the JDBC connections, not to clear caches.
add 29edbf4 Bug fixes and first GIGS tests for EPSG factory.
add 6c8f587 Detect sooner (at EPSGFactory construction time) when no EPSG database is available.
add 7c0ad25 Control the location where 'derby.log' file is written.
add 1fc9ec8 Bug fix: creation of ProjectedCRS or DerivedCRS shall not modify the parameter values of defining conversion. The reason is that the same defining conversion can be used by more than one CRS, with different source and target ellipsoids. To protect defining conversion against changes, this commit add an UnmodifiableParameterValueGroup class.
add c48bcc0 Improve the caching done by ConcurrentAuthorityFactory: if a specialized method delegates to a more generic one (e.g. if createGeographicCRS(String) delegates to createCoordinateReferenceSystem(String)), check the cache for the type of objects of the more generic method. This avoid creating the same object twice if the two different methods are invoked.
add 137e0ff Added more tests and fixed bugs identified by those tests.
add 2f7c867 Consolidation in the way FileParameter are handled.
add 3184070 Log the slow operations (more than 10 milliseconds). Tests consolidation.
add e4a882c Test and debug IdentifiedObjectFinder for EPSG dataset.
add 8942fbf Test and debug IdentifiedObjectFinder for ProjectedCRS.
add a0d2b3f IdentifiedObjectFinder.find(...) of a ProjectedCRS should be able to ignore axis order of the base CRS. This feature implies the addition of a new ComparisonMode.ALLOW_VARIANT, which tell to ignore axes in CRS comparison. Special care is needed for the comparison of CoordinateOperation objects, since the MathTransform to be compared need adjustement in axis order and units are not the same.
add e1c4610 Less verbose logging messages in IdentifiedObjectSet.
add 492f556 Take the supersession table in account for ordering the object to create.
add c499354 Remove the trailing line separator in the warning emitted by the WKT parser. This is for consistency with other log messages.
add 7c83c43 More lenient lookup of CRS by their name.
add 97c4dc9 Add test for EPSGFactory.getAuthorityCodes(Class). Since this is a potentially costly test, add a TestCase.RUN_EXTENSIVE_TESTS flag. Opportunstically renamed two other internal constants.
add 2d48ee6 Fix a NullPointerException that occurred when constructing a DerivedCRS from a MathTransform. The NullPointerException occurred when asking for the targetCRS.getDatum() because the targetCRS construction is not yet completed at DefaultConversion construction time (cyclic references). The fix is to use only the CoordinateSystem and ignore the datum, which is not needed anyway when the MathTransform is already available.
add cc544d3 EPSGDataAccess.getAuthorityCodes() should exclude the code of deprecated objects.
add 4808655 Begin support of authority codes in the "AUTO2" namespace.
add e346544 Cleanup and add test for CommonCRS.UTM(latitude, longitude). This method will be needed for AUTO:42001 and AUTO:42002 codes.
add dda2a01 Complete the support of ProjectedCRS codes in the "AUTO2" namespace. The support of codes in the "AUTO" namespace is not yet complete, as it is missing the parsing of units as EPSG code.
add aa66097 Add documentation about Universal Transverse Mercator (UTM) zones.
add 39ffe21 Do not use NameFactory anymore for parsing the "AUTHORITY:CODE" value, in order to avoid the synchronization and cache cost of the factory. This also make the API more consistent.
add 43fff4b Support the way units were specified in the legacy "AUTO" namespace (by EPSG codes instead than multiplication factor).
add 654bd24 Add documentation and tests.
add 2e2dd14 Apply SVN properties before branch merge. There is no code change in this commit. The apparent changes are only the result of "svn:eol-style" property fixing the "end of line" characters.
add e88ba8c Minor bug fixes identified as a result of the merge.
add c4debad Fix wrong EPSG codes for Geographic3D and Geocentric CRS.
add 33234b6 Bug fix: missing units when formatting axes of three-dimensional GeographicCRS in WKT.
add f7293a9 Partial work on MultiAuthoritiesFactory: contains the private methods needed for creating objects, not yet tested and not yet connected to public API.
add 8377130 Initial implementation of createFoo(String) methods in MultiAuthoritiesFactory. Opportunist javadoc fixes in ConcurrentAuthorityFactory and GeodeticAuthorityFactory.
add d9f5919 Refactoring of tests only: move the mocks in the "right" packages for the interface that they implement, except a few mocks that could not be moved because they need to be defined before the modules that would normally have defined them. The intend is to make easier to find what is available in a package to test, including most mocks related to that package.
add fc6f6d4 Minor documentation and style fixes.
add e779551 Add tests for MultiAuthoritiesFactory.createFoo("AUTHORITY:CODE").
add a198abd More tests for MultiAuthoritiesFactory.
add 7fc0d38 Add test for codes in the "http://www.opengis.net/gml/srs/" namespace.
add 59b0114 Add support for codes like "http://www.opengis.net/def/crs/epsg/0/4326".
add 2fd0c0e Yet another attempt to clarify our use of "authority" versus "codespace" and where the "version" apply. In particular, our javadoc for "version" was unclear about whether it is the code version or the namespace version.
add 22e498a Consolidation of our way to handle authority, codespace and code. The success metric for this commit is when the WKT formatter can write "urn:ogc:def:crs:OGC:1.3:CRS84" correctly.
add e419663 Prepare for implementation of MultiAuthoritiesFactory.getAuthorityCodes(): reduce the amount of code during which a synchronization lock is hold, and delegate part of this synchronization mechanism to a custom iterator.
add 5c6b660 Implement the MultiAuthorityFactories.getAuthorityCodes(Class) method.
add 5cd5b94 Implement MultiAuthoritiesFactory.newIdentifiedObjectFinder().
add 222a54e CRS.forCode(String) now delegate to MultiAuthoritiesFactory.
add 24edc1f CommonCRS uses the real EPSG database when available.
add 8b2f169 Implement MultiAuthoritiesFactory.createFromCoordinateReferenceSystemCodes(String,String).
add 45d951c Implement IdentifiedObjects.lookup(...) methods.
add 71e2631 Minor tuning and add more tests.
add 9a2da65 Log a warning when no factory is available specifically for the requested version.
add c0677c2 Add an optional 'authority' parameter to CRS.getAuthorityFactory and IdentifiedObjects.newFinder.
add 0bb8ebc Add tests.
add c6ebd87 Fix a NullPointerException (found during execution of Geotk tests).
add 1f1e0c5 The RecordSchema used for reporting operation accuracy needs to be serializable.
add 685a0bd Fix a wrong parameter name compared to EPSG database.
add fe0ffa3 More accurate detection of if a JNDI context is available.
add 52b0510 Report version of EPSG database in the "about" command.
add 3dcc2b5 Fix link to CSS file.
add 0a2710b Group together the classes that generate HTML reports for the web site.
add 8b9a0a3 Fix the reporting of deprecated CRS definitions.
add 0867d88 Fix the title in the generated CRS page.
add 1c80f0b Initial port of the EPSG installer (needs tests).
add 689dcbc Renamed EPSGDataAccess.parent as 'owner'. Javadoc updates.
add 8d08270 Fix dependency versions in NetBeans project properties.
add 72fe0f4 Initializer now listens changes in JNDI bindings.
add ae62c3c Change the way we construct EPSGFactory by specifying a map of properties instead than enumerating the parameters. This give us more freedom for future addition of properties, and avoid the problem of too many parameters for remembering what each argument is for (especially considering that all parameters/properties are optional).
add 89158cd More accurate specification of catalog and schema that contain the EPSG tables.
add c81d8d1 Begin EPSGInstaller tests.
add 78cd627 Minor adjustments in EPSGInstaller test and in documentation.
add cf379d7 More tests of EPSGInstaller. Creation of EPSG database has been successfully tested on Derby and PostgreSQL.
add 6cfdda6 Minor post-merge cleanup.
add 4bbc336 Initial port of the code reformating the EPSG "Data.sql" table in a more compact and efficient way.
add 8a70d83 Update from version 7.9 to version 8.8 of EPSG dataset.
add d6f1523 Test EPSG factory on HSQLDB. The test is skipped by default for the reason explained in Javadoc.
add aed0084 Replace empty string by NULL value in EPSG database, and use the BOOLEAN type where appropriate.
add c7d80d4 Need to remove "ABS" in "ABS(DEPRECATED)" if the "DEPRECATED" column is of SQL type BOOLEAN.
add db83a30 Cite a developer in pom.xml.
add 92de487 Define an InstallationScriptProvider that users can override for specifying where to get the EPSG's SQL scripts. The intend is to allow user to solve the licensing issue as they see fit, and reduce the need for Apache SIS to bundle the SQL script themselves (or at least make a little bit easier for the users to plugin their own copy of the scripts).
add d813b49 Fix a test failure on system without the EPSG database.
add 8c56b20 Complete the InstallationScriptProvider support by searching for user-provided instances on the classpath.
add 375f7c7 Remove a patch which was needed with EPSG 7.9 but is not needed anymore with EPSG 8.8.
add c428a14 Fix our use of boolean type on PostgreSQL.
add 4471403 On failure to get a connection to the EPSG database, log the problem only once before to use the fallback.
add 0201bad Log warnings only once for CommonCRS too.
add c54cba8 Remove a condition on test execution which is not needed anymore after upgrade from EPSG 7.9 to 8.8.
add 4443495 Documentation update: revert the "EPSG::####" notation to "EPSG:####" in non-URN code for compliance with WMS usage. Minor formatting.
add b352778 Change the way the tests verify the logging messages. Instead than doing the assertions in LoggingWatcher, do them in the test methods. The reason for this change is that assertion failures in LoggingWatcher had very confusing stack traces.
add b13718d Verify the log messages emitted during execution of GIGS tests. This implies another modification in the way we verify log messages in tests.
add c8f7b17 Add a few new categories for upgrade from EPSG 7.9 to 8.8.
add 36128d4 Avoid throwin an exception when formatting a message with non-formattable units.
add a518e29 Allow creation of EPSG database in the directory specified by "derby.system.home".
add 2d1d035 Better support of deprecated CRS. In particular, avoid the "non-linear unit" exception.
add 7f0dfde Put the accented letters in the object name if they are available.
add 05a3f8a Adjustment in the section in which some CRS are listed.
add 1a25ff5 Fix test failures.
add f1043be Upgrade EPSG database from version 8.8 to 8.9.
add a8236cc Temporarily suspend parameter verifications in some circumstances: - When it is too late for verifying parameter validity and we are supposed to just record whatever value they have. - When creating a projected CRS which has been deprecated precisely because of invalid parameter, but may still be in usage.
add a3ba636 Remove the restriction on EllipsoidalCS for DerivedCRS of kind geodetic, because a geodetic CRS can be geocentric.
add 86ce7be Trivial typo.
add 7afc64a Misplaced comment.
add 26746be Safety against SecurityException.
add eb7f4c3 EPSG fallback shall ignore the prefix in codes like "EPSG:4326".
add 3efd533 Allow use of enumerated values instead of VARCHAR for columns that are used in Java switch statements.
add 3108b5e Keep the definition of enumerated values in SIS instead than with the EPSG scripts because those enumerated values are closely related to hard-coded values in EPSGDataAccess Java code.
add 35cd9a6 Add information about the javax.sql.DataSource to the SpatialMetadata database in the "about" command.
add 5dc24eb Add capability to parse WKT from the command-line.
add ddc91e3 Add "application/wkt" as the MIME type of WKT strings.
add 2afbde3 Rename XMLStore as Store (an internal class anyway) since "XML" is already implied by the package name, and for consistency with WKT store.
add f6edb56 StorageConnector.getStorageAs(InputStream.class) needs to call InputStream.reset() if the InputStream has been used previously (SIS-308). As a side effect of this bug fix, add a "--debug" option to the command-line tools (which is the place where the problem manifested).
add f73c0de Fix a parsing error for UNIT["grade", ...] and for ID[authority, code, URI[...]]. Issues: SIS-309 and SIS-310.
add f485e39 Merged ReferencingInMetadataTest and DefaultMetadataTest in a single test class.
add 82d350d Bug fix in WKT parser and formatter: SIS-311, SIS-312, SIS-313.
add 3d6df96 When formatting a three-dimensional geographic CRS in WKT 1 format, temporarily split in a CompoundCRS (SIS-317). Note that this is illegal according ISO 19111. This split is done only on-the-fly and discarded, and only for compliance with the legacy WKT 1 format.
add 7a3ff98 When parsing a WKT 1 string, convert (Geographic2D + Vertical) into (Geographic3D) CRS. Issue: SIS-317.
add ecaad8a Move ReferencingUtilities.toWKTType(...) to WKTUtilities.toType(...). This is an internal method - no impact on public API.
add 75a13bd Moved an internal method related to JAXB (un)marshalling from ReferencingUtilities to MetadataUtilities.
add b6d76ea If FormattableObject.toString() did not provided a valid WKT, append to the string a warning giving some indications about the problem.
add 79af2c9 More extensive test for WKT parsing/formatting consistency.
add 7e06f82 Initial implementation of the "identifier" sub-command in the command-line tools. This work required an improvement in GeodeticDatum.isHeuristicMatchForName(String) in order to ignore the prime meridian name in some circumstances.
add cf1622b Complete the support of the "identifier" command on the command-line tools. This work includes a bug fix in comparison of ProjectedCRS with ComparisonMode.ALLOWS_VARIANT and more extensive test in ConsistencyTest.
add cf67dab Rename internal classes of console application (no code change in this commit). The previously-used SC abbreviation (for "SubCommand") was unconvenient to remember.
add 5f8263d Support CRS authority codes from the command-line (e.g. "sis crs epsg:4326").
add 17c3ece Fix a test failure and improve javadoc.
add 81e736a First draft of automatic EPSG geodetic dataset download and installation, after asking user to accept EPSG terms of use. This initial draft downloads the data from a temporary URL. This URL will be changed after discussion on the mailing list.
add 5e54148 Do not write the same warning twice.
add a433791 Test for null argument value.
add 940c0da Refactoring: transfer more responsibility from InstallationScriptProvider to InstallationResources. The intend is to get more flexibility for applying the same mechanism to resources provided by other authorities than EPSG.
add 8114dda Renamed LicensedDataProvider as ResourcesDownloader because not all resources to download will have a restrictive license. Add localization for ResourcesDownloader and reduce the level of a log message which partially redundant with other logs. Edit javadoc.
add 785741b Adjust messages and logging.
add fa3c1a4 Do not allow usage of ":" in "gml:id" attribute values.
add b27d3a2 Improvement on the command-line tools: - If there is more than one CRS in a WKT file, parse all of them. - Report warnings emitted by the WKT parser. - If the SIS_DATA environment variable is not set, use the <installation directory>/data directory. - Adjustments in the logging colors for making more visible when a log message spans many lines.
add 0d76b43 Allow users to keep the filenames used by EPSG (e.g. "EPSG_v8_9.mdb_Data_PostgreSQL.sql" instead of "EPSG_Data.sql").
add 0b28bd0 Upgrade dependencies.
add 284fe39 Apply an annotation about workaround for supporting some deprecated EPSG codes. This is for documentation purpose only.
add bf9ecd0 Re-arrange readFull(...) methods in a way which will allow us to share the code for reading hyper-cubes.
add dbe02a4 Add a HyperRectangleReader as an internal helper class for NetCDF, uncompressed GeoTIFF and some other raster formats.
add 3856ccb Use HyperRectangleReader in NetCDF data store.
add 51a5428 Javadoc and code formatting (no significant code change).
add 19d320d Read metadata from a Moving Features CSV file (SIS-319).
add 2441612 Initial draft of a getFeatures() method. This is an experimental API restricted to the internal package for now (see the numerous "TODO" comments). This experiment allows us to start thinking about what should be the DataStore public API. Such public API is not planed for Apache SIS 0.7 release (it would hopefully be provided in SIS 0.8), but in the meantime having an internal API enable experiments.
add 0e43016 Trivial formating.
add f61f6ab Allow some parts of SIS to run in security-constrained environments.
add d2fb1c1 Add or review AccessController.doPrivileged(...) calls.
add aad27ac More uniformization in the way we parse ISO dates (for now - to be replaced by java.time package) for easier merge with JDK7 branch.
add 98b5b8b Add Johann Sorel in the list of authors for the code reading a rectangular area of sample values. This work is based on the patch attached to SIS-314 issue.
add d4a9cac Tune some AccessController.doPrivileged(...) calls and add a security.policy file that developers can use as a template. This work is based on Guilhem Légal work (SIS-320).
add b18e2e1 Conservatively remove the use of AccessController.doPrivileged(...) for ServiceLoader, because it may create by reflection classes that we do not control. We will need to revisit in the context of Jigsaw.
add 4b1b97c Begin the port of the code that infer a coordinate operation between two CRS.
add 56c3b61 Ported: - conversions between two VerticalCRS - conversions between two TemporalCRS
add fce1847 Temporarily remove the use of AccessController.doPrivileged(...) for shutdown hook (reverse of SIS-320). The reason is that we currently use a mechanism that allow anyone to register code to execute as part of our shutdown. This mechanism is in the internal packages of SIS, but there is currently no mechanism (other than OSGi) to ensure that only SIS uses this mechanism. We should be able to re-enable the use of AccessController.doPrivileged(...) when we will upgrate to jigsaw.
add 7d70821 Add support for conversion between three-dimensional Cartesian and spherical coordinate system. The design is similar to EllipsoidToCentricTransform regarding the way to concatenate affine transforms. We need those conversions for completing CoordinateOperationInference.createOperationStep between GeocentricCRS.
add 01012f6 Replace NonStandardCRS class by CommonCRS.spherical() method and add tests.
add 0336dfd Improvement: EllipsoidToCentric delegate to SphericalToCartesian when the given Ellipsoid is actually a sphere. Improvement: NonSquareMatrix need to omit rows containing only a translation term if and only if the last row is [0 0 ... 0 1]. Bug fix: ProjectiveTransform should not delegate to ScaleTransform when the matrix has less columns than rows (the matrix looks like diagonal but is not). Bug fix: missing RangeMeaning enumeration value when creating the axis for geoce [...]
add 787994c Add conversion between cylindrical and Cartesian coordinate systems.
add d0f666d More robust normalization of axis order and orientation in the context of PolarCS and CylindricalCS.
add e944676 Add tests for conversion between cylindrical and Cartesian coordinates.
add e1f0558 Prepare for PolarCS: Add an "awayFrom" axis direction (taken from ISO 19162) and uses it in the tests. Allow CoordinateSystemTransform to be two-dimensional, not only three-dimensional.
add 97e4a03 Consolidate our abbreviations for spherical CS. In particular, we distinguish two kinds of spherical CS: - Geodetic case with (spherical latitude, spherical longitude, geocentric radius) axes - Engineering case with (distance, bearing, elevation) axes.
add 0c3e8c6 Replaced cylindrical <-> Cartesian conversions by polar <-> Cartesian conversions with a PassThroughTransform for the z value. This allows SIS to leverage the optimization in PassThroughTransform when other MathTransform are concatenated.
add 90eb0a2 Allows HyperRectangleReader to use an existing array of primitive type, not necessarily data provided by a ReadableByteChannel.
add 33b1cb9 Enable use of random number for the MemoryTransfer test.
add 18152c9 Try to provide a litte bit more information in the logging messages, especially when we failed to create or connect to the EPSG database.
add bde0102 Complete CoordinateOperationInference.createOperationStep(GeocentricCRS, GeocentricCRS) including longitude rotation and change of coordinate system (Cartesian <-> Spherical). This work required a clarification of the condition for using the Bursa-Wolf parameters. In order to avoid ambiguities, we use those parameters only if there is no longitude rotation, or if the target datum use the Greenwich prime meridian. Otherwise the parameters are ignored and the transformatio [...]
add 9783758 Add missing javadoc tags.
add c511f30 Modify DefaultMathTransformFactory.Context API for making clearer that the factory does not deal with datum. In particular, change of prime meridian is caller's responsibility. Added a Context.getMatrix(MatrixRole) method for making easier to handle prime meridian outside DefaultMathTransformFactory. Those changes are needed for continuing CoordinateOperationInference implementation.
add 4487b6c Replaced CoordinateOperationInference.createOperationStep(GeocentricCRS, GeocentricCRS) by a version working on GeodeticCRS, thus including GeographicCRS. Previously (in Geotk) we had two separated methods for the Geocentric and Geographic cases. But that separation does not exist in ISO 19111:2007 standard, and indeed merging those two methods in a single one gives something both simpler and more powerful (better handling of change of coordinate system type). This work [...]
add 424c4c9 Search of coordinate operation path now take in account map projections. Begin tests.
add 0fd4842 Add more tests and debug CoordinateOperationInference.
add 448015c Fix a lost of precision in UnmodifiableMatrix. Opportunistic formatting fixes while debugging.
add fdaaf37 If a test resource is not found in the package of the sublcass, search up in the hierarchy of classes. The intend is to allow diffent module to reuse an existing test in another package.
add f068b97 Test the GeographicCRS to ProjectedCRS case without datum or axis changes.
add d3fc165 Add more tests. For easier debugging, provide a SIS-specific WKT format for ConcatenatedOperation (this case does not seem to be described by WKT 2 format).
add 8fde6a4 Add tests for longitude rotations in geographic and geocentric coordinates.
add 95a1bb3 First draft of CRS.findOperation(...) method.
add d2bce17 Post-merge cleanup.
add 7ac38a8 Added convenience method and javadoc about how to perform a map projection.
add bd1eda4 Javadoc fixes.
add a0a5346 Centralize the place where we fetch the CoordinateOperationFactory. Fix javadoc and tests.
add 89fb0a2 Add tests for vertical and temporal axes. Prepare tests for the next step: 2D <-> 3D ellipsoidal CS.
add f5faa03 Fix erroneous javadoc.
add 8a8756d Add non-linear transform 1D
add fadf941 Add quadruple precision to java double math function
add fa9f4ca Implement parametric CRS, update wkt and jaxb parsers
add 678854f Move the quadrupleToDouble method up for keeping it together with related functions. Add javadoc.
add f150e29 Complete JAXB annotation on ParametricCRS related classes and add JAXB adapter. Add the parametric case in EPSGDataAccess. Javadoc and formatting.
add 3615bac Add javadoc. Add some missing types in TableInfo.
add d920cd6 Fix javadoc warnings.
add 3a3b6b1 LinearInterpolator1D refactoring: - replace the loop over y values by an use Arrays.binarySearch. - split the work on x and y values in two separated class: - one from x to indices (the Invert inner class) - one from indices to y values (the outer class) The rational for this split is that most of our usage (at least in the context of Coverage's "gridToCRS") use only the second part. Indeed, the previous static factory method was allowing construction of only that se [...]
add 2a27aaf In LinearInterpolator1D, rename "x" and "y" as "preimage" and "values" respectively. "preimage" seems to be the appropriate mathematical term for what this array is. Add a provider for that coordinate operation.
add 568280a Revert to a simpler algorithm for finding a public class name, since it seems there is no good one.
add ef64f7b Fix support of Geographic 2D <-> 3D conversions.
add 22af20a Fix parameter declarations in operations created by CoordinateOperationInference.
add 3a40a72 Override the method that combine the transform and its derivative in a single method call. The intend is to avoid to call Arrays.binarySearch(double[], double) twice for the same value.
add d413980 Fix support for geographic 3D to 2D + datum shift transform.
add d239a1a Add test for the geographic 2D to 3D + datum shift case. Trivial code reformating.
add 61ef205 Tune pseudo-WKT formatting for ConcatenatedOperation.
add cafd55c First draft of a GeodeticCRS to VerticalCRS. Does not yet take geoidal height in account, but the first block are in place with the definition of an interpolation CRS.
add c539942 More robust createOperationStep(GeodeticCRS, VerticalCRS).
add 684aedf Verify that the ProjectedCRS constructor does not accept invalid base CRS.
add 2626ab5 Code formatting and addition of @SuppressWarnings annotation. There is no code change in this commit.
add 28cdea0 New aggregate and bounds feature operations, add featuretypebuilder and attributetypebuilder
add 6db14ce Begin support of coordinate operation between CompoundCRS instances (still a work in progress).
add 02dd558 Fix missing serialId on Aggregate and Bounds operations, fix AbstractFeature returned default values for association roles not compliant with javadoc
add b641f17 Complete support of coordinate operation between CompoundCRS and enable the test.
add 045b4f6 Add pseuso-WKT formatting for PassThroughOperation.
add 028c19f Fix operation between CompoundCRS having a ProjectedCRS, and add corresponding test.
add 1804106 More tests.
add a1c4052 Add a Matrices.resizeAffine(...) method to be needed for CoordinateOperationFinder.
add 7831e09 Add GPX reader and test samples
add 050aeb9 Partial port of CoordinateOperationRegistry for finding coordinate operation by the "late-binding" approach.
add edf6532 Fix SVN properties. No change in file content, except EOL characters.
add c29c8c6 WKTParser should emit a warning when a CS[...] element contains a UNIT[...] element which is inconsistent with the coordinate system axis units.
add 1b76405 Complete CoordinateOperationRegistry (but not yet connected to DefaultCoordinateOperationFactory) and begin tests.
add d1c4512 Add GPX 1.0 and 1.1 writers
add 50df8e4 Set SVN properties. There is no code change in this commit.
add 8088fa6 Add a test and debug the case where axis order does not match the EPSG definition.
add 205e2c6 Initial support of search for operations between three-dimensional CRS (with ellipsoidal height) when only operations between two-dimensional CRS are found in CoordinateOperationRegistry.
add d2f14cc Simplify the pseudo-WKT representation of ConcatenatedOperation.
add ee6a982 Implement Literal and PropertyName expressions
add 3bc3b7c Debug and add test for the case where CoordinateOperationRegistry searches for the inverse operation.
add c5f41f1 Rename CoordinateOperationInference as CoordinateOperationFinder and define as a subclass of package-privated CoordinateOperationRegistry for enabling the search in EPSG database before to try to infer the coordinate operation by itself.
add b9093f0 Add test for DefaultCoordinateOperationFactory.
add c0bff22 Set SVN properties.
add 6d0bbfa Javadoc, code formatting, factorisation of validate(Feature) code, localization of error message, make a test independent of builder, support validation for non-SIS property implementations.
add f692625 Replace foreign file header by the Apache one. Fix the parameter group name and apply some code formatting.
add 53c70b4 Javadoc and argument validations.
add 75a6d37 Rename AggregateOperation as StringJoinOperation. Replace GenericName argument by a map of identification info. Document how the identification info are used for the operation result.
add e51ce3b More exhaustive check of attribute types in StringJoinOperation. More predictible use of ObjectConverters in StringJoinOperation.
add 1695a7e Avoid randomness in WKT parsing test.
add 070c512 Implement character escaping in StringJoinOperation. Document that AbstractOperation.getDependencies() does not report transitive dependencies. Implement hashCode() and equals(Object) in AbstractOperation subclasses.
add f7e6a15 Add test, bug fixes and formatting.
add f4445b2 Rename AttributeConvention as NameConvention. Code formatting, javadoc and tune NameConvention implementation and tests.
add 86b7884 Rename BoundsOperation as EnvelopeOperation and refactor in a way which try to find the CoordinateOperation at construction time instead than searching them for every feature instance.
add b858c9d Start refactoring of FeatureTypeBuilder. The plan is to replace the numerous 'addProperty' method by the creation of an inner class dedicated to Attributes and Operations. This inner class will have its own set of 'setName' methods together with some methods for marking it as default geometry, part of compound key, etc.
add 44033e6 Complete (for now) FeatureTypeBuilder refactoring. All 'addProperty(...)' methods have been replaced by a smaller amount of 'addFoo(...)' methods, which return a Property builder on which the caller can invoke setter methods.
add 20b25b2 Rename NameConvention back to AttributeConvention because it defines methods looking for conventional characteristics of feature attributes.
add 5ede4a6 Post-merge cleanup.
add 110b90e Fix a mismatched dimension when transforming coordinates using position vector transformation from geographic 2D to geographic 3D domains.
add f4e3e5f Add limited caching in CoordinateOperationFactory.
add 46ab2fd Fix an index out of bounds in matrix indices when computing the conversions from a spatio-temporal CRS (as a compound CRS) to vertical CRS.
add 98256ff Fix a regression caused by previous commit: if operations to concatenate change the number of dimensions, merge them in a single operation only if both of them are the "Affine" operation.
add 8f5de50 Javadoc clarification, especially about enabling or disabling MBeans.
add 54431b4 Safety against a discrepancy between older and newer ISO 19111 model.
add f3160f5 Declare a ConcatenatedOperation needed for transforming from old NTF systems to new RGF93 ones.
add ce75b41 Add "ID[...]" element in SourceCRS and TargetCRS of ConcatenatedOperation WKT.
add e94072b WKT parser should verify that the unit of measurements are consistent.
add b35003a Add tests.
add e7de9e7 When creating a new CRS as an intermediate step between the source and target CRS, check if that CRS is defined by the authority (e.g. EPSG).
add f48f54d Split the implementation of "metadata", "crs" and "identifier" sub-commands into 3 separated classes. Begin implementation of "transform" sub-command.
add dd637dc Complete implementation of the "transform" command-line tools.
add bb347a7 Do not search transformation path between deprecated CRS by default. If nevertheless the user ask to take in account deprecated CRS, reduce the amount of warnings.
add c374806 Internal WKT needs to said when a transform works in the radians domain. Command-line output of "transform" command must contains the unit of measurement with axis names. Command-line input of "transform" command should take in account the specified encoding. Format the header of "transform" command-line output like a table.
add f96b79f Make some tests a little bit more determinist regarding order of test execution.
add d750fe3 Bug fix: - Exclude deprecated operations when searching for an operation path. - Inverse operation should contain domain of validity and accuracy information. - Command line should give the operation EPSG codes when available.
add 381806e Bug fix: need to check accuracy and domain of validity before to compute the inverse of an operation.
add 352ba5a Command-line "transform" operation in "--verbose" mode should format the CoordinateOperation instead than the MathTransform. The user should be notified if that coordinate operation can not be formatted in valid WKT. Should also format the domain of validity.
add 189267e Command-line tools should compute the area of interest from the given input coordinates.
add 680d229 Fix the links to the coordinate operation methods and CRS tables.
add e146994 Modify the temporary URL to EPSG script files.
add 85a6777 Add a SQL view for verification purpose.
add d08d65e Update README in preparation for release candidate and set the URL to EPSG geodetic dataset to its expected location after release.
add d61bf41 Do not overwrite the standard CSS files when Javadoc plugin is executed more than once without "mvn clean".
add 5506363 Add a main method to developer guide assembler.
add 495151b Fix a wrong logger name.
add 2892f91 Upgrade parent Apache pom to version 18.
add 70c8d14 Add a README about the "org.apache.sis.non-free" groupId.
add 1aecb5c Build tools for the developer guide should not add the <section> tag itself.
add f0ddf07 Increment version number to 0.8-jdk8-SNAPSHOT.
add 3092108 Remove deprecated methods and fix javadoc.
add bc8d437 Initial port of custom Maven plugin for as an helper tool for building the OpenOffice add-in. This is specific to Apache SIS - not a Maven plugin for general use - and may change or be removed in any future SIS version.
add 9eea6c8 Remove the implementation URL since it is not a deprecated Manifest attribute.
add fa0c35b Partial port (still incomplete) of referencing services as Apache OpenOffice addins. This provide some of the services provided by the command-line tools, but available as formulas in Calc.
add 5dd8b2f Add resources to the openoffice add-ins.
add cb4ac16 Update dependencies.
add fe9b7c3 Rename methods for making clearer that the domain of validity is returned as a geographic coordinates and that the transform method operates on points (not on envelopes or geometries).
add 1fb7280 Add the result of UNO compilation for OpenOffice.
add 3c71900 Resolve a classpath issue when installing openoffice addins. The Apache SIS classes were not found. The issue is caused by https://issues.apache.org/jira/browse/MJAR-223
add 4e04eed Make the search for services more robust to environments having a too "poor" context ClassLoader.
add 0dc83e9 Better inference of whether an argument given to an application (console or OpenOffice add-ins) should be understood as an AUTHORITY:CODE pattern or a PROTOCOL:FILE pattern.
add d267b96 Allow the EPSG fallback to create also datum objects, and add tests.
add 64c8953 Refactor the OpenOffice addins using a XCU file for function descriptions instead than hard-coded values in Java. The hard-coded way was legacy from OpenOffice.org 2.0 days.
add 46e8cb0 Adjustment in OpenOffice function names and documentation. Add a TRANSFORM.ENVELOPPE(...) function. Text <-> angle conversions as matrix functions for more efficient conversions of large amout of values.
add 7894cb2 Fix a test failure that occurs when the test are executed without EPSG dataset available.
add 268288a Make a test more robust to different way a WKT may be expressed. This fix a test failure when the EPSG geodetic dataset is not installed.
add 3bd973f Returns an empty array instead of NaN values if the add-in can not compute values.
add e312f62 NetCDF reader should check the validity of input argument.
add 4096e8e Begin refactoring of GPX reader. The intend is to have it as a DataStore subclass.
add 63b9fa1 Bug fix: enum types need to be casted to VARCHAR on PostgreSQL.
add a545376 Trivial documentaton fix.
add fc2863f Ported Shapes2D class and test methods from Geotk.
add 656fe57 Check against longitude values too far from the domain of validity in Transverse Mercator projection (SIS-329).
add c3a822f More conservative threshold for throwing a ProjectionException in TransverseMercator projection.
add 14dc0a3 Add support for Path (from NIO) in XML (un)marshalling. Opportunist comment formatting on XML-related class.
add f7ea4cc Partial revert of StaxStreamReader previous commit: should not extends DataStore because StaxStreamReader is not intended to be used directly as a DataStore. It is rather intended to be contained in a DataStore, as internal mechanic. Add a StaxStream base class with documentation about this intended design.
add 8ed947b Minor consolidation of NetBeans project configuration.
add 4498f69 Rename AttributeConvention static final constants to match better their value.
add 6c8fb22 Support geometries from the JTS library using reflection (since this is an optional dependency). Improve feature Operation formatting.
add 19dd55f Review FeatureTypeBuilder API: - separate the Association and Attribute cases - replace addDefaultGeometry and addIdentifier by a setRole(AttributeRole) method - provide a default property name based on the type
add 81afa0b Allow to create a builder using an existing IdentifiedType as a template.
add 13d244e Add getter methods for some of the builder properties. Given the increase in amount of methods, make the Builder abstract class public (after renaming).
add a7a3909 Refactor the FeatureTypeBuilder inner classes as top-level classes. Move those builders in their own package.
add bb40a28 Post FeatureTypeBuilder refactoring: adapt builder usage.
add 863ae4c Add javadoc.
add f537d30 Refactor the package-private helper methods used during map projection providers initialization. The intend is to use slightly more readable methods in definitions of ESRI-specific projections.
add c4329f4 Changes in the amount of spaces and a minor typo fix in a comment. No code change in this commit.
add 711baaa Additional info in the MathFunctions.atanh(double) method. One less level of indirection in PolarStereographicSouth (may reduce class loading). Use a separated property in the Ant script for SIS version of the branch from which to create a release.
add f0b9373 Initial commit of CylindricalEqualArea projection.
add c3ec203 Set the CylindricalEqualArea parameters to the "Lambert cylindrical equal-area" parameters defined by EPSG:9835.
add 0c49825 Javadoc formatting.
add 5301f18 Add "Lambert Cylindrical Equal Area (Spherical)" projection.
add 5a86890 Add missing EPSG identifiers in Molodensky parameters.
add aa43741 Post merge cleanup and documentation.
add fb79e4d Consolidation in the way CoordinateOperationFinder try to invert coordinate operations.
add 8980c63 Initial implementation of AlbersEqualArea. Share some more code with CylindricalEqualArea when applicable.
add d5ecddd Tests consolidation.
add af8d515 Add benchmark for selecting the best implementation strategy, and document the result analysis.
add ccbbc11 Take in account the polar cases.
add ce779bc Add a GeoTIFF module for receiving part of Google Summer of Code work. Some other parts of the work will go in other modules (e.g. sis-webapp).
add 0e0996d Put some consistency in URL style (trivial change) and add "svn-ignore" property for the sis-geotiff/target directory.
add 373efd3 Javadoc formatting (no code change).
add 9cd620b Begin the port of GeoTIFF reader.
add e9ab0bb Continue port of GeoTIFF reader.
add 0dee809 Refactor the Types integer constants as a Type enumeration, and begin parsing a few tags.
add 6ac5051 Add a FeatureTypeBuilder.addOperation(...) method.
add d3d67dd Trivial javadoc formatting (no code change).
add 59df348 Parse more GeoTIFF tags. Contains a first mapping from TIFF to ISO 19115.
add 9e390e2 Complete the MetadataBuilder.parseLegalNotice(String) helper method.
add 1ddf146 Generalize the addOperation(Operation) method as an addProperty(PropertyType) method.
add ab15877 Javadoc formatting (no code change).
add 831628e Finish declaration of baseline GeoTIFF tags. However most of them are not yet implemented.
add 4e1007f Make GPX metadata implement ISO Metadata, add TestSuite class
add ab750b8 Fix a NullPointerException when building a FeatureType where the first attribute is a property named "@geometry".
add daa6747 Fix a StackOverflowError in LinearInterpolator1D.hashCode(). Fix the tolerance factor used when determining if the series is regular. Previous tolerance value was too strict. Opportunist javadoc formatting.
add 4873103 Remove dead code.
add f9cd2eb add metadata attributs group and coverageDescription
add e2f15e7 Complete the storage of MinSampleValue and MaxSampleValue properties.
add 5858574 Provide more default implementations in AbstractMethod methods, for making easier the task of developers who want to create their own subtypes.
add c434732 Relax a little bit a tolerance threshold, since some combination of random values sometime exceed the old threshold.
add 92fb660 More documentation about what the tests are doing.
add b709d7e Complete the parsing of TIFF tags (but not yet the interpretation; the ImageFileDirectory class still needs to be completed).
add 2d45a9c Refactor TIFFException as DataStoreContentException and use it with other DataStores when applicable. First draft of ImageFileDirectory.completeMetadata(...), which complete the metadata with information available in IFD object. For now we just write the compression method, but more will be added later.
add 54dfa76 Initial implementation of AttributeTypeBuilder.setValueClass(Class<N>) method, together with some getter methods.
add 32ae63d When formatting FeatureType, shows also the names of parent types.
add ede08ea Add getter methods, perform more checks and add tests.
add 2d938c7 Javadoc formatting (no code change).
add 2c90161 Implement AttributeTypeBuilder.roles() method. Opportunistic reformatting of javadoc of other classes built on top of SetOfUnknownSize.
add 4224d6b Initial port of Vector classes (as wrapper around array of Java primitive type) as helper classes for reading GeoTIFF data. Test classes will need to be ported later, as well as other wrappers for unsigned bytes, shorts, ints and longs.
add 4ad2fbf Documentation fixes (no code change).
add bfe21ae Make the PropertyType.build() method public, and fix a bug about a cache value not cleared.
add 8872517 FeatureTypeBuilder created from a template should infer the AttributeRoles.
add fc0abc3 Documentation formatting.
add ab650de Add a test about multi-valued properties.
add acc7e09 Javadoc (no code change).
add b223683 Replace PropertyTypeBuilder.setCardinality(int,int) method by a pair of setMinimumOccurs(int) / setMaximumOccurs(int) method, together with their getter methods.
add a6e6325 Javadoc.
add 9914345 Ported CRS.getDomainOfValidity(CRS) method. This implied a revision of Extents.getGeographicBoundingBox(Extent). This commit contains opportunist javadoc formatting.
add bd90a61 Ported tests for Vector.
add 9e595ae Javadoc.
add 02ad276 Initial support of Vector of unsigned integers.
add 24c033e Review Vector API and javadoc.
add 71b352c Fix updating default geometry attribute type class cache in feature type builder
add 9c52bc5 DefaultFeatureType constructor should omits properties that duplicate a property defined in the parent type.
add 6604cd5 RemoveOnlyList.remove(E) shall check if the removed property is the default geometry. This check is done indirectly by AttributeTypeBuilder.remove().
add 4234cd7 Fix identifier count not decremented when removing identifier property
add 88cbeec DefaultFeatureType constructor should verify that the operation does not have a dependency to a non-existent property. This commit contains also opportunistic javadoc formatting.
add 08a9c59 Allow the Vector implementations to return a narrower primitive type if it can hold the value. Added a toString(int) method.
add fd347bb Reorganize Vector API: - rename toString(int) as stringValue(int) for consistency with other xxxValue(int) methods. - rename view(int...) as pick(int...). - add a toString() method for correct representation of unsigned numbers. - provide default implementation of most xxxValue(int) methods. - change some method declaration order.
add e322a4c Add support for vector backed by String[] array. This is not recommended, but happen because of the way GDAL encode some of their extensions in GeoTIFF tags.
add 1e7632f Fix corner cases (NullPointerException, etc.).
add 458a5cd Add the sis-earth-observation module. Contains only 2 simples classes for now in order to get feedback from the list before to continue.
add 49ae276 Add svn-ignore property on the new module.
add 70a85e5 Updated the list of developers and contributors in pom.xml files.
add b5855d2 AttributeTypeBuilder cache must be cleared when a characteristic is removed.
add a123999 Provide a default formatting for all operations.
add afc51a9 Allow to get the name of associated FeatureType in FeatureAssociationRole, even if the name is not yet resolved.
add 6d54b5b Fix an IllegalStateException when AssociationRoleBuilder is created for an existing association to a NamedFeatureType.
add 3de3b3c Fix javadoc error
add 242b360 Javadoc and formatting (no code change in this commit).
add e580da1 Address type-safety issue with parameterized types in filter. In particular, evaluate(...) should not accept a null Class argument. This commit contains opportunist code reformatting.
add a428d5a Add java.math.BigDecimal in the list of types for which we provide a name in the GCO namespace. Update javadoc with both the addition of BigDecimal case and documenting the URL recommended by WPS standard. Opportunist javadoc reformatting.
add 78dd333 Convenience constructor which was used to set the "alternate title" property now also set a default "title", if possible. This is for reducing the weird case of a Citation having only an alternative title and no title. Opportunistic javadoc formatting.
add ba53197 Make the doc-files/LandsatMetadata.html documentation and the LandsatReader.java implementation in agreement.
add 94e8052 Javadoc fixes and rename 'storage' parameter name as 'connector' for consistency. There is no significant code change in this commit.
add 0753e15 Provide LandsatReader service behind a LandsatStore facade. This require an implementation of LandsatReaderProvider, for which we reuse code that were designed for WKT data store.
add a2cdea5 Avoid a reduncency in Loggers and add a logger for earth-observation.
add 744c0ba Expand the number of fraction digits in second from 1 to 3, in order to avoid an ambiguity in the way SimpleDateFormat interpret the "S" pattern in "ss.S".
add 2ce9d47 Omit the clock part if hours, minutes, seconds and milliseconds are zero in UTC timezone. This is in anticipation to a change to use to java.time packages in some future SIS version.
add d36fe3e Post-merge cleanup. This commit does not contain siginficant code change.
add fcdf599 Replace the use of java.text.SimpleDateFormat by java.time.DateTimeFormatter and provide a compatibility later. The pre-JDK8 branches will need to keep old mechanism of top of the java.text.SimpleDateFormat.
add bf2041d Test resources shall be written in test target directory, not in the library target directory.
add 1cf219e Add the application/sis-webapp/src/test directory to NetBeans project configuration.
add 5cb2d97 Javadoc formatting (no code change in this commit).
add 0c932cd Javadoc formatting (no code change in this commit).
add 5bfd0e9 Javadoc formatting. There is no significant code change in this commit.
add 7a3f70b Refactor Landsat metadata reader for using MetadataBuilder. This allow us to regroup the parsing of Landsat attribute in a single switch statement, since many of the complexity previously in LandsatReader moved to MetadataBuilder.
add 7cac1dc Javadoc formatting (no code change in this commit).
add da2056a Complete information about bands from Landsat metadata.
add 50d171e Document the band attributes.
add 4c26212 Add metadata about grid size and group bands in 3 categories: panchromatic, reflective and thermal bands.
add 158eb80 Construct the map projection (UTM or Polar Stereographic) from Landsat metadata.
add 9843a74 Add requirement identifier in Landsat acquisition metadata.
add 69247bd Add missing documentation for product request identifier.
add d66b0f5 Javadoc formatting or minor rewording. There is no code change in this commit.
add d568bd9 Add defensive synchronization. The DataStore javadoc said that implementations do not need to be thread-safe, but we nevertheless synchronize since DataStore are often used in multi-thread context and the user may forget to perform his own synchronization.
add 8290b93 Continue work on CSV data store: complete metadata parsing and move the parsing of Features in a Stream.
add a4a76e0 Javadoc formatting (no code change).
add 40c3f45 More efficient parsing of CSV row by pre-computing more information in the iterator constructor.
add acaf74f Javadoc formatting. There is no significant code change in this commit.
add c163815 FeatureFormat should be able to format array too. This implies that we should limit the maximal length of values to format.
add 49d274a Tune the CSV metadata and add a StoreProvider for CSV format.
add 72c45b0 Javadoc formatting.
add c7fb615 Remove NetCDF Attribute.toIsoDate(String) method, which is replaced by use of java.time.format on JDK8.
add 4cb3d0e Refactor the NetCDF data type constants as an enumeration. Those enumeration values include information about whether the type is signed or unsigned.
add b2f6927 A plain HashMap is sufficient for storing the NetCDF global attributes and the variable attributes.
add 6696bff Store attribute values as primitive wrappers instead than arrays where there is only one value.
add a72fbb4 Replace string values by the ACDD (Attribute Convention for Dataset Discovery) constant from the UCAR library when possible.
add a60789a Begin implementation of Moving Features encoding in NetCDF files.
add 36c53bc Minor performance improvement in NetCDF reader by more extensive use of HashMap instead than iterating over all dimensions or variables. Wraps array of primitive type into a org.apache.math.Vector object, which also allow us to take in account the unsigned types. More progress in implementation of moving features NetCDF encoding (not yet finished).
add fea8f7b Javadoc formatting.
add b97f38f Fix a NullPointerException and a PropertyNotFoundException in FeatureFormat.format(...).
add 6f2ce0d Make IndexedResourceBundle.getKeyConstants() protected for allowing us to declare resource bundles outside the org.apache.sis.resources package. The intend is to start splitting some resources on a per-module basis instead of putting everything in sis-utility. This commit contains also opportunistic javadoc formatting.
add 2e9b487 Allows ResourceInternationalString to be subclasses outside the org.apache.sis.util.resources package. Not that this is still an internal API (excluded from javadoc), even if the package name does not contain the "internal" word. Opportunistic javadoc formatting.
add 6992d28 Remove an incomplete sentence in a comment.
add 785bc12 Begin refactoring of some (not all) resources on a per-module basis. The resources that are likely to be used only by a specific module are stored in an internal package of that module. The resources that may be shared by more than one resource stay in org.apache.sis.resources package of sis-utility module. In this commit, only the description or logging messages of sis-referencing are moved.
add fbc9a5d Moved more referencing-specific resources to o.a.s.internal.referencing.Resources.
add fc3bf70 Modify the NetBeans project configuration for taking in account the new resources layout.
add 0268b22 Remove an unnecessary package-private ProjectionException constructor, and opportunistic javadoc formatting.
add cb5a607 Added comments advising to not use those internal resources outside the sis-referencing module.
add ab2a106 Moved some resources that are specific to the sis-feature module into that module. Some error messages were improved.
add 1ede810 Moved more resources to their specific modules (in this case, sis-storage and sis-netcdf).
add 9d75aea Moved more resources to the sis-referencing module.
add 2024b0a First draft of a convenience class for managing FeatureTypes in DataStore implementations.
add fd550a1 Miscellaneous cleaning: javadoc fixes, rename Resources.getResources(…) as Resources.forLocale(…), more helpful error messages when the EPSG fallback ("EPSG-subset") does not find a code, add test for GenericNameMap.
add 7843260 Javadoc formatting. No significant code change in this commit except a check for empty ranges in Range.union(Range) and Range.intersect(Range).
add 94e8e89 Add a Vector.range() method, together with specialized implementations in sub-classes for performance.
add d579d51 Move findDimension(String) method from Variable to Decoder. Search harder for the variable having the "cf_role" attribute. Use Vector.range() for finding the maximal value.
add 55c7330 Add a test for the Vector.range() method.
add 7fc0fb6 add tiff tags (work in progress)
add 75dbe3c Javadoc formatting. There is no significant code change in this commit, except the replacement of 'bitCount' loop by a call to: Math.max(1, Integer.SIZE - Integer.numberOfLeadingZeros(maximalValue)); which produces the same result in a more efficient way.
add 880d18a Add Vector.isInteger(), Vector.increment(double) and Vector.compress(double) methods. Those methods are used directly or indirectly by NetCDF FeaturesInfo implementation.
add 9373921 Javadoc cleaning and minor code review.
add 660dc5b Add resources for the sis-geotiff module and throw a more accurate exception when "BitsPerSample" can not be decoded.
add 37d3392 Bug fix when removing non-ambiguous name from the map.
add 5db9e4f Complete the Vector.compress() method and add tests.
add cafdc50 Updated dependencies.
add 68abc5a Replace JSR-275 dependency by JSR-363. The project build but tests are temporarily disabled since many of them fail for now. Tests will be fixed when we will replace the JSR-363 reference implementation by Apache SIS own implementation.
add 1ba6846 Some additional pre-defined units of measurement.
add 779e567 Begin custom implementation of JSR-363 (Units of measurement).
add 08ae614 Initial implementation of UnitConverters, and partial implementation of SystemUnit.
add 884f88a Finish implementation of all Unit methods. Not yet tested (tests will be the subject of next commit).
add 856ff8c Add missing hashCode() and equals(Object) methods.
add 8bb46cd First implementation of UnitFormat.format(...) method in replacement of the reference implementation. Begin tests.
add a1cf626 Remove all dependencies to tec.units (except for parsing - temporarily) and start re-enabling some tests.
add df5d13d More tests and bug fixes in SIS implementation of JSR-363.
add 9a58aca Add more test for JSR-363 implementation.
add 765905f Keep trace of hard-coded units and allow to retrieve them by their symbol.
add 4b8806c UnitsMap is no longer needed now that we handle EPSG codes directly in our Unit implementation.
add 3afb597 Add tests for SystemUnit.asType(Class<Quantity>).
add ac3efd5 Begin work on UnitFormat by first clarifying which Unicode characters we will use.
add 0cfe5d7 Remove PatchedUnitFormat. It should not be needed anymore since we will provide our own UnitFormat implementation. Provide cleaner implementations of Units.toStandardUnit(...) and Units.derivative(...). It is now possible since we control our implementation details. This commit contains also opportunistic Javadoc formatting.
add bdf6299 Minimalist support of UnitFormat.parse(...) with only with label, symbol and their exponent for now. Remove the tec.units dependency.
add effc877 More dependency adjustments.
add 3d57735 Add SI prefixes parsing support.
add 5559c66 UnitFormat need to append the scale factor of ConventionalUnit.
add 27a1962 Use extended precision for the matrix computed by CoordinateSystems.swapAndScaleAxes(...).
add f6bf61b Implement the scale factor of LinearConverter as a ratio for more accurate inversion and concatenation. Add JUnit tests.
add 3a727d5 Allow ConventionalUnit to detect when a newly created unit is equivalent to an existing one. Add more test cases.
add 1e63dd8 Use StrictMath instead of Math in tests as a matter of principle.
add 9d63bfa Javadoc fixes.
add f9a4cf1 Add support for parsing product of units.
add fa47419 Fix a javadoc error.
add 2f7e351 Declare a javax.measure.spi.ServiceProvider for the JSR-363 implementation.
add f76d144 Need to extend TestCase.
add 1408ada Javadoc formatting.
add aaa558e Re-enables test and debug. With this commit, all tests are back.
add 932d2cf Modification in the way we build the internal list of "related units". Add explanatory comment and test.
add 50c872c Test tuning: exclude the "tec.units" transient dependency which was inherited in NetCDF module. Add more tests.
add 1dfae55 Support also parsing of units written in a form like "100 feet". While not legal UCUM syntax, such units are sometime found.
add 333bf26 Javadoc formatting.
add 8b5f57a Remove or deprecate some hacks (e.g. Units.multiply(Unit, double) method) not needed anymore since we replaced JSR-275 by JSR-363. This imply a revision of the tolerance threshold when determining if two LinearConverter are equivalent.
add e2a8a7f Complete the set of units declared in the Units class. It cover now most of the BIPM units, except the ones related to radioactivity.
add 7237d79 Remove the deprecated 'setCardinality' method.
add 02b6776 Javadoc formatting (no significant code change).
add 1c2f184 Document the Copyright class and adjust the value returned by some methods.
add af8cdd1 Performance improvement: when searching for a CRS in the database matching a given CRS, filter better the EPSG codes by IdentifiedObject sub-type before to instantiate the object. The filtering that existed before this commit was doing only part of the work and was not sufficient.
add 784e7e5 Javadoc formatting.
add 58fc358 Remove the heuristic rule that tried to determine if we can inverse the sign of the parameter value for the inverse operation. That heuritic rule performs the wrong guess for EPSG "Affine parametric transformation".
add 44f2b2c Javadoc formatting.
add 1bbd7ca Fix for SIS-333: Ellipsoid that are sphere should have <isSphere>true</isSphere> as their second defining parameter in GML.
add 3a46e5e Partial consolidation of GPX metadata.
add a8a544c Give a hook that subclasses can override for easier control on the CoordinateOperation inferrence.
add a427b74 Javadoc formatting.
add c8ffc01 Partial refactoring of GPX store: - Reduce code duplication between GroupPolylinesOperation and GroupPointsAsPolylineOperation by using inheritance. - Replace Envelope by GeographicBoundingBox. It simplifies code and reflects the GPX specification, which restricts the CRS to WGS84. - Create a Element class as the common parent of Person and Copyright. More code will be added in that parent class for URI parsing. - Move the FeatureType constants in GPXConstants in a separ [...]
add d9d25f5 First draft of CRS creation from Tiff tags. Work in progress.
add ed5d5ef Minor comment formatting.
add 547dfe6 Fix SVN properties.
add 47ca982 Partial review of GeoTIFF development (mostly error messages for now).
add c69cd07 Complete the message about dithering or halftoning matrix.
add 822e5ec Bug fix: some JDBC drivers do not represent boolean values by 0/1 or false/true, but f/t. We need to add this variant in the set of value that we can convert to boolean. If the text value is not recognized, throw an exception instead of silently ignoring, so we can detect sooner next time that such problem occur. Fix also a bug in the list of URLs returned by getAuthority() and add a log message given the URL of the database after the first connection. This commit contai [...]
add 5631e51 Set default character encoding to US-ASCII as specified in GeoTIFF specification. Change tile size type from long to int. The size of 'long' type seems excessive for a tile and can not fit in java.awt.image.Raster anyway.
add f94329e Continue CRS creation from tiff tag : add Geographic CRS behavior and some documentation.Work in progress.
add fcbbb4d Add a comment explaining why we need that SQLUtilities.toBoolean(String) throws an exception if the given value is not recognized. Remove an obsolete comment.
add 4c87844 GeoTiffStore does not need to check for null CRS. Add a comment explaining why.
add 3d8377e Metadata generated from a NetCDF file should include the transfer function (scale factor and offset).
add 771ab43 Complete (for now) the ImageFileDirectory review. The most important change is that all attributes related to strips have been removed. Instead, strips are considered as a special kind of tiles where the tile width is the image width. This approach allows us to remove code duplication.
add a18d02d Refactor CRSBuilder class and add retrieveCartesianCS method.
add 9152ef3 Review MetadataBuilder. This implied changes in ImageFileDirectory. This work will also require the org.apache.sis.metadata.sql package. For now we put hard-coded values, to be replaced later by database.
add 82385fa Complete creation of CRS from Geotiff tags.
add c98bebf Make the referencing module more robust to the case where the SIS_DATA environment variable is defined but the SQL scripts needed for creating the EPSG geodetic dataset are not there. If the SIS_DATA environment variable is not defined during test execution, set it to the 'target' directory, so a temporary database will be created there. This fix the test failure introduced by the previous commit in the earth-observation module.
add 788e020 Make AuthorityFactories more robust to race conditions.
add 9c721f4 Javadoc formatting.
add 920b67a Continue implementation of org.apache.sis.metadata.sql.
add 4c5ff5f Ported MetadataSource.search(Object) implementation.
add 45686f0 Port helper methods to be needed for MetadataSource.lookup(...) implementation.
add 91dcfac Complete the port of MetadataSource, pending a temporary hack in the lookup method to be removed after we moved format information into the database.
add 9ea1bec Remove the patch for the "NTF Paris (EPSG:4807) → NTF (EPSG:4275) → RGF93 (EPSG:4171)" transformation path. This patch was not compatible with Derby because of the use of boolean values. We could fix that, but instead we wait for release of the next version of EPSG geodetic dataset, which will include this path.
add dc2bc49 First draft of a SQL installation script for metadata about file formats. This draft required changes in ScriptRunner and all classes that used it in order to avoid duplicating code. More metadata will be added later.
add 6be098e Add support for deprecated properties in a FeatureType.
add d9f260c Attribute.characteristics().get(String) should accept short names (i.e. allow the scope to be omitted when there is no ambiguity). This is the same mechanism than the one already used by FeatureType. Opportunistically generalize the search for shorter names.
add 4a22cf0 Retrofit MetadataResult into MetadataSource (the previous separation was causing more difficulties than help). Remove that hard-code values from MetadataSource.lookup(); now perform the search in the database instead.
add 3d25d1b Add a test case for MetadataSource.search(Object).
add 9e98e48 More robust handling of "EPSG" schema name in SQL statements.
add 2de1e98 Enable the test of EPSG dataset on HSQLDB and add a test (to be run manually for now) on PostgreSQL.
add 78e15f5 Add some more metadata. The value added there were hard-coded in the Java code, but we have not yet done the replacement of Java code by searches in the database.
add b223545 Fix encoding in SVN properties.
add 056035b Adjustment of Unicode character used in negative infinity formatting. Javadoc and comment formatting.
add 917fcef GeoTIFF keys are unsigned short values.
add 44ed222 Renaming (no significant code change yet).
add 8006472 Partial refactoring of GeoTIFF CRSBuilder.
add da0bb58 Fix NetBeans project configuration.
add 8ef3c15 Continue review of GeoTIFF CRS builder.
add a1b7fe2 Extract some metadata from GeoKeys.
add e2ae1ed Cleanup the creation of GeodeticDatum in GeoTIFF files.
add fbe647d Javadoc formatting and add assertions. No significant change in this commit.
add e89ed7e Refactor the code that provide the EPSG code for a given Coordinate System and unit of measurement. That code has been moved into a new CoordinateSystems.getEpsgCode(Unit, AxisDirection...) method. This will allow us to use the same functionality in more places than only the GeoTIFF reader.
add 820bb12 Continue the review of GeoTIFF CRSBuilder up to the creation of ProjectedCRS.
add 6e9093a Javadoc and CRSBuilder.toString() implementation.
add 5bd1de8 Javadoc (no significant code change).
add e86eebf CRSBuilder now parse the prime meridian, ellipsoid and datum names encoded in the geographic CRS name. The GeoTIFF specification does not mention that, but we see this practice in some GeoTIFF files.
add e51c965 GeoTIFF CRSBuilder shall set map projection parameter values according the GeoKeys found in the file. This require the addition of GeoTIFF parameter identifiers (in addition of EPSG identifiers) in projection providers. Some cleaning of a few GeoTIFF metadata were applied as a side effect.
add b0842ef Renamed 'replaceIdentifiers' as 'reidentify'. According https://en.wiktionary.org/wiki/reidentify, that word exists.
add 9112356 Fix SVN properties.
add bb3c839 Specifies which warnings to display in the editor when using the NetBeans project.
add 53f1f23 Cleaning: add 'throws ObjectStreamException' after 'readResolve()' method: even if it appears to not be necessary, the java.io.Serializable specification nevertheless seems to consider it as mandatory. Opportunistic javadoc formatting.
add 885eb2f Post-merge cleaning (reporting changes that appear to be needed during the merge operation).
add edb0fa2 Create a JDK9 branch as proposed on the mailing list. https://lists.apache.org/thread.html/fc95cf9aa26630e760280de36fb8b2ddf0ac1fd33fb3a546aea68920@%3Cdev.sis.apache.org%3E
add e0da0d0 Set version to jdk9-SNAPSHOT.
add 0928f6a Set NetBeans project to JDK9 platform.
add 8cf2b81 NetBeans configuration for Jigsaw.
add bce8a71 Upgrade to the new doclet API. We have one unresolved issue, which is how to get the file where a tag is contained (was allowed in the old API, I didn't found the replacement yet).
add 3d9008d Remove the profile for the "bootclasspath" since JDK9 "-release" option can replace it. Upgrade Maven plugin dependencies for allowing use of JDK9.
add ee05ed0 When reading a TIFF file, apply a safety check against circular references in the IFD chain.
add 40ad367 Better detection about where the parsing of unit should end (i.e. remove the previous hack). Initial support of parenthesis.
add ec4ee70 Add tests about units of measurement parsing with parenthesis, e.g. "kg∕(m⋅s²)".
add bcc1e7e Fix some javadoc and javac warnings.
add a78c0b8 Merge information: skip configuration changes on JDK9 branch.
add 2e44b3c Override Format.clone(). No matter if we use it or not, it is required by the clone() contract since this method is made public by java.text.Format.
add 404c16f Add GeoTiffStoreProvider.
add a6b8f96 Add GeocentricCRS and VerticalCRS case in GeoTIFF reader.
add 515d17c Feature attribute should not be cloneable unless requested by the subclass. Move 'parameters' package-private method in an internal package so it can be shared by GPX.
add 7f2a0fc Use FeatureTypeBuilder for creating the FeatureType constants. Rename GPXConstant as Constant since it is in the gpx package. Cleanup.
add 3f9f6d9 Replace URI by OnlineResource. Replace GPXVersion by Version. Move tags in their own class.
add ac0d7e4 Cleanup StaxStreamWriter. Skeleton of StaxDataStore.
add 3181365 Add JAXB annotation for metadata, but do not use them yet. Add email type as defined by GPX specification. Replace <keywords> string by a list. Rename Constants as Attributes.
add b61e782 Javadoc formatting and add a @XmlTransient annotation on AbstractEnvelope (for subclassing by modules that use JAXB for parsing envelopes).
add e9d589a Validate the GPX sample file and first draft of GPX 1.1 <metadata> parsing using JAXB. The <time> element is excluded for now (pending investigation of how to use java.time with JAXB).
add dbce502 Re-enable parsing of dates in metadata. Remove the parseMetadata110() method, which is replaced by JAXB usage.
add fe12ece GPX reader take Locale, TimeZone, WarningListeners and namespace in account. Make other stores ready for the eventuality where DataStore constructor would take more information from the StorageConnector. Specify the expected type when unmarshalling a document part with JAXB.
add a0b42e7 Upgrade Maven dependencies.
add 5a8d1a9 Rename StaxStream as StaxStreamIO. Parse metadata outside the constructor for allowing 'close()' method invocation in case of error. More accurate date and time parsing, using LocalDate only if there is no timezone information.
add 0c02f1d Replaced sequence of "if ... else if" by switch statement. Replace Iterator pattern by Spliterator.
add 564fb17 Consolidation of GPXReader. Include better error messages with line and column numbers if available.
add c0b9fe3 Begin skeleton of FeatureStore, only as internal API for now (need more experiment before to move in public API).
add bd725a8 Add a 'Trackable' interface (internal API only for now) for querying the position of a source (typically an InputStream). It is like 'Seekable' but without the need to seek position.
add 04880e6 Add mark() and reset() methods in Trackable internal interface.
add 55f1c22 Partial StaxDataStore implementation, enough for having StaxStreamReader to delegate XMLStreamReader creation.
add 2a65a1c Complete the revision of GPXReader for most parts except having 2 or more stream opened concurrently.
add 19022ba Separate the JAXB context for GPX from the JAXB context for ISO 19115. This require that DataStore keep a reference to their provider. Prepare for GPX writer revision.
add f0f7999 First draft of refactored GPX writer (not yet tested).
add bcdba0a Add a StreamWriterDelegate class as a complement of JDK's StreamReaderDelegate. Refactor FilteredStreamWriter to inherit StreamWriterDelegate, and add another subclass for STAX-based data store. Modify the way we marshal fragment in STAX: we need to set the Marshaller.JAXB_FRAGMENT property to Boolean.TRUE. Provide a way to omit the namespace declaration inserted by JAXB when this namespace is the default one.
add c855ad1 Class renaming: GPX prefix is implicit with the package name.
add 4375901 Enable tests of GPX metadata writer.
add 331bb47 Complete GPX writer tests, now including features.
add 53f64cf Minor cleanup: class renaming and remove the use of XML.DEFAULT_NAMESPACE which does not work as expected.
add added8e Move location of GPXTestSuite for consistency with other modules.
add 71f9707 First draft of a mapping from ISO 19115 metadata to GPX.
add a218413 Complete ISO 19115 to GPX metadata conversion. Improve error message if a FeatureType is not valid for the data store.
add b0adc49 Partial consolidation of Exception.getMessage() versus getLocalizedMessage() policy. This commit contains opportunistic javadoc formatting in classes that have been reviewed as part of this policy consolidation.
add f2c09bd Replace the boolean argument in DataStoreException subclass by OpenOption[]. Inline some calls to Exception.initCause(...). This would be easier if more exceptions were using return type covariance.
add 5c3260f Add a ParseException specialization for failure to parse Well Known Text (WKT) format.
add 506d58b Minor tuning of LocalizedParseException.
add 81001b7 Regenerate all resources without using key "0". We reserve zero for meaning "no localized message".
add ba47ad9 Javadoc formatting. There is no significant code change in this commit.
add 32d9242 Add a DataStore.getDisplayName() method in the parent class and remove the private 'name' field in the subclasses that managed their own display name. Add a FeatureStore.getFeatureType(String) method and move the GenericNameMap in public API for making easier the task of DataStore implementations. Renamed GenericNameMap as FeatureNaming and provide more localization support for IllegalNameException.
add 0ff04b8 First draft of an utility class for merging metadata.
add a43b383 Javadoc formatting.
add b3f979b First draft of a helper method for DataStore that work like a FeatureCatalog.
add 4601e87 Test the merge operation and merge the hard-coded FeatureCatalogDescription metadata in the GPX metadata.
add 9013906 First draft of a mechanism for re-opening a new input stream if a DataStore needs to read the same data more than once.
add 4de20e6 Tests multiple readings from the same XML data store.
add 62439d6 Prepare storage module for better support of write operations.
add c990759 StAX data store can now switch between read and write modes.
add 7422e8d Move the "...internal.storage" classes that are related to channels and input/output streams into the "...internal.storage.io" subpackage.
add 70ba95e Complete (for now) GPX format support by leverage the MIME type detection mechanism that was done for JAXB-based data store, registering the GPX provider and adding an entry for GPX in the metadata. In this commit was also simplified a little bit the loops on XMLStreamReader.next() or getEventType() by defining a 'next()' convenience method taking in account the post-unmarshal case.
add abb7149 Renamed the ….sis.internal.xml package as ….sis.internal.storage.xml.stream since it extends the ….sis.internal.storage.xml package with support for StAX stream API.
add ca5d2d4 Moved ….storage.internal.gpx package in ….storage.internal.storage.gpx for consistency with other storage internal packages.
add c94db28 Post-merge consolidation, allow MimeTypeDetector to recognize XML root element in default namespace, and add GPX to the list of formats recognized by the command-line tools.
add bf76a8a Allow the command-line tools to list available data stores.
add a475c99 Provide a mechanism for allowing DataStoreProvider to specify whether they support write operations. The mechanism provided in this commit (based on an annotation) will probably need to be revisited in a future version, so we keep it in internal package for now.
add f770ca6 Add two missing files that were missing in the previous commit.
add 26dbdac MetadataStandard.asValueMap(…) / asTreeTable(…) should work even if the argument implements more than one metadata interface (SIS-346).
add a7d1098 More accurate detection of cyclic graphs in TreeTableFormat by looking not only at the metadata instance, but also to in which property the metadata appears. The intend is to support classes that implement more than one metadata interfaces, like the Metadata class used internally by the GPX datastore. This work required that we clarify the 'equals(Object)' and 'hashCode()' method contract in TreeTable.Node interface. As a side effect, this commit contains javadoc reforma [...]
add 334380c Replace the check for DefaultTreeTable.Node special case by a mechanism less hidden.
add 2268718 First draft of a CRS.suggestTargetCRS(CoordinateReferenceSystem... sourceCRS) method. As a side-effect of this work, contains SIS-347 fix (Extents.area(…) wrongly returned 0 when the box is 360° wide).
add 4c5ff3d Add tests for CRS.suggestTargetCRS(…) together with a bug fix. This commit contains opportunistic javadoc formatting in classes that have been reviewed as a side-effect of this work.
add 82b199f Javadoc formatting and minor warning fixes.
add 92f69b4 More javadoc formatting (partially done by scripts before review).
add eec4e3e More partially automatized javadoc formatting.
add 4244a02 Javadoc formatting and minor compiler warning fixes.
add 77be1c8 Javadoc formatting and minor compiler warning fixes on sis-utility tests.
add fcc5dbd Javadoc formatting and minor compiler warning fixes in metadata internal packages.
add 7cda6b8 Javadoc formatting and minor warning fixes. Contains also a fix for a hole in ISOMetadata.freeze().
add c325c73 Javadoc formatting.
add 714ec19 Formatting (mostly javadoc) and fix of a few minor warnings.
add a358101 Fix a test failure when CRS.suggestTargetCRS(...) test is executed without connection to the EPSG database.
add 6d6b0de Fix an AssertionError when StandardMetadata.isMetadata(Class<?>) is invoked with a primitive type.
add 038c835 Override clone() as a matter of principle even if this is only for casting the result. We do that only for public classes.
add 0af228d Formatting (mostly javadoc) and opportunistic minor javac warning fixes.
add 8c594ca URL to JSR-363 javadoc seems to have changed.
add 9f94d1b Javadoc formatting in storage modules (except shapefile). No significant code change in this commit.
add b1d49fb Javadoc formatting (last bunch).
add 24af0de Merge from JDK8 branch.
add 494fe4e XML.marshal(...) now convert implementation of GeoAPI interfaces that are not the default implementation. This allows us to marshall GPX metadata in ISO 19139 format.
add 89ebefd Enable usage of GPX as an output format for the command-line. Take format version number in account.
add b13527a Allow formatted XML output when using XMLStreamWriter. This apply to GPX format.
add 200b34d Initial port of CoordinateFormat class.
add 1dd4a50 Implement CoordinateFormat.parse(...) method. This require a fix in the way UnitFormat and DefaultFormat detect the end of the string that they have to parse.
add 454b595 CoordinateFormat should ignore spaces around the separator at parsing time.
add 0510b44 Update copyright year.
add 02f847f Change CompoundFormat.parse(CharSequence text, ParsePosition pos) javadoc for making it consistent with all implementation except TreeFormat, and update TreeFormat implementation for making it consistent with new specification. JIRA: SIS-348
add 332fdcd Implement Transverse Mercator Zoned Grid System (EPSG:9824) https://issues.apache.org/jira/browse/SIS-220
add 8ac0f6f Fix a dead-lock between ContextualParameters and WeakHashSet (SIS-349).
add c0d4af9 Move the TransverseMercator static methods working on UTM zone into a new enumeration: Zoner. Still internal API for now.
add 20d4d68 Complete TransverseMercator.Zoned test, and add Latitude and Longitude convenience constructors from a DirectPosition.
add ba000c8 Trivial import fix.
add a339ba5 Begin a skeleton of "referencing by geographic identifiers" package, using MGRS as a first system.
add 804a5a5 First working version of Military Grid Reference System encoding, UTM part only (not yet polar part).
add 9357b3b Begin on-the-fly reprojection before MGRS label encoding (work in progress).
add 5c14a26 Complete support of MGRS label formatted from arbitrary CRS. It does not include yet the support of polar cases.
add abb5c6e Fix the parameter values for Universal Polar Stereographic (UPS) projection.
add df37b31 Add a 'setSeparator(String)' method.
add 808cb5b Support Norway and Svalbard special cases at the source (in the UTM) methods rather than in MGRS only.
add 3c19b7d Javadoc adjustments.
add 22954d1 Fix a regression caused by the new unit framework, when equalsIgnoreMetadata(...) fails to detect that 2 units are equivalent even if not defined in exactly the same way.
add 737d734 Initial implementation of a CommonCRS.universal(φ,λ) method in replacement of CommonCRS.UTM(φ,λ) for handling the UPS cases. https://issues.apache.org/jira/browse/SIS-353
add 71ac56c Add tests.
add 7b505b5 Begin implementation of MGRS parser.
add e013232 Fix the calculation of northing value and improve error messages.
add 706e30d Refactor MGRSEncoder as an inner class of MilitaryGridReferenceSystem.
add 4c78408 Partial parsing of the numerical part of MGRS. Still need adjustments.
add 2aecc5f Fix the correction which is applied when the coordinate is in the wrong latitude band.
add c48bbee Add more verification about validity of parsed MGRS reference.
add 89185c1 Fix an occasional 2000 km error in decode(CharSequence).
add 6220d75 Implement MGRS encoding of polar coordinates.
add 7ed3ff8 Remove the WGS84 and revert to the no-argument constructor instead, but we a Javadoc notice about the default datum choice.
add 30d8dda Implement parsing of MGRS coordinates for polar cases.
add 0b6726a Move the "org.apache.sis.referencing.gazetteer" package in its own module: sis-referencing-by-identifiers. The rational is that there is a lot of different geographic identifier conventions, so this module may growth in the future, while it is not needed for most SIS operations.
add 6df4095 Base class for ISO 19112 SI_SpatialReferenceSystemUsingGeographicIdentifiers.
add e320cf5 Initial implementation of ISO 19112 LocationType.
add 099aeaf Rename DefaultLocationType and LocationTypeSnapshot, make ReferenceByIdentifiers non-abstract.
add 76bb0d0 Rename LocationTypeTemplate as ModifiableLocationType, implement toString(), equals(Object) and hashCode(), add tests and documentation.
add b2c2a19 Move the resource related to "referencing by identifiers" in their module.
add 1788caa Update NetBeans configuration for the resources change.
add dbe3b23 Add a check against infinite recursivity.
add 7585b08 Initial declaration of MGRS as an ISO 19112 reference system.
add e915251 Begin implementation of a metadata "deep copy" operation.
add 14c81df Complete MetadataCopier for performing deep copy of metadata objects (SIS-355).
add adfeede Workaround for default JAXB implementation not recognizing STAX result.
add 7c59c10 Need a tolerance factor when checking validity of MGRS reference close to a line of change of zone.
add b99f979 Make the UTM zone verification a little bit less permissive by checking that the error is on the side of the zone change (not an error on the opposite side, where we should not have any ambiguity).
add 4846908 Verify MGRS metadata.
add 9c7c438 Modify the approach for decoding MGRS reference, using a table of precomputed northing values and set of valid 100 km squares.
add e024222 Replace loop by bitwise operation.
add a4f2df0 Fix an error in the figure (misplaced marks).
add 1753759 Minor update in comments.
add 98c5a10 Replace ~(rowBit - 1) by -rowBit
add af3f1d8 Verify that the latitude band is inside expected range.
add 10c53df Move the check for special cases into a Zoner.isSpecialCase(…) method.
add 6bead38 Add AbstractLocation class.
add a9f4b00 Begin the transformation of "Encoder" inner class as a Location implementation.
add 9b198a6 MGRS decode returns cell center instead than lower-left corner.
add cb00044 MGRS decode(CharSequence) now return a Location object instead of DirectPosition.
add a201992 Fix a NullPointerException when creating the metadata schema on a PostgreSQL database.
add 1b83478 Replace IndexResourceBundle.getLabel(short) by appendLabel(short, Appendable) for avoiding String concatenations. Instead, we write directly in the Appendable.
add 8eb28d3 First version of LocationFormat.
add 74ebbdf Fix the property order when the metadata implementation is a custom class.
add 524a720 Complete (for now) LocationFormat.
add b25f161 Fix west/east confusion.
add a495826 If a property is unspecified, inherit from the enclosing reference system if possible.
add 86d2c07 Change the order of property shown by LocationFormat for making easier to see the representative position in the context of location bounding box.
add 3a6ba50 Enable clipping of MGRS cell in domain of validity of their UTM zone.
add 4069079 Improve documentation.
add 5d28d4e Fix LocationFormat parent class and improve documentation.
add 283067d Post-merge cleanup.
add 3612784 Add a 'Coder.setClipToValidArea(boolean)' method.
add 8590105 Fix erroneous default value for scale difference (dS) in Bursa-Wolf parameters.
add bf8ac87 First draft of an iterator over MGRS codes in a given envelope. The set of codes returned by this first draft is not yet complete.
add 46e71dc First bug fix in encode(areaOfInterest): return also the cells that are on the left side of UTM zones.
add 1acc829 Handle the case of MGRS cells splitted in two latitude bands.
add bb19166 Add tests and bug fixes.
add d47c368 Support iterations on MGRS codes in an envelope spanning the anti-meridian.
add 904e79e Fix the polar cases of MGRS iterators and add tests.
add 7fffdb2 Bug fix when determining if we are allowed to take a shortcut while iterating over the cells in polar projection case.
add de7e852 Post-merge cleanup.
add 7ca3311 Refactor GeohashCoder as a ReferenceSystemUsingGeographicIdentifiers and move it to the org.apache.sis.referencing.gazetteer package.
add 291d032 More tests for geohash, taking in account coordinate transformations.
add 5311cbe When converting SIS_DATA to a database name on Windows, name separator ("\") needs to be replaced by '/'.
add a3619c5 Less aggressive warnings about the fact that those java.text.Format subclasses do not support parsing.
add cb78683 LinearTransformBuilder should be able to take advantage of the knownledge that source positions are distributed on a grid (when this is the case).
add 234fd71 Add tests about setting the target coordinates of LinearTransformBuilder when the source coordinates are on a grid.
add a283724 Initial draft of LocalizationGridBuilder, using DatumShiftGrid is the backing mechanism for applying residuals.
add e72d7fb Fix the calculation done by LocalizationGridBuilder when computing the residuals to give to InterpolatedTransform constructor.
add 7956c47 Upgrade some dependencies.
add 670cdf7 Set the NetBeans project dependencies to the same version than the Maven ones.
add 1df9364 Add the the NetBeans project some dependencies needed for execution of NetCDF tests on OpenDAP.
add 057b711 Update dependencies used during the build only.
add e1e7ae2 Merge from the JDK8 branch.
add a42c3a7 Update NetBeans project configuration for JDK9.
add 281ccf2 Set the version number to "0.8-jdk9-SNAPSHOT" on the JDK9 branch.
add f6fa11b Set the compiler version to 9 on the JDK9 branch.
add a984846 First attempt to define a module-info file (incomplete).
add 47c622d Merge info from the JDK9 branch (for skipping JDK9-specific changes).
add 8e677cc Skip the SVN info about merge to the JDK8 branch.
add 4e88bfb Enforce more checkstyle rules regarding whitespaces.
add f531054 Enforce Checkstyle rules on modifier order, redundant modifiers, outer class name and occurrence, unicode characters, Java-style arrays.
add 7a261c9 Order @version and @since javadoc tag in the standard order. We do not enable the "AtclauseOrder" checkstyle rule now because of a conflict with the {@preformat} custom taglet.
add 0ef3ebc Fix spelling error (throws -> thrown).
add ced85fd Javadoc formatting: move @see tags to the standard order (between @version and @since). The intend is to enable Checkstyle later with commonly-accepted conventions.
add 0e3923d More javadoc annotation ordered according Sun convention. The code should pass checkstyle verification if it wasn't for the conflict with {@preformat} custom tag.
add 43cfed9 Complete the selection of Checkstyle rules (except javadoc rules, which can not be activated for now).
add 9e7aa26 Merge the Checkstyle rules enforcement from JDK8 branch.
add 5bdf1af Store merge information.
add 5633c72 ObjectConverters should check the interfaces implemented by the source class if no converter is defined explicitely for that class.
add ae7b473 Port a collection to be needed later for implementation of coverage module.
add c30f0d3 Fix javadoc errors in {@link} and @see tags.
add 2cd3f90 Documentation: fix a broken link to LANDSAT book and clarify ObjectConverter javadoc.
add d46d31d More fixes in {@link} and @see javadoc annotations.
add 9109fa5 More fixes of {@link} and @see javadoc errors.
add 6a0f784 Complete FrequencySortedSet implementation.
add beb1a49 Trivial javadoc.
add cd39079 Implement operation methods for axis order reversal (EPSG:9843 and 9844).
add b4fc64b Implement Geographic2D with Height Offsets (EPSG:9618). https://issues.apache.org/jira/browse/SIS-284
add f22cd76 Use cases on "Geographic2D with Height Offsets" show that this operation method needs to allow the 'redimension(…)' method.
add eded8e8 JSR-363: add Quantity<?> support.
add 677653d Add a Units.quantity(double, Unit) method and provide a fallback implementation for UnitServices.getQuantityFactory(Class).
add 3fde513 Do not serialize Unit EPSG codes. They will be resolved at deserialization time.
add 0a94989 Upgrade Maven plugins. The compiler plugin contains fixes for building with JDK9.
add d443ca1 Move the Units.quantity(double, Unit) method in Quantities.create(double, Unit).
add 0c3de86 Fix a test failure when the path to test resource contains space.
add 56bc4bd Trivial documentation a formatting adjustments.
add bab549c Replace the "@" prefix by "sis:" in SIS conventional property names.
add 77d174d Update Maven surefire plugin.
add e2fa86d Bug fix: when adding "A" and "myNameSpace:A" properties, then asking for "A", FeatureNaming should find the former.
add 58ec45c Replace FeatureTypeBuilder.setDefaultScope(String) by setNameSpace(CharSequence). This allows less verbose GPX FeatureType.
add 65ef83d Bug fix when the EPSG tables are both defined in an "epsg" schema and with the "epsg_" prefix in table names.
add c747bdb Javadoc.
add 12df31e Add resources for GPX feature types.
add 498b81d Format feature property designations, with possibility to skip this information is not desired.
add d61af75 When parsing GeoTIFF keys for building a CRS, we need a mapping from projection parameter numerical codes (e.g. 3080) to parameter name (e.g. "NatOriginLong"). As a side effect of this work, review the behavior of Parameters.parameterIfExit(String) method regarding ambiguous names.
add 1acab2a Parsing of GeoTIFF files should be tolerance to duplicated map projection parameters.
add 43eabb9 Minor simplification of the stack trace in case of failure to connect to the database.
add 6d06ab1 Fix test failures that occur during integration tests (when we put all JAR togethers in one big project).
add e5617aa Avoid loading unneeded datum shift grid files (SIS-327).
add 5518c40 Whether the unit symbol can have a prefix (UnitRegistry.PREFIXABLE) needs to be specified independently of whether the unit is an SystemUnit instance of SI (UnitRegistry.SI). The reason is that not all SI SystemUnit instances can be prefixed: the main exception is "kg" where the unit to prefix is rather the ConventionalUnit instance "g". An other exception is the ConventionalUnit instance "L" (litre), which is not a SI unit but for which usage of SI prefixes is allowed.
add 91d3e9d Adjustement for the previous fix about handling of SI prefixes in "kg" and "l" special cases.
add 186ba90 CRS.fromWKT(String) and CRS.fromXML(String) should compare the parsed definition with the authoritative definition (if an authority code is available) and log a warning if a conflict is found.
add 70a25ff Addition of a CRS.fromAuthority(...) method. Since that new method is likely to need to log warnings, this commit contains consolidation (especially in documentation) of the way some warnings are handled.
add dc2f182 Add test.
add d2a615a Rename CRS.suggestTargetCRS as CRS.suggestCommonTarget.
add c18c799 Remove the warning in the documentation. Instead, document 'intersects(Envelope, boolean)' in terms of "intersects" and "touches" operation. https://issues.apache.org/jira/browse/SIS-172
add e80f673 Make Envelope2D consistent with the policy now applied in AbstractEnvelope as a result of https://issues.apache.org/jira/browse/SIS-172 resolution.
add 656aed7 Better node name when a property have the same name than its type and various subtypes are possible. https://issues.apache.org/jira/browse/SIS-298
add e01805a First draft of tree view simplification. https://issues.apache.org/jira/browse/SIS-298
add e2054de Missing annotation in previous commit.
add 098a6f9 More simplification of metadata tree.
add 03ab321 The use of compact mode in metadata tree table view should be optional.
add b63b40c Add a checkstyle rule against trailing spaces.
add 1e8d441 Avoid constructing the list of children nodes if not needed.
add 89b6d1c Javadoc style update.
add 38ce750 Fix errors when creating a geographic 3D CRS defined in the EPSG database as a CRS derived from three-dimensional geocentric CRS using the "Geographic/geocentric conversions" operation method.
add 176bd46 Fix an exception that occurs on attempt to redimension a "Geographic 3D to 2D conversion" operation method.
add e5e130e Initial port of IdentifierGenerator.
add 48f1746 More accurate warning message when the difference between two CRS is in the prime meridian.
add 1013212 Initial port of MetadataWriter, not yet fully enabled.
add 61e46df Lookups for responsibly parties (or any other metadata type having subtypes) must search in the right "child" table.
add c6d956d Update HSQLDB test dependency.
add bcbbc19 Update the developer guide assembler for the reorganisation of guide source files.
add 28d4f16 Command-line should display a compact view of metadata.
add 68902e6 Code provenance (GeoAPI, OGC or SIS) specified in the <code> element instead than in the <pre> element.
add 3a8f25a Fix documentation error: Metadata.constraint is about metadata constraints, not data constraints.
add 8b029ae Add links to related ISO 19115 attributes.
add 4339c9b Upgrade NetCDF dependency.
add 8fdf969 Prepare for updating EPSG database from version 8.9 to 9.0: the "epoch realization" column in the Datum table is no longer a year only, but now a year-month-day date.
add 1e78178 Update the code generating the CoordinateReferenceSystems.html page after upgrade to EPSG database 9.0.
add d94d941 Give protected access to AbstractFeature.get|setOperationValue(…) for easier usage by subclasses defined outside Apache SIS.
add 7773259 Compute the column name at reading time in a way more consistent with the way it is computed at writing time.
add b1781e8 Fix a bug that prevented the cache from being used.
add 43288fc Update for change on trunk (for making merges easier).
add d0b51ec Allow to specify the database catalog.
add b440d93 Should preserve the previous state of Semaphores.METADATA_ONLY flag.
add 912186d Handle empty collections of various types in a new CollectionsExt method instead than inline other methods.
add 3084ee9 First draft of a caching mechanism in the metadata objects created from database. Actually the main intend is not that much to do caching, but rather to leverage the code that compute property value from some other property values (this computation part will be completed in a next commit). The main use case is supporting the transition from ISO 19115:2003 to ISO 19115:2014.
add 738daa5 Add a Vector.doubleValues() method for inter-operability with APIs working with arrays.
add 9a7892e Invoke floatValue(…) instead than doubleValue(…) followed by a cast.
add 5a5d65e Fix an IllegalArgumentException when a property is defined in the implementation class but not in the interface. This happen on Apache SIS trunk during the transition from ISO 19115:2003 to ISO 19115:2014.
add 6496e53 Clarify the error message and stack trace in case of invalid property.
add 55cc05e When user asks for a property value on a metadata implementation backed by a database (org.apache.sis.metadata.sql package), we should take in account the cases where the property value is not stored, but rather computed from other property values. Such cases happen with ISO 19115:2003 properties which have been deprecated and replaced by new properties in ISO 19115:2014. Supporting on-the-fly computations in ...metadata.sql package requires that we keep trace of depende [...]
add e1db21b Provide instruction about how to inspect the content of in-memory Derby database during debugging session.
add bf8def1 When a GeoAPI interface is not defined for an ISO type, fallback on the Apache SIS implementation class. It does not make a difference for Apache SIS branches using GeoAPI 4.0-SNAPSHOT, but it makes a difference for Apache SIS trunk using GeoAPI 3.0 releases.
add 97cde33 Comment-out (for now) the properties that start a Derby server.
add a54be7f Support enumerations in the same way than code lists (both are controlled vocabularies).
add 6b612a1 Do not create foreigner key constraint when the CodeList or Enum type is abstract. This case never happen on Apache SIS branches, but happen on trunk because CI_TelephoneTypeCode was not present in GeoAPI 3.0.
add 63abf30 All CodeList are ControlledVocabulary, but not all Enum are ControlledVocabulary.
add 9c47bf7 LinkOperation should check if the referenced property is itself another LinkOperation.
add 3d49fca Update Maven dependencies.
add f5717d3 Update the "Operation Methods" page generation code with better explanation text.
add 0fc4387 More extensive support of NetCDF units ("degrees_N", "degree_N", etc).
add 804dc4c Allow parsing of unit symbol containing exponentiation operator, as in "m*s^1". UnitFormat already supported implicit exponentiation as in "m*s-1", but some formats add an explicit ^ or ** operator.
add 5b32736 Fix a type in a NetCDF attribute name, and prepare for more development.
add 4ce7b4e URL to the authoritative definition of ACDD attributes changed.
add a6b1851 Comma-separated list in NetCDF attribute needs to take in account quoted text (for escaping comma).
add bbbb3ea Fix formatting of Feature associations and improve formatting of cardinalities.
add dcfcde9 Do not insert hyphens in javadoc comments that are at the beginning of table cell. An example of table where such hyphen where undesired is org.apache.metadata.sql.MetadataWriter.
add 571a780 Javadoc completion.
add 337bb75 Update link to UnidataDD2MI.xsl.
add 31f7cab For each metadata type, provide an overview of mandatory or conditional properties.
add 3b1e05c CSS tuning for the tree tables added in previous commit.
add 8514742 Base NetCDF MetadataReader on internal MetadataBuilder. This simplify the construction of IdentificationInfo properties.
add 0ce174e Use MetadataBuilder helper class in NetCDF ImageReader for building the CoverageDescription node. This simplify a bit the MetadataReader class.
add 50e7291 Use MetadataBuilder for "spatial representation info" ISO 19115 node created from NetCDF files.
add b05ca45 Mostly documentation clarification for remembering the relationship between "source" and "target" dimensions versus NetCDF "domain" and "range".
add 6ebad53 Add missing javadoc links, remove @see tags to internal API, formatting.
add 6eb0ecf Fix TransformSeparator applied to PassThroughTransform
add feda9c9 When compressing a vector as a SequenceVector, preserve the element type.
add f0826f0 Allow NetCDF GridGeometry to query the values of a localisation grid when constructing metadata about axes. Various documentation improvements.
add 0af5160 Allow two GenericName instances to be considered equal even if one of them contains String and the other InternationalString parts.
add e76ba7e Allow to override Feature attribute by an operation, and conversely.
add 41f596f Fix a DateTimeException when formatting the epoch of Julian days.
add de3bb05 Documentation clarification about Proleptic Gregorian calendar versus Proleptic Julian calendar.
add 0be45fe Post-merge cleanup.
add c892c84 Define constants for conversions between seconds, milliseconds and nanoseconds (for clarity), and other minor editions.
add b8dca8e Avoid direct dependencies to ESRI Geometry API. Leave the choice to user between ESRI, JTS and Java2D.
add 7b6439b Fix javadoc typo.
add cd4c52e Add an option for selecting the geometry implementation.
add 68faeb5 Add a FeatureTypeBuilder.addAttribute(GeometryType) method. This required a revisit of FeatureTypeBuilder constructor, by moving the 'template' argument in a separated method.
add 069dfc9 Minor javadoc updates and adujustment in GPX geometry type.
add 3efcfec When parsing a Moving Feature CSV file, build trajectories as geometric objects (Polyline) instead than a double[] array.
add ffe6115 Prepare for the concatenation of some CSV lines in single Moving Feature instances. The concatenation is not yet enabled, but this commit provides the basis for it.
add 38bd641 First draft of a Moving Feature CSV reader that build a Polyline from data splitted on many lines.
add 2df9ec9 Partial support of moving features in NetCDF.
add 6aaad57 Add Model Tie Point Geotiff Tag.
add 6eec8d2 Fix javadoc bug into Geotiff IFD
add 9216edc Preserve in FactoryException the message explaining why the parsing failed.
add 01951b1 Store GeolocationInformation metadata built from the ModelTiePoints found in GeoTIFF file.
add 22bcc05 Complete the calculation of "grid to CRS" translation terms from the model tie point. Use a tolerance factor when determining if the "grid to CRS" transform is linear. Declare in the metadata whether model tie points are present.
add 327c76f Optimisation for linear case was missing the pre-concatenation with 'sourceToGrid' transform.
add cac94d7 Add 'getAttributeNames()' method on NetCDF decoder.
add 84c0bfb Store the GeoTIFF check points in metadata (under some conditions, we need to avoid that if too numerous). Avoid a warning if the GeoTIFF file said that it does not define the prime meridian but nevertheless contains a tag for the prime meridian longitude.
add ed4a45d Remove unnecessary serialVersionUDI.
add 639202c Trivial javadoc fix.
add d80809e Do not store anymore the GeoTIFF localization grid as Ground Control Point (GCP) since they are not GCP. More robust calculation of minimal and maximal values.
add 5918cbd More efficient compression of vectors when requested.
add 9609479 Initial draft of a JNI bindings for Proj.4. The bindings were initially developped in GeoAPI, and updated by Jean-Loup Amiot. The Java classes are adapted from geoapi-proj4 module (was in public domain, adaptation done by original author).
add 46d7bc4 Avoid the use of dlopen for use of libproj.so native file (change by Jean-Loup Amiot). Log a warning if a .so file is not found.
add 93760b8 Identifies some platform-specific issues in the Makefile.
add b00ddd8 Add a convenience method for fetching the default CRS from a PropertyType instead than from a Property.
add f4b93f7 Paranoiac safety against empty or null collection of dependencies.
add 03eb386 More informative formatting of NaN values in features.
add eb02e71 Better handling of Linux and MacOS platforms for native binding.
add d63ba1d Enable PJTest on platforms having a Proj4 library installed.
add fcd8bf3 Merge PJDatum into PJ class.
add 0215b55 Renamed CRSFactory as ReferencingFactory, in anticipation for creating other objects like datum too.
add 9bce2b6 Use the compression provided by Vector instead of duplication the code here.
add fb685d0 Add test for EPSGFactory.
add eb73295 Fix CoordinateOperationNotFoundException thrown for some pairs of CRS when the EPSG geodetic dataset is not available (SIS-364).
add b306db0 Remove the CRS and CoordinateOperation wrapper around Proj.4 library. Instead, provide only a MathTransform wrapper. The CRS and CoordinateOperation parts are better served by the Apache SIS implementation. This allow us to simplify a little bit the "sis-gdal" module.
add 1e3ec10 Remove the pseudo-EPSG factory backed by Proj.4. We do not need this factory since Apache SIS can connect to a real EPSG database. Instead, make clear that this is a Proj.4 factory with their own definitions.
add fa07e24 Defines OperationMethod and parameters for ProjectedCRS.
add 88fe701 Add test case for pj_transform.
add 0efe47a Returns the definition provided by Proj.4 itself if available.
add bdd21a1 Fix erroneous conversion factor between m/s and km/h units.
add e7a2963 Make the check for native PJ structure optional, as documented in javadoc.
add bdbeca4 Make PJ wrapper serializable (by serializing the Proj.4 definition string). Partial implementation of MathTransformFactory and CoordinateOperationFactory. More tests, and consequently fix an erroneous Proj.4 parameter name in LambertConformal2SP.
add 1ad94d4 Add concatenation support for Proj.4 transform.
add fbff42d Provide a plugin mechanism (SpecializedOperationFactory - may be renamed later) for enabling the use Proj.4 when we detect a pair of CRS that are wrappers around Proj.4. Specifies axis units of measurement when creating a Proj.4 definition string from a CRS. Improve documentation.
add 6521630 Add integration test and documentation about use of CRS in "Proj4::" namespace.
add 09caa2f Add binary for MacOS.
add 0b57910 Use only public API for avoiding compatibility problems.
add 637ec73 Fix the Coordinate Reference System name by creating it from the datum name (if available) and the projection code.
add 9aa569a Add JNI bindings for Linux.
add aa116f2 Refactor the feature iterator outside the data store.
add 9dcd175 Fix erroneous filename for temporary file.
add 2a2a5fe Skip the JDK9 -> JDK8 merge.
add b6e01c1 Merge the javadoc cleanup from JDK8 branch.
add e12fbe2 Merge from JDK8 branch.
add 41b1083 Merge from JDK8 branch.
add 945226e Update for API change in jdk.javadoc module. Also remove module-info.java since Maven dependencies are not yet modularized.
add 481d7d9 Resolve or suppress some warnings.
add d9e01c8 Merge the doclet and taglet packages in a single one.
add b388ac0 Automatic update of NetBeans project configuration.
add 83e1876 Allow the project to compile as automatic modules.
add 1ca61db Store merge information in order to ignore the change in other branch that do not apply to JDK8 branch.
add 5508cc9 Remove JavaFX module from JDK8 branch. We will develop this module only on the JDK9 branch for now, because it is easier to setup JavaFX dependencies with Jigsaw modules.
add 35602e8 Update Maven plugin dependencies.
add 896b564 Fix NameToIdentifier.isHeuristicMatchForIdentifier, search result for names wihout separators were always false.
add aa8226a Documentation fixes. In particular, document that Apache SIS requires Java 7 (was Java 6).
add a463eec Skip TransformTest on platforms where GDAL or Proj4 is not installed.
add 14224cf Add documentation and another check for skipping tests on platform without Proj.4.
add 0dd5e02 (sis-raster): add first work of PixelIterator
add 04f123e Fix SVN properties on new files.
add 8970ce4 Update NetBeans project.
add 911cfb7 Fix a documentation.
add cdce5f8 Test consolidations. The tests are not yet enabled.
add adb28ad Move PixelIterator in an "image" package instead than "iterator". An "iterator" name is too generic since most iterators (outside this package) are not specifically for images.
add f251d71 Add a minimal package-info documentation.
add 13907d2 Review of TiledImage, and begining review of PixelIterator.
add b2d3638 Continue partial review of PixelIterator.
add f868e89 Continue PixelIterator cleaning.
add adf1742 Store : add Resource,DataSet API
add bdafec0 Set SVN properties.
add 7ef706a Enable PixelIterator tests on Raster (not yet on RenderedImage).
add dcff542 Enable tests on a single tile of RenderedImages.
add 424a1d7 Enable more tests.
add 654e9e5 Javadoc fixes.
add 82b7e25 Enable all remaining tests on PixelIterator.
add 281bcc2 Add various 'minTileX' and 'minTileY' values in tests.
add c8b1c96 Make FeatureFormat robust to signaling NaN.
add fc7712b First implementation of PixelIterator.window().
add f6940d1 Optimization for the common case where the requested region if fully contained inside the current tile.
add 83478d0 Use java.nio.Buffer for representing the window content. It allow us to use read-only buffer (thus avoiding the need for a warning in javadoc) and make easier to support the 3 transfer types.
add da116f2 Add a javadoc group for coverages and rasters.
add 70ab659 Avoid flooding the logs with messages for the same unsupported NaN value.
add 864398e Remove PixelIteratorFactory for now. We will bring them back from Geotk after we ported the optimized PixelIterator subclasses.
add 78ec4a6 Put WritablePixelIterator in public API.
add fd3eda2 Add factory methods for WritablePixelIterator.
add 8f65197 Deprecated FeatureTypeList since it is not anymore part of ISO 19115 in 2014 revision.
add dcc4f41 Minor code adjustement and add documentation.
add 70c478e Complete javadoc for the Resource subtypes.
add 7da1407 Replace the findResource(String) implementation based on stream by a implementation based on classical loops. The intend is to make the merge with JDK7 branch easier, and to avoid the hack needed for checked exceptions.
add 961c97a Prepare refactoring of FeatureStore as FeatureSet. This commit adds AbstractResource and AbstractFeatureSet classes (not in public API for now) and edits some documentation.
add 6ec6957 Remove FeatureStore, replaced by FeatureSet.
add c67d5ee Keep getFeatureType(String) public for now.
add ee77de8 Add tests for WritablePixelIterator.
add 859c723 Format "+towgs84" parameter in Proj.4 string.
add 05ff999 Post branch-merge cleaning. In particular, PixelIterator.create static methods are remplaced by a Builder for making easier to handle the SequenceType case, which can not yet be on trunk.
add 3489fee Fix construction of geocentric CRS.
add 1d50dfd Upgrade to EPSG geodetic dataset version 9.1.
add 45c3174 Fix a test failure.
add e8b4744 Port a small part of Cullen Rombach's work on ISO 19115-3 upgrade. The main port will happen in the ISO-19115-3 branch, we we port here a small part which is only indirectly related to the upgrade and do not have immediate impact on XML namespaces.
add 94c3361 Add a test for the improvement in Locales class.
add 79aeb9f Replace the XML "xsd" prefix by "xs" at least in documentation. This is a side effect of Cullen Rombach's work on ISO 19115-3 upgrade.
add b06f72d Add a special case for (inverse projection) → (affine) → (projection) transforms. This allows ConcatenatedTransform to optimize such sequence. Also provide a few optimized loops for some common cases.
add 8a94366 Remove some optimization in map projections for which benchmarking has show that it made no measurable difference.
add a0cdbe5 Add RADIANS_PER_SECOND unit and the corresponding AngularVelocity quantity. Add also a Salinity quantity.
add bb9d507 Fix a bug that prevented CoordinateOperationRegistry registry to find an operation in the EPSG geodetic dataset when EPSG defines two versions of the same CRS with different axis order.
add df307db If a CoordinateOperation has not explicit domain of validity, use the intersection of CRS domain of validity.
add de59b09 Enable the user of trigonometric identities for performance.
add fea9f34 More efficient copy if the record is already a DefaultRecord instance.
add 6361f0d Better error message if PJ construction failed for a given definition string.
add cb3e845 Trim leading space in definition string.
add 9f83801 Add comment about future possible development: take locale in account. https://issues.apache.org/jira/browse/SIS-365
add c587aeb Update Proj4 JNI bindings for Linux
add 93a2779 Minor performance improvement by avoiding a call to Math.asin(double).
add 5f50705 Upgrade Maven javadoc plugin to a version compatible with Java 9.
add 261043b Minor javadoc formatting.
add e846bf4 Take Unicode supplementary characters in account when reading from java.io.Reader.
add 0543a19 Make InputStreamAdapter more compliant to InputStream contract.
add 2032a5e Add data store provider opening parameters description
add 8c1471a Add method on DataStore to return it's provider
add 6ab8f8f Replace the sequence of "if (type == some.class)" by lambda expressions. This make the code a little bit more systematic (more uniform flow of operations).
add 3111932 Better tracking of inputs that need to have their position synchronized in StorageConnector.
add d864e40 If 'unmerged' do not throw an exception, assumes that is solved the metadata merge conflict.
add f75e9d1 Change the internal working of StorageConnector in a way that track better the relationships between wrappers (e.g. InputStreamReader as a wrapper around InputStream).
add 2b3ae6b Complete and test StorageConnector capability to recreate java.io.Reader as needed.
add 4d073fc Javadoc update and adjustment in DataStoreProvider.open(ParameterValueGroup), including addition of a specalized exception.
add d5d3165 Downgrade maven-javadoc-plugin from 3.0.0-M1 to 2.10.4 because of a regression in "mvn javadoc:aggregate": the javadoc plugin seems to ignore <repository> declared in sub-modules (in our case, in sis-netcdf).
add d7f905f Partial commit review and javadoc completion.
add 20beac4 FeatureSet : add writing operations add, removeIf and replaceIf
add 7baa06f FeatureSet : fix removeIf and replaceIf methods to match java List interface
add 04cec68 FeatureSet : add missing boolean return value on removeIf method
add 9000e3e Fix SVN properties for new file.
add 530e2f3 More detailled StorateConnector.toString(), for debugging purpose.
add 8d178bc DataStore : review DataStore API, add Resource creation methods on Aggregate
add a85221f Give some more control on the way to merge metadata elements in a collection.
add 0513553 Javadoc and minor refactoring in Store.getEnvelope() and getOpenParameters() method.
add ac5933f Bring back an empty JavaFX module on JDK8.
add 59d7f1a Refactor the new getOpenParameters() in a URIDataStore common class.
add 177a46d Add JavaFX in NetBeans project configuration.
add 88016e5 Add a test directory for JavaFX module.
add 505802d Storage : new FolderStore capable of aggregating multiple smaller file stores
add e818d69 Try harder to add a title or an identifier to metadata indentification information, using the filename (without extension) if we have nothing else.
add 2a52730 JavaFX : new ResourceTree widget
add d32bf53 Set the author name of JavaFX module to the effective developer (list to be completed when other contributions will be merged) and set SVN properties.
add 7a21c56 Allows to configure the library to use for geometric objects.
add 6770000 JavaFx : new CRSChooser widget
add ad80464 Set SVN properties.
add 8524ab6 Update NetBeans project configuration for JavaFX resources.
add b379fea Avoid the reflection hack in AbstractResource. Make netCDF FeatureSet accessible from public API.
add 9e9c4fa Naming convention: "netCDF" is lower-case "n", except at the beginning of sentence.
add 5ee5935 Fix attribute characteristic formatting (was missing the actual values).
add e7996dc Fix wrong parameters in Proj.4 definition string construction.
add 117d32e Allow foreigner code to find Apache SIS CRSAuthorityFactory without any implementation-dependent code.
add f9135a7 Support enumeration in netCDF file. As a side effect, set default attribute encoding to UTF-8.
add aaa2f4f Update FolderStore in order to take in account symbolic links, warn about possible cyclic links, propagate encoding information (locale, timezone, charset), handle the location as Path instead of URI, more extended exception handling. We omit the sort for now since it forces loading all resources before we can sort (something that we may want to avoid in the future), and we omit declaration in META-INF since it would handle any folder, even if more specialized DataStore exists.
add 6fa0b51 Fix name spelling error: Synder -> Snyder.
add 779a552 First draft of a capability to rewind a DataStore for text file, in order to read the file more than once.
add 5e37406 Add tests submitted by Michael Hausegger on https://github.com/apache/sis/pull/2 Tests have been refactored. As a side-effect, we did minor adjustments in Envelope.getMinimum/getMaximum() and FeatureTypeBuilder.setSuperTypes(…).
add c6581a7 Minor code cleaning submitted by Michael Hausegger on https://github.com/apache/sis/pull/3
add bf66f17 Minor grammatical correction: "software" has no plural form.
add 740552a Update mailing list URL and minor typo.
add 24773ed Move some code out of sis-utility module. The intend is to have a smaller JAR file for those who want only units of measurement support. In this commit the size change is very small, but we reduce XML dependency in order to move XML support to sis-metadata in a future commit.
add dcdbd7f Move JAXB adapters for GenericName in a separated package. This is a step toward moving most of XML support in sis-metadata module.
add aaab7ed Javadoc and method ordering.
add e5f8d4e Avoid invoking user-overrideable DefaultFeatureType.getProperties(boolean) during construction.
add 8f78c8c Partial rollback of GO_GenericName and GO_LocalName displacement (for now). This is because we would like to propose a 0.8 release soon, and trying to move the XML support from 'sis-utility' to 'sis-metadata' now seems a bit risky. It would also make more difficult to merge the work on ISO 19115-1:2014 update. So we are better to release O.8 as-is, complete the ISO 19115 update, and after try again the migration of some sis-utility classes to sis-metadata.
add 57d0bed Fix a NullPointerException when a netCDF variable has no attribute.
add 0faaa4c Upgrade dependencies.
add d3e87e1 Remove obsolete comment since we do not support JDK6 anymore.
add 033a200 Change needed for the support of a "non-free:sis-embedded-data" module with EPSG geodetic dataset as an embedded Derby database (SIS-337).
add 9f7c1d2 If the 'non-free:sis-embedded-data' module is present, connect to the embedded Derby database.
add 6b678ca Use the embedded database if SpatialMetadata database does not exist.
add 7a8122e Avoid usage of deprecated Maven API, and get the resource to include in PACK200 from Maven itself instead than from "target/binaries" directory.
add 223bb87 Create automatically the distribution file when "apache-release" profile is activated.
add fa71177 Store native libraries in a "linux", "darwin" or "windows" sub-directory at the same level than the SIS JAR file.
add a1aa04b Do not allow creation of CompoundCRS made of horizontal CRS + vertical height. https://issues.apache.org/jira/browse/SIS-303
add b6100d3 Partial support of three-dimensional ProjectedCRS. This is actually an extension of existing support for three-dimensional GeographicCRS.
add d2daa61 Complete support of three-dimensional projected CRS.
add 00a6acf Fix erroneous CRS names.
add 2033a59 Add a CRS.compound(CoordinateReferenceSystem...) convenience method. This task implied adding other methods for computing domain of validity intersection.
add 09b130e More support of three-dimensional projected CRS, by improving the decomposition in components.
add 71ad516 Partial implementation of compound CRS in URN. For now only the URN parser has been adapted (not yet the CRS factory).
add 57b9766 Parse CompoundCRS also in HTTP URL in addition of URN.
add 244345f Simplify a little bit DefinitionURI by moving the 'format(…)' code to the only place where it was used.
add c30f3e5 Complete implementation combined URI for multi-dimensional CRS. https://issues.apache.org/jira/browse/SIS-341
add efdb556 IdentifiedObjects.lookupURN(…) should be able to create combined URI.
add aac5cbf Tests consolidation and addition of javadoc about combined URIs.
add e8cfd21 Add support for netCDF "geospatial_bounds" attribute parsing.
add e79402b Add support for NetCDF "creator_type", "publisher_type" and "program" attributes.
add 820711ee DataStore : add FeatureSet Query API
add 8db259b When a coordinate operation change the longitude axis range from [-180 … +180]° to [0 … 360]°, the Envelopes.transform(…) result should be normalized accordingly.
add 3b7967f Javadoc.
add 54f77d5 Alexis Manin's patch: add IntStream support to IntegerList. https://issues.apache.org/jira/browse/SIS-367
add cdd9953 Override IntegerList.spliterator() and iterator() method with specialized types.
add d1ac802 Implement IntegerList.PrimitiveSpliterator.trySplit() for parallelization.
add 1ce3ff5 Keep trace of methods having a system-wide effect.
add 9648008 Rearrange identifier, standard name and keywords as (word, vocabulary) pairs. Set program as such (word, vocabulary) tupple and add instrument and platform.
add 3840403 Add support for netCDF "metadata_linkage" and "coverage_content_type" attributes. This complete https://issues.apache.org/jira/browse/SIS-171 for now.
add e434ae0 Minor javadoc adjustments.
add 4e5a733 Bug fix the [0 … 360]° when a source or target CRS is of kind CompoundCRS.
add 7486177 Fix change of longitude range when there is also a change of ellipsoid.
add d98c953 Rename IntegerList.ints() and AttributeNames.Keyword.
add 671470b Javadoc.
add f5c35cb Add (for performance reason) a specialization for Molodensky transform in the particular case where the transform is two-dimensional, abridged and without translation terms. This is a first step before a bug fix about ellipsoid change when there is no Bursa-Wolf parameters.
add 106b3fa Bug fix when computing intersection between an ordinary envelope and an envelope having [0 … -0]° longitude range.
add 989e6d5 Fix an "ellipsoid change" operation which was wrongly set to identity. We use abridged Molodensky instead for now, even if all translation terms are zero.
add f50d4cd When detecting if we have a "wraparound change", do not require the source axis to be "wraparound" too. Example: conversion of dates on temporal axis (infinite span toward past and future) to a month in a cyclic 12-months average temperature.
add 2f2740e Notes about futur work that still need to be done after 0.8 release.
add 12ef76f Fix javadoc warnings.
add 50fd3c8 Set the EPSG geodetic dataset URL to its expected location after release.
add 00ec708 Set version number of next release.
add 6dbde0b Update README for next release.
add 512e854 Allow configuration of the way represent moving features.
add 3e037d0 Spelling error in exception message.
add 0345f47 Javadoc formatting.
add 60dee99 Adjust tolerance threshold when SIS is tested without EPSG geodetic dataset.
add 97e5ae3 Fix the comment about test accuracy.
add c5841db Try to be more informative in some logging messages related to SIS_DATA environment variable.
add 07129c9 Remove some deprecated methods on 1.0 development branch. Those methods will still on the 0.8 branch.
add 5eb7300 Do not log a scary stack trace when the SIS_DATA environment variable is set but the EPSG SQL script are not available. Instead, log a more consolidated message (less repetition).
add 722a4f0 When formatting an EPSG operation, include only the EPSG parameters. The intend is to omit the OGC parameters that are redundant with EPSG ones, or which can be inferred from the context.
add fe85551 Tune loggings appareance.
add da6f7f6 Add usage example.
add 8d2271e Fix a failure when running extensive tests.
add 8dfe110 Documentation clarification and expand the list of known SIS types.
add 04a9188 Code formatting.
add fa281f7 PropertyTypeBuilder setter methods should return PropertyTypeBuilder for method invocation chaining.
add 26831b2 Add functions for CRS scope and domain of validity.
add dd8d8db Add description and license information as .txt files.
add fe62f18 Update NOTICE and README files.
add 1db35a6 Let the sis-build-helper plugin version set to ${project.version}.
add 15a4be7 Update links to UCAR netCDF library.
add 3e57308 Add a note about geohash versus MGRS.
add df58f42 Module to be enabled during releases only (for now).
add 1a33cb8 Use a property for the non-free resources (to be included only if the "non-free" profile is enabled).
add ec6c6b6 Add keywords to highlight in the developer guide.
add 62c12ec Documentation updates, including the tools to generate the developer guide.
add 76e91e4 Wrap the "In this chapter" text in a <p> element, for easier CSS styling.
add ae430b3 Initial commit of SIS-375 work by Alexis Manin.
add dfb9e7d Complete https://issues.apache.org/jira/browse/SIS-375 As a side effect, Cache is now declared as a ConcurrentMap.
add b923b61 Change method order for having the most frequently used first. There is no code change in this commit, only displacements.
add e657484 Add documentation and the missing 'computeIfPresent' method.
add 3f70876 Tuning in the application of style for <code> elements.
add ff40618 Set version number to next release.
add befb6f2 Remove "Branch-dependent" import sections that were related to JDK7.
add c98b072 Modification in the extrapolation method of LinearInterpolator1D: keep the same slope than the extremum where extrapolation occurs.
add 06d81e4 Spelling fix: "intend" -> "intent" when used as a noun.
add dc662a1 Give protected access to a constructor for allowing usage from different package. Actually used (for now) in Geotk rather than SIS. Note that it is internal API.
add a9fb472 Typo : fix copy/paste documentation error in SensorType
add eab5ef8 DataStore : add Capability API on Resources
add 5a76487 fix checkstyle error, missing final
add 40998f4 Fix SVN properties.
add ef85d22 Temporarily relax some tests because of changs in GeoAPI 4.0-SNAPSHOT. They are corrections in the upgrade to ISO 19115:2014. Those corrections are reflected in the SIS ISO_19115-3 branch, to be merged later.
add 8da76cd Upgrade Maven plugins.
add 5dfdd68 DataStore : add FeatureSet.updateType and FileSystemResource
add a047663 Storage : split Aggregate/FeatureSet in read/write interfaces, add FileSystemResource and Transaction
add 1edcc29 Storage : improve folder store to support add and remove operations if a specific provider is given
add 68d2b11 Fix SVN properties.
add a0f005d Fix checkstyle violation.
add d076946 DataStore : add method to find compatible datastore providers for a given input
add 7e518f1 Javadoc : fix absolute javadoc links
add 668c59e DataStore : add FileSystemProvider interface to declare format suffix,signature and factorize probContent implementations
add 6445991 DataStore : improve findResource DataStore method to handle namespace and not only the code
add a1d402d Fix SVN property.
add de09d9d Javadoc on org.apache.sis.storage.Resource and subtypes.
add 0862f6c Fix wrong column name in the SQL query for ordering the ellipsoids.
add 38b8fcb Partial revision of FileStoreProvider changes.
add 8087648 DataStore : fix ByteBufer not restored to original state by FileSystemProvider
add 8d9b356 Move the Store.Writable internal class as a separated class: WritableStore. Be more conservative before to delete files, e.g. delete only if direct children of the directory managed by the store. Avoid calls to components().contains(resources); check file existence instead. Take StandardOpenOption in account when creating a folder store. Replace strings by localized resources in exception messages. Move some code in a StoreUtilities class so it can be shared. Move some c [...]
add b041b1c Naming : rename FileSystemResource, remove default writable resource method implementations
add 4423e46 Add a ParameterDescriptor for "create" parameter.
add 0e16f6c Review tests.
add 3bda62b Documentation and minor cleanup (import order, etc.).
add 55bd21b Replace DataStore.identifierMatches(…) by an improvement of Citations.identifierMatches(…). FolderStore shoud verify if the directory is writable. Remove unused methods.
add 9e04cd1 Remove the Capability code list, replaced by interface hierarchy (WritableAggregate, WritableFeatureSet).
add 28b311d Replaced URIDataStore.Provider.getSuffix() by an annotation to be put on DataStoreProvider implementations.
add 2519516 Fix a version number.
add acb7a91 Create a branch for merging work from Alexander Montgomery and Cullen Rombach on ISO 19115-3 update (XML for metadata).
add bf00f67 Merge from JDK8 branch.
add 40eb440 Merge the part of Cullen Rombach's work that consist in adding new Namespaces constants.
add e90b5c1 Merge from JDK8 branch.
add 57953dd Declare constants and internal methods for support of ISO 19115-3 metadata version. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 98cda97 Initial port of the mapping from ISO 19139 namespaces to ISO 19115-3 namespaces. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 0805dab Upgrade JAXB internal objects (Measure, Language, Country, etc.) to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 39d6b13 Partial upgrade of code list to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 61dc172 Upgrade metadata internal classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 4945a38 Adjustment in the switch between ISO 19139 and ISO 19115-3 marshalling.
add 87533d3 Replace Context.isLegacyMetadata() by FilterByVersion.LEGACY_METADATA.accept().
add b27b59a Upgrade some DefaultMetadata methods to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add a043b0f Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 5a92405 Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add d434fbd Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 835bc45 Upgrade JAXB bindings of some more classes to ISO 19115-3. This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add f66ddf1 Add a partial test case (not yet fully enabled). This is part of commit e780d66b4d7d59368e742ba01777a151d8827ea8 from Image Matter.
add 71fe402 git-svn-id: https://svn.apache.org/repos/asf/sis/branches/ISO-19115-3@1819746 13f79535-47bb-0310-9956-ffa450edef68
add 2582c05 More uniform pattern in the adapters (namespace in @XmlType, public constructors for JAXB).
add d2772db Documentation update: replace some "ISO 19139" by "ISO 19139:2007", "ISO 19115:2003" or "ISO 19115-3" depending on the context. There is no code change in this commit.
add eb86d21 Commit 37d396b022ce10ab743bbb875019a65302672861 from Image Matter (update classes in distribution package for ISO 19115-3 compatibility)
add 7e2bb12 Commit d06b69194a9e3a35062212c1a4530f84088c9cad from Image Matter (update XMLTestCase class)
add cc4b6a3 Commit efc8e8121710508654a842d1a7c9496ee94d7952 from Image Matter (fix a few tests, fix codelist and metadata base paths when working with ISO 19139)
add e0b4b6f Fix the replacement of namespaces when marshalling legacy ISO 19139:2007.
add be71c11 Skip commit 669c595ef233dafe676da71bc7b184093d463a6b (this commit was setting the default format to legacy ISO 19139, while we want newer ISO 19115-3). Instead, fix a few test cases.
add 8b9553f Adaptation of commit dac622016fb6a480a4c39a9ff39c4e71916c1322 from Image Matter (fix a few more issues with tests)
add 0484a87 Adaptation of commit e25bb7fa27fd4305d2fdb82828fbdb2edaae5018 from Image Matter (add very simple test case for ISO 19115-3 CI_Citation)
add 4510f64 Adaptation of commit 554ca46345bb3b80506ef881604ad37a27a1bdfd from Image Matter (minor changes to DefaultCitationTest)
add eaef5ec Adaptation of commit 581e9dc8f5d7540d346d207562cba6c17fb20ed5 from Image Matter (update some classes in lineage package to support 19115-3)
add 6e8e422 Adaptation of commit 969adb4a3949575c8913b4607c40d5f1601b9375 from Image Matter (more Lineage upgrade; add Cullen to contributor list)
add 0e9a1e1 Adaptation of commit 0f574678f26d320e619831b29086e0167f7ffec5 from Image Matter (update classes in lineage package)
add 15f3fe1 Skip commits 9684e4808fa6e0ea5275f6a9e025e71a8eb43c6d, 1ae0aa336bb614168d61e84afda78e8ce8dcad92 and 55c11421a4f6da5a5e07a4be0b481c0cd82dcf94. Adaptation of commit 39baf8a2bda6e761b264032fa1fd9dec2d72f9ab from Image Matter (fix some bugs with DefaultResponsibility and DefaultResponsibleParty. Also add the rest of the elements in DefaultMetadata)
add ec16fe3 Adaptation of commit 97b73cd1d048120ed11b22cda824fbf01cbd4608 from Image Matter (fix some minor bugs, add documentation to root folder)
add 504be03 kip (for now) commit b9138ba4701603d111a1ad5a45cefe49bddc0e00, be4322b6daa394a9b72f797002f8a32be4d07afc and 1c6335db0835583a53268e72152a0e0f1cab4231 Adaptation of commit 7ab66791cf9d495e8627a82fe7f57edbca51baa7 from Image Matter (minor fixes in maintenance and quality packages)
add 6740d3f Adaptation of commit 7bc46154dfe9f5b51a0d530c0054ecf9e93faf57 from Image Matter (update some classes in spatial package)
add a94312a Adaptation of commit f0ca202ef911462fbe514e1310050f95e81fdd83 from Image Matter (update DefaultApplicationSchemaInformation and DefaultExtendedElementInformation)
add 7b6e68b Adaptation of commit f03b113f2e90a12e19697f7a51256cd9604dfaaa from Image Matter. The change from GMI to MDS namespace has been skipped; we keep GMI namespace, pending ISO 19115-4.
add 83827bc Skip commit e212fa862cd16c969cb2cd3c726a81ed8fef725d (XSLT experiment) Adaptation of commit 3d3bb1b0e47fcd6b4985943a4f33e307dcc59ab6 from Image Matter (got the first ISO 19115-3 round trip test working). We omit the ISOTestUtils class - instead we define the expected XML directly in the test.
add 95361a9 Adaptation of part of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata). We use a different strategy: convert the test case to ISO 19115-3, and perform automatic prefix and namespace replacements for testing legacy ISO 19139:2007. We test on DefaultBrowseGraphic at first, before to expand this approach to other classes. All XML fragments modified in this commit have been [...]
add fc2a87d Adaptation of part of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata).
add 3489eed Fix wrong namespace for a few code lists.
add 2e5d64f Do not handle anymore changes of attribute name and values in FilteredStreamResolver. We will try to handle those changes in methods invoked by JAXB instead.
add 4ca098e Upgrade PT_Locale and Debug PT_LocaleTest.
add 8d13e20 Complete adaptation of commit 3a5a78b520f7d1827acc6bee6c42eb91a497e6f4 from Image Matter (included tests for ISO 19115-3 in roughly 2/3 of the test classes for ISO metadata).
add f3812df Adaptation of commit 39e5464004f8531b707e273570aa841c9074ef2e from Image Matter (complete first pass on tests for ISO 19115-3).
add bd1cafa Adaptation of commit 8752a2098d01e36eb375241208b35cbfdeae5227 from Image Matter (Fixed a number of bugs in the sis-metadata tests, but they are still not perfect).
add 9a03963 Adaptation of commit 4617aca4d15875f7403c4677c132d3cbc3eac29b from Image Matter (Update a few test classes in sis-utility).
add d918240 Adaptation of commit 5b6d24d241a809993a09f8c5f9f5e0da14068844 from Image Matter (Refactored FilteredStreamReader). DefaultServiceIdentificationTest on legacy XML fail because of the way <gco:MemberName> and <gco:ScopedName> were marshalled (they were inserted directly in the XML document, without <srv:scopedName> wrapper contrarily to what ISO 19139 usually does.) The new ISO 19115-3:2016 schema is more consistent, but compatibility with legacy ISO 19139:2007 schema is u [...]
add c5d4d55 Remove a package which is no longer needed since upgrade to ISO 19115-3:2016.
add ed0a06d Skip commit 783b71a96171f163f9da1088e11926bc9720101c (Fix bug with PT_FreeText not properly marshalling) since it has been implemented by a different approach in previous commits. A large part of skipped commit is about replacing the namespace in "xsi:type" attribute. We skip that part for now, since we may revisit the way we apply on-the-fly XML transformations (using XMLEventReader instead of XMLStreamReader).
add 50821f9 Skip commit 8388392013a65b73231ee8f05a0fe43d89c48b4d (add developer credit in .pom files) because it was already done in commits 8cc5640e8bd6b353de1a7afda0f2e2281cd68b53 and 82b9d2ea025647a26df33c2c0feced75928e0317.
add fc7b52e Skip commit 6cb8eb04dcdea0ff03a7067bec6ca3cf57c1b913 (Added more convenience methods for marshalling to XML.java) The number of convenience methods that could be added is endless; a line has to be drawn somewhere. The XML.marshal(Object object, Result output, Map<String,?> properties) is there as a fallback for cases not handled by other convenience methods.
add 47fa1e5 Review the version constants to be kept. Update documentation related to metadata versions.
add 79e7e2a Remove unused JAXB adapter.
add 1ff2705 Use pre-defined Version constants.
add 31be0e3 First draft of a class for verifying @XmlElement annotations against OGC/ISO schemas. Current version loads the XSD files but does not yet perform the actual verification.
add 0e00931 Fix errors in @XmlRootElement identified by SchemaVerifier. Remove the deprecated DefaultFeatureTypeList class since its XML form is not defined.
add 35bad00 Fix a few namespaces with the help of SchemaVerifier.
add 866610a Fix more namespace URLs with SchemaVerifier help.
add 340bf10 Apply namespace fixes to code lists.
add ca9a552 Moved SchemaVerifier in its own package. Keep package-info data in an internal class.
add 37cd94e Add some missing namespaces and fix some property names identified by SchemaCompliance.
add 84e025c Fix more JAXB annotations following SchemaCompliance verification.
add 89ae738 Fix more JAXB annotations.
add 6272dfd Last namespace fixes for metadata and code list adapters. The case of data quality package is not yet resolved; see https://issues.apache.org/jira/browse/SIS-394
add 9348118 Move PackageVerifier in a separated class and move AnnotationsTestCase to the org.apache.sis.test.xml package.
add 74065f2 Fix 'required' flag in JAXB annotations.
add 5209e0d Fixed some @XmlNs annotations and first draft of value type verification. Note that JUnit tests still don't pass; this will be fixed before merge.
add 006f507 Move XSD URLs directly in the @XmlSchema annotation. Since each of those URL is used at only one place, there is no big advantage to declare them as constants. JUnit tests at this revision are known to fail; they will be fixed before merge.
add e4c2f81 For code list adapters, move namespace declaration in the @XmlElement instead than @XmlType. This is a little bit more accurate since we have no good name for those @XmlType, and this clarification make annotation verification a little bit easier.
add 3a2b31a Remove GO_Decimal32 (because unused by SIS), avoid uncertain @XmlType annotations, and Javadoc fixes.
add 1fee058 Regenerate NamespaceContent.txt after we verified JAXB annotations against XSD files.
add e124c2b Set the version number to 1.0 for all metadata implementations impacted by the namespace change.
add 5ff16a2 Remove unused @XmlJavaTypeAdapter and add a few missing ones. This cleanup work was done with the help of PackageVerifier.
add 45e1093 More consistent order for @XmlJavaTypeAdapter declarations.
add bf63d27 Replace the use of XMLStreamWriter by XMLEventWriter when writing legacy ISO 19139 metadata. The intent is to make easier to handle renaming of metadata element or their displacement.
add 48785af Minor clarifications in test documentation. Starting from this commit, sis-utility module is back in buildable state with tests enabled. There is know test failures in sis-metadata to be fixed in next commits.
add 3121acc Fix property order in tests and remove some private methods for JAXB defined only for element ordering. Change in element order will be managed by FilteredWriter instead. This commit fixes some sis-metadata tests, but not all.
add fb527c2 Improve AnnotationConsistencyCheck and fix some JAXB annotations as a result of those verifications. Some GeoAPI annotations have also been fixed as a result of this work and those fixes are required by SIS: https://github.com/opengeospatial/geoapi/commit/af650d33c567d6d11420d7ba16822fb4f67f5b08 Tests in sis-metadata and downstream modules have not yet been fully fixed.
add ed33e79 Fix more sis-metadata tests (not yet all of them).
add 4b83ff4 Rename some private fields and methods with less confusing names.
add 092f776 Restore @XmlType on GO_CharacterSequence subclasses; they are required for proper working of "xsi:type" attribute. Update some related documentation.
add 935347d Better mapping from namespace URI to XML prefix.
add 2695253 Use a different strategy for parsing legacy <gmd:URL> element. Our previous attempt using 'LegacyURL' class did not worked. This failure were unoticed because of insuffisient test coverage in DefaultCitationTest. This new approach handles <gmd:URL> in GO_CharacterString instead (like what we already do for <gcx:FileName>).
add 4fc1b0e Document better the method doing prefix <-> namespace mapping, and disallow the ambigous one (in our context).
add 30f6e08 Prepare for handling of QName localPart renaming during (un)marshalling. As part of this work, FilteredStreamReader and FilteredStreamResolver have been merged in a single class, FilteredReader.
add 0ad1874 Clarification of FilteredNamespaces role. First test on property renaming.
add c77b46e Replace the use of XMLStreamReader by XMLEventReader.
add e1c1146 More stable mapping of namespace URIs to prefixes.
add cb44ba7 Bug fix in the tracking of QNames in 'FilteredReader.outerElements' (was using wrong namespace).
add 0ab51f6 Fix unmarshalling of ServiceIdentification. Marshalling still needs to be fixed.
add f32e264 Allow re-ordering of elements at marshalling time. This allow DefaultServiceIdentificationTest to pass.
add 9e8fc49 Fix the namespace and element name of MI_PolarizationOrientationCode. The difficulty in this case is that the CodeList name changed. See https://issues.apache.org/jira/browse/SIS-398
add 6a3d086 Declare some XML properties that have different names in legacy ISO 19139:2007 and ISO 19115-3:2016.
add 7224cff Add a renaming rule for a property that was mispelled in legacy ISO 19115-2:2009.
add 67d80a8 Add a list of ISO 19115-2:2009 properties. This will be needed for tracking which property to put in "gmi" namespace when marshalling legacy ISO 19139:2007 documents.
add 830acaa Simplify the list of ISO 19115-2:2009 extensions by omitting properties when the whole class is an extension.
add 7dada26 Minor refactoring and documentation fixes.
add 3a24d18 Use one-space large indentation instead of two spaces in NamespaceContext.txt. This saves about 2 kb in file size. Restore the list of properties in all ImageryExtensions.txt types and declare the namespace, in order to have the same format than for NamespaceContent.txt. The intent is to share the same code for loading those two files.
add af3c985 Changed file extension from ".txt" to ".lst" for NamespaceContent and ImageryExtensions.
add a13196e Rename FilteredXML and related classes as Transformer, for closer analogy with javax.xml.transform.Transformer (for XSLT).
add d35357c Moved documentation from TransformingNamespaces to Transformer.
add 1a58858 Move the code loading "NamespaceContent.lst" file to the Transformer parent class, for allowing sharing with TransformingWriter.
add 458aeea Modify the algorithm for element renaming. The new algorithm avoid the need to maintain a map of class where a property may appear.
add 8e45753 More simplification of the algorithm for renaming XML element. Move the 'convert(QName)' method to the Transformer parent class.
add f109d60 Replace the hard-coded renaming rules in TransformVersion by the use of of "ImageryExtensions.lst" file (which will need to be renamed).
add cf48fe6 Rename the files containing the name replacements to apply at reading or writing time.
add 027570e Change the format of ImportNames so that the behavior of the "<type>" pseudo-property is the default. Add missing information in those files for allowing DefaultLineageTest to pass.
add 8e08140 Fix typo: "xlmns" -> "xmlns".
add 8470f20 Fix ProcessStep test.
add ddcf6ae Fix PositionalAccuracyTest. This require a partial implementation of xsi:type attribute renaming. This fix is incomplete - see https://issues.apache.org/jira/browse/SIS-399
add 33e97ab Fix DefaultVerticalDatumTest by using automatically ISO 19139:2007 metadata when marshalling GML 3.2. This is an incomplete hack - see https://issues.apache.org/jira/browse/SIS-401
add bdf54ed Fix org.apache.sis.test.integration.MetadataTest. This fix is incomplete - see https://issues.apache.org/jira/browse/SIS-402
add 9c26f1d Fix a corner case in the reordering of elements (MD_DataIdentification.extent to be inserted between environmentalDescription and supplementalInformation).
add 36b4056 Temporarily disable tests that require https://issues.apache.org/jira/browse/SIS-402 fix.
add 5545de2 Update NetCDF test case for new ordering of metadata elements.
add c416789 Fix the creation of an XMLEventReader form a XMLStreamReader. This is required for GPX tests.
add 8158a57 Fix Landsat test for new metadata element order.
add 738dad8 Fix or disable French profiles tests. See https://issues.apache.org/jira/browse/SIS-404. With this commit, all non-ignored tests now pass.
add 24090f8 Renamed MetadataConsistencyCheck as PropertyConsistencyCheck.
add 4482fcb Rename "[Import|Export]Names.lst" as "RenameOn[Import|Export].lst".
add 837b619 Renamed ISO 19139:2007 "gco" prefix as "gcol" with "l" as "legacy". We don't use "gco1" because new ISO 19115-3:2016 "gco" prefix is associated to http://standards.iso.org/iso/19115/-3/gco/1.0
add 7f96fc5 Remove FilteredByVersion.enable(). Not needed anymore since metadata implementation avoid invoking FilterByVersion in public non-deprecated methods.
add 65cb625 Rename NamespaceContent as RenameListGenerator.
add f514ce0 Merge from ISO 19115-3 branch.
add 78bd37a Post-merge cleanup.
add 5f53103 Remove a logging message that does not appear to be useful in practice (about JAXB attempting to add a null element in a collection). Avoid direct dependencies of CheckedArrayList to Context, in prevision of moving XML-related classes to sis-metadata in a future commit.
add 04c5441 Move XML support from sis-utility module to sis-metadata. https://issues.apache.org/jira/browse/SIS-406
add ba6190b Fix wrong namespace (in particular the "gco" URL).
add 9121e55 Regroup the code related to the "lan" namespace into the lan sub-package, except MD_CharacterSetCode which needs to stay with other code lists.
add 2a22f1b Declare test dependency.
add d7a52c9 Add missing package-info to new package.
add 9f4a74e Merge NameAdapter, GO_GenericName and GO_LocalName in a single class, as they were no need to specialize.
add d245313 Move StreamWriterDelegate since it is not longer needed by sis-utility.
add 2cb5cd9 Renamed gmx package as gcx.
add 2f18d6a Avoid OutOfMemoryException when tie points in a GeoTIFF images are not distributed on a regular grid. https://issues.apache.org/jira/browse/SIS-407
add 6418875 Avoid OutOfMemoryException when tie points in a GeoTIFF images are not distributed on a regular grid. https://issues.apache.org/jira/browse/SIS-407
add 1899068 Add a Formatter.append(double[][]) method for geometry coordinates, together with calculation of a default number of fraction digits and support for number alignment (for more readable WKT). This can be used as a basis for more extensive geometry WKT support in the future.
add 4799c94 Implement the inverse of SpecializableTransform (needed for quasi-regular localisation grids).
add 0b50130 Make AbstractMathTransform.Inverse inner class static for more serialization stability and avoiding redundant fields. https://issues.apache.org/jira/browse/SIS-410
add fab4f3d Addition of SpecializationTransform2D and public API for making those transforms accessible. This complete https://issues.apache.org/jira/browse/SIS-408
add 247322f Enable the use of Sentinel 1 localization grids in GeoTIFF reader. https://issues.apache.org/jira/browse/SIS-407
add 4973865 Resource : prepare listener API for Resources
add 6bbda15 Move the listener and event class to an 'event' sub-package and develop Javadoc.
add 5601d1e Upgrade dependencies and Maven plugins. Remove findbugs configuration since it has never been used.
add 5e21f4f Minor post-merge cleanup.
add 5e13790 Avoid nested SpecializableTransform.
add 7f14b4f Update in NetBeans project configuration for NetBeans 9-beta.
add 98ccc9e Portrayal : new maven module for symbology and mapping
add 86974d5 Minor typo fixes.
add 0f32d6e Set SVN properties on pom.xml file and update NetBeans build-impl.xml file.
add 9b3af5b Minor formatting, svn properties settings and NetBeans project configuration.
add ee18bdc Remove Eclipse project configuration since it has not been maintained for years.
add cab7f11 Map : add a first version of map context and layers classes
add 3d2bc44 CheckStyle : remove trailing spaces in portrayal module
add 159378e Fix SVN properties and minor typos.
add 354f27e Fix dependency versions in NetBeans project (shall be the same than in Maven pom.xml), and upgrade Maven dependency in build-helper.
add 30a03c8 Fix some test failures when executed with JDK9. Patch by Alexis Manin: https://issues.apache.org/jira/browse/SIS-392
add d0e04cb Resource : uncomment and implement resource listeners methods
add c708a32 Javadoc on new portrayal classes.
add dfdd364 Javadoc on add/remove listener methods.
add b756c77 Allow CoordinateOperationFinder to return a list of CoordinateOperation instead than a singleton (SIS-412).
add 2d9ad99 Add public API for CRS.findOperations(sourceCRS, targetCRS) - see SIS-412.
add 2453acb Add Oblique Mercator projection (EPSG:9812, EPSG:9815). https://issues.apache.org/jira/browse/SIS-221
add 0698c4f Register ObliqueMercator in META-INF. Add or fix GeoTIFF keys for ObliqueMercator. Fix the way Parameters.getValue(…) handles optional parameters with units of measurement.
add 9f2e9b2 Replace links to http://www.remotesensing.org/geotiff/ by links to http://geotiff.maptools.org/. https://issues.apache.org/jira/browse/SIS-415
add 02bbee1 SQL : start maven module for JDBC store implementations
add d16c271 SQL : add base classes of jdbc store
add d4e5698 Fix a test failure with Proj4 binding (missing Proj4 identifier on projection parameter).
add a8cd48a Fix SVN properties.
add 0d4c52f Replace the use of Java2D by SIS matrix.
add 550d062 The γc=0 case do not happen in practice. If it still happen, the generic case is sufficient.
add 666ff39 SQL : add database metamodel classes
add 9e12c0a Set SVN properties.
add 7ea91d4 SQL : first version of database reverse engineering logic
add 7d8c854 Fix SVN properties.
add 43593c0 Set dummy values in the metadata tests. Actually this complete the modifications accidentally committed earlier today.
add 1a0881a SQL : add SQLQuery, prepare query feature set, start postgres implementation
add 4183a5b Fix SVN properties.
add 3d4ef26 Regroup XML test files in same directories, one directory per XML schema version.
add 4daaa8b Initial commit of metadata XML files produced by MarshallingTest, for anti-regression tests later. Those files are known to not be conformant to ISO schemas yet. They will need to be fixed later.
add 655f516 Add a warning about the fact that those test files are not yet ISO compliant.
add d0e9145 Remove OSGi configuration since it will be replaced by Jigsaw.
add 432a651 Clarification: warning occurs when there is no *local* registry for a given version (but a registry could exist online).
add fbc8af8 Fix a module name.
add dc49354 Allow MIME type detection on XML file without namespace.
add 19d5b5e Now that the Java Topology Suite (JTS) is available under Eclipse Distribution License 1.0 (a BSD-style license), replace Java reflection by direct call to JTS methods. The JTS library stay optional, as well as the ESRI library. Apache SIS fallbacks on Java2D if neither JTS or ESRI library is available on the classpath.
add 137aaa0 Complete the geometry factory backed by JTS and add tests.
add 0b94fd1 Add missing XSD URL for schema validation.
add 96e4730 Fix the way ExtendedElementInformation.maximumOccurrence and cit:Date are marshalled. Add a few nilReason for missing properties in the metadata test file.
add 1caf6ec Replace the namespace in "xsi:type" attribute value and automatically add a local "xmlns:lan" attribute if needed. https://issues.apache.org/jira/browse/SIS-399
add 71db4b1 Clarification in documentation.
add 4ca99c5 Work on SQL store: reduce the visibility of classes. Avoid reference to internal types from public API. Edit javadoc, add some @todo items.
add 06efa7b Renamed "toString(StringBuilder)" private method as "appendStringTo(…)" as proposed on https://github.com/apache/sis/pull/7
add 47b8ea8 Fix wrong east/west value order in test file.
add 991402b DataStore : add in memory feature set and simple query implementations
add 30f854e Set SVN properties on new files.
add 508cb31 Query : support simple query columns
add 6c61b1f Fix SVN properties.
add a8b167f FeatureSet : add JoinFeatureSet implementation, similar to SQL Join for two distinct feature set
add aee2485 Set SVN properties.
add 2033e19 Upgrade Derby and PostgreSQL dependency (SIS-383).
add 06b10c7 Declare explicit dependency to Derby with test scope, and remove reference to JavaDB from documentation (SIS-383).
add 3fa471a Add explicit Derby dependency (test scope) for all storage module. This is required for avoiding a test failure caused by different version of Derby/JavaDB used be sis-referencing and sis-earth-observation (for example).
add 3ca30ee Rename ArrayFeatureSet as MemoryFeatureSet, add javadoc and move some implementation to super-class.
add d9a986f Make Expression/Filter implementations package-private. The intent is to force the use of a FilterFactory, because those factories may be DataStore-specific.
add 5d66c3d Complete revision of filter package, except DefaultFilterFactory which will need a severe revision of its API (but this task need to be done in GeoAPI first).
add be1ca1c Review of org.apache.sis.internal.storage.query package.
add 0c4c79e Rename FeatureSetView as FeatureSubset and reduce redundancies in SimpleQueryTest.
add db2786f Move common getMetadata() default implementation in AbstractFeatureSet. Allow FeatureOperations.compound(...) to work with FeatureAssociationRole. The intent is to use it in JoinFeatureSet.
add 89b25c0 Implement JoinFeatureSet.features(boolean) on top of Spliterator instead than Iterator, and use an identifier created by FeatureOperations.compound(…) instead than computing the string concatenation unconditionally for every features.
add 130af0d Reduce redundancies in the test and add a parallelization test.
add e82bf19 Change Query interface to an abstract class allowing to move some SimpleQuery properties later.
add a495ce1 Post-merge cleanup.
add 3817cf3 Clarification about which packages are still work in progress: - Move ...sql.postgresql to ...internal.sql.postgresql. - Move org.apache.sql to org.apache.storage.sql for making clearer that it is about DataStore. - Add warnings in sis-sql and sis-shapefile modules, together with index package. - Trim extra spaces, fix a few formatting issues in XML class, fix package-info.
add 509c736 Enable lenient unmarshalling only from XML.unmarshal(...) methods, for avoiding surprising behavior when a user create his own UnmarshallerPool. This restore a behavior closer to the one we had before the "upgrade metadata to ISO 19115-3:2016" work.
add f327a0e Make XML.LENIENT_UNMARSHAL public with improved documentation.
add 7791535 Simplify the "sis metadata" command-line by omiting the verbose nodes telling that the tree use ISO 19115 standard.
add 6965dd1 Temporarily disable to netCDF tests, pending a refactoring in geoapi-conformance.
add a043662 More netCDF test to temporarily disable.
add 6e2b3ef More tests to be temporarily ignored while we are refactoring netCDF tests in geoapi-conformance.
add 43d807c Rename Citations.getCodeSpace(Citation) as toCodeSpace(…). The getCodeList name was confusing since it suggests that the method was returning a citation code space, while actually it returns the citation *as* a code space.
add a4049e9 Do not depends anymore on geoapi-netcdf test JAR. https://github.com/opengeospatial/geoapi/issues/25
add 92219db Replace the comparisons of metadata tree by a more robust comparison of properties. It allows us to ignore some properties and is not sensitive to property order.
add 41d2a05 Re-enable the last ignored test in netCDF module.
add 2f55351 More robust metadata verification in tests (do not depend on the details of the formatting process).
add bdcb616 Dependency to geoapi-netcdf is not needed anymore.
add 6cf85ae Update Java requirements in the documentation (from Java 7 to Java 8).
add 154231f Reduce the amount of exceptions logged when the application can not connect to the spatial metadata database.
add b76c13f Add Derby dependency with <scope>test</scope> in modules that connect to spatial database for their tests.
add 01d557d Fix an error in the version number declared in EPSG history table.
add 99d7318 Simplify some calls to Collections.emptySet(). Those simplifications are possible in Java 8 (the more complicated form was necessary in Java 7).
add bc74987 Add a partial support of Record and RecordType (un)marshalling.
add 0b120a6 Add "http://www.isotc211.org/2005/gmi" as a synonymous of "http://standards.iso.org/iso/19115/-2/gmi/1.0" namespace at unmarshalling time.
add e031b9a Add a StoreResource interface, only internal for now (waiting to see how it works in practice). https://issues.apache.org/jira/browse/SIS-416
new 3b520e6 Move GUI resources in internal package. Rename "gui.crs" as "gui.referencing". Deprecate the methods that introduce a dependency to AWT.
new fbe0334 Remove the "Longitude first" checkbox from CRSChooser - this is not the right widget were to provide this choice.
new f380b16 Initial commit of Smaniotto Enzo work from SIS-417, with some renaming.
new a1f39a9 Initial review of GUI main class (localization, file filters).
new 79944c3 When opening a dataset, try the DataStoreProvider for the file extension before to try any other DataStoreProvider. The intent is to avoid DataStoreProvider.probeContent(...) invocation that may cause loading of large dependencies.
new a2fae02 Take axis direction in account when computing the geographic bounding box.
new 20423a3 First draft of a port of GridGeometry class, for grid coverage (raster) support.
new 849744e Added documentation and tests for PixelTranslation.
new 70215bc Documentation clarification in GridExtent.
new 5eb53e5 Remove @Debug annotation on toString() methods in order to avoid polluting the list of debug methods with long list of toString() methods. Unless otherwise specified in javadoc, toString() will be considered implicitly for debugging purpose.
new 034287d Computes resolution at GridGeometry construction time.
new 6ba6b9b Improve GridGeometry documentation and add a isConversionLinear method.
new 793b04b Add tests for GridGeometry.
new 31ae4af Method renaming and javadoc.
new 09ef87a More robust parsing of GeoTIFF tags: when expecting a single value, accept an array if all values are the same. Also accept -1 as a code for "missing units" but verify if the unit is really missing.
new eb442d4 Leverage geoapi-conformance for reading OGC XSD files.
new 95fcdc9 SQL metadaat: fix an "ID column not found" error on PostgreSQL, more compact identifiers, and replace CRS WKT by EPSG codes.
new 9a54238 Remember the filter used last time the user opened a file.
new df7c8b2 Add abbreviations for all sub-interfaces found in ISO 19115 except quality package.
new 0bec473 Use the 'long' primitive type instead of 'int' in GridExtent. This force us to not implement GeoAPI interfaces for now (until https://github.com/opengeospatial/geoapi/issues/36) is resolved. But since those interfaces were not part of formal standard yet (they are in the "pending" part of GeoAPI), we would not have implemented them in SIS release anyway.
new 4dbe8c9 First draft of a GridCoverageResource interface.
new 870d121 Remove Numerics.hashCode(long), replaced by Long.hashCode(long).
new ce75bda Renamed GridGeometry as Localization for avoiding confusion with GridGeometry in sis-raster.
new ceca8a2 First draft of a GeoTIFF reader capable to compute the GridGeometry.
new 5963796 Fix error messages for illegal grid geometries.
new 7c85688 Move PassThroughTransform.create(…) method to MathTransforms.passThrough(…).
new 64c22fb Take in account the change in number of dimensions when creating GeoTIFF GridGeometry. Fill more metadata using GridGeometry information.
new ed17d87 Update dependencies.
new 28c0a18 Call to Field.setAccessible(true) need to take in account security constrained environment. Call to ModifiableMetadata.freeze() share instances when possible.
new c710ef3 Portrayal : remove final and extend MapItem on MapLayer class
new d4818cc Fix a never-ending loop when the file to open has a known extensions but is still not recognized as a known format. This happen in particular with XML files.
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (cccff10)
\
N -- N -- N refs/heads/geoapi-4.0 (d4818cc)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 31 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 01/31: Move GUI resources in internal package. Rename
"gui.crs" as "gui.referencing". Deprecate the methods that introduce a
dependency to AWT.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 3b520e651c25922bc62b3b324f5fbb4041a8af59
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat May 26 12:59:07 2018 +0000
Move GUI resources in internal package. Rename "gui.crs" as "gui.referencing".
Deprecate the methods that introduce a dependency to AWT.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832308 13f79535-47bb-0310-9956-ffa450edef68
---
.../sis/gui/{crs => referencing}/CRSButton.java | 2 +-
.../sis/gui/{crs => referencing}/CRSChooser.java | 51 ++++++-----
.../sis/gui/{crs => referencing}/CRSTable.java | 65 ++++++++------
.../apache/sis/gui/{crs => referencing}/Code.java | 54 ++++--------
.../WKTPane.java} | 16 ++--
.../org/apache/sis/internal/gui/FXUtilities.java | 94 ++++++++++++++++++++
.../org/apache/sis/internal/gui/FontGlyphs.java | 13 +--
.../apache/sis/internal/gui/JavaFxUtilities.java | 98 ---------------------
.../apache/sis/{ => internal}/gui/Resources.java | 16 ++--
.../sis/{ => internal}/gui/Resources.properties | 2 +-
.../sis/{ => internal}/gui/Resources_fr.properties | 0
.../org/apache/sis/internal/gui/package-info.java | 31 +++++++
.../sis/gui/{crs => referencing}/CRSChooser.fxml | 0
.../sis/gui/{crs => referencing}/proj_conic.png | Bin
.../sis/gui/{crs => referencing}/proj_geo.png | Bin
.../sis/gui/{crs => referencing}/proj_square.png | Bin
.../sis/gui/{crs => referencing}/proj_stereo.png | Bin
.../sis/gui/{crs => referencing}/proj_utm.png | Bin
18 files changed, 229 insertions(+), 213 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSButton.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSButton.java
similarity index 98%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSButton.java
rename to application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSButton.java
index 2ddd516..b953613 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSButton.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSButton.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui.crs;
+package org.apache.sis.gui.referencing;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSChooser.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
similarity index 85%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSChooser.java
rename to application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
index 649743d..3aeede0 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSChooser.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
@@ -14,13 +14,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui.crs;
+package org.apache.sis.gui.referencing;
+import java.util.Locale;
+import java.io.IOException;
+import java.io.UncheckedIOException;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
-import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
@@ -30,21 +32,22 @@ import javafx.scene.control.DialogPane;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
-import org.apache.sis.internal.gui.JavaFxUtilities;
+import org.opengis.util.FactoryException;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.internal.gui.FXUtilities;
import org.apache.sis.referencing.crs.DefaultGeographicCRS;
import org.apache.sis.referencing.cs.AxesConvention;
import org.apache.sis.referencing.CRS;
import org.apache.sis.referencing.IdentifiedObjects;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.opengis.util.FactoryException;
import org.apache.sis.referencing.crs.AbstractCRS;
+
/**
* Widget configuration panel used to select a {@link CoordinateReferenceSystem}.
*
- * @author Johann Sorel (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
*/
public class CRSChooser extends BorderPane {
@@ -69,15 +72,14 @@ public class CRSChooser extends BorderPane {
* Create a new CRSChooser with no {@link CoordinateReferenceSystem} defined.
*/
public CRSChooser() {
- JavaFxUtilities.loadJRXML(this,CRSChooser.class);
-
- uiSearch.addEventHandler(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
-
- @Override
- public void handle(KeyEvent event) {
- if (updateText) return;
- uiTable.searchCRS(uiSearch.getText());
- }
+ try {
+ FXUtilities.loadJRXML(this, CRSChooser.class, Locale.getDefault());
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ uiSearch.addEventHandler(KeyEvent.KEY_PRESSED, (KeyEvent event) -> {
+ if (updateText) return;
+ uiTable.searchCRS(uiSearch.getText());
});
uiTable = new CRSTable();
@@ -99,26 +101,24 @@ public class CRSChooser extends BorderPane {
}
- public CoordinateReferenceSystem getCorrectedCRS(){
+ private CoordinateReferenceSystem getCorrectedCRS(){
CoordinateReferenceSystem crs = crsProperty.get();
if (crs == null) return null;
- //fix longitude first
try {
Integer epsg = IdentifiedObjects.lookupEPSG(crs);
if (epsg != null) {
- crs = CRS.forCode("EPSG:"+epsg);
+ crs = CRS.forCode("EPSG:" + epsg);
if (uiLongFirst.isSelected()) {
crs = AbstractCRS.castOrCopy(crs).forConvention(AxesConvention.RIGHT_HANDED);
}
}
- } catch (FactoryException ex) {/*no important*/}
-
- //fix axes convention
+ } catch (FactoryException ex) {
+ // TODO
+ }
if (uiAxisConv.isSelected() && crs instanceof DefaultGeographicCRS && uiChoice.getValue() != null) {
crs = ((DefaultGeographicCRS) crs).forConvention(uiChoice.getValue());
}
-
return crs;
}
@@ -140,7 +140,7 @@ public class CRSChooser extends BorderPane {
* @param crs {@link CoordinateReferenceSystem} to edit.
* @return modified {@link CoordinateReferenceSystem}.
*/
- public static CoordinateReferenceSystem showDialog(Object parent, CoordinateReferenceSystem crs){
+ public static CoordinateReferenceSystem showDialog(Object parent, CoordinateReferenceSystem crs) {
final CRSChooser chooser = new CRSChooser();
chooser.crsProperty.set(crs);
final Alert alert = new Alert(Alert.AlertType.NONE);
@@ -151,5 +151,4 @@ public class CRSChooser extends BorderPane {
final ButtonType res = alert.showAndWait().orElse(ButtonType.CANCEL);
return res == ButtonType.CANCEL ? null : chooser.getCorrectedCRS();
}
-
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSTable.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
similarity index 87%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSTable.java
rename to application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
index 77530ac..66448c5 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/CRSTable.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
@@ -14,16 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui.crs;
+package org.apache.sis.gui.referencing;
import java.awt.Color;
import java.awt.Dimension;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.Set;
-import java.util.logging.Level;
import javafx.application.Platform;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
@@ -47,9 +47,9 @@ import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.util.Callback;
-import org.apache.sis.gui.Resources;
+import org.apache.sis.internal.gui.Resources;
import org.apache.sis.internal.gui.FontGlyphs;
-import org.apache.sis.internal.gui.JavaFxUtilities;
+import org.apache.sis.internal.gui.FXUtilities;
import org.apache.sis.io.wkt.FormattableObject;
import org.apache.sis.metadata.iso.citation.Citations;
import org.opengis.referencing.IdentifiedObject;
@@ -59,27 +59,35 @@ import org.opengis.referencing.crs.GeographicCRS;
import org.opengis.referencing.crs.ProjectedCRS;
import org.opengis.referencing.operation.ConicProjection;
import org.opengis.referencing.operation.CylindricalProjection;
-import org.opengis.referencing.operation.OperationMethod;
import org.opengis.referencing.operation.PlanarProjection;
import org.opengis.referencing.operation.Projection;
import org.opengis.util.FactoryException;
/**
*
- * @author Johann Sorel (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
*/
-public class CRSTable extends ScrollPane{
+final class CRSTable extends ScrollPane {
private static final Color COLOR = new Color(30, 150, 250);
- private static final Image ICON_GEO = JavaFxUtilities.getImage("/org/apache/sis/gui/crs/proj_geo.png", new Dimension(16, 16));
- private static final Image ICON_SQUARE = JavaFxUtilities.getImage("/org/apache/sis/gui/crs/proj_square.png", new Dimension(16, 16));
- private static final Image ICON_STEREO = JavaFxUtilities.getImage("/org/apache/sis/gui/crs/proj_stereo.png", new Dimension(16, 16));
- private static final Image ICON_UTM = JavaFxUtilities.getImage("/org/apache/sis/gui/crs/proj_utm.png", new Dimension(16, 16));
- private static final Image ICON_CONIC = JavaFxUtilities.getImage("/org/apache/sis/gui/crs/proj_conic.png", new Dimension(16, 16));
- private static final Image ICON_UNKNOWNED = FontGlyphs.createImage("\uE22F",16,COLOR);
+ private static final Image ICON_GEO, ICON_SQUARE, ICON_STEREO, ICON_UTM, ICON_CONIC;
+ private static final Image ICON_UNKNOWN = FontGlyphs.createImage("\uE22F",16,COLOR);
+ static {
+ final Class<?> c = CRSTable.class;
+ final Dimension dim = new Dimension(16, 16);
+ try {
+ ICON_GEO = FXUtilities.getImage(c, "proj_geo.png", dim);
+ ICON_SQUARE = FXUtilities.getImage(c, "proj_square.png", dim);
+ ICON_STEREO = FXUtilities.getImage(c, "proj_stereo.png", dim);
+ ICON_UTM = FXUtilities.getImage(c, "proj_utm.png", dim);
+ ICON_CONIC = FXUtilities.getImage(c, "proj_conic.png", dim);
+ } catch (IOException e) {
+ throw new ExceptionInInitializerError(e);
+ }
+ }
private final ObjectProperty<CoordinateReferenceSystem> crsProperty = new SimpleObjectProperty<>();
private final TableView<Code> uiTable = new TableView<>();
@@ -112,7 +120,7 @@ public class CRSTable extends ScrollPane{
try {
crsProperty.set((CoordinateReferenceSystem) code.createObject());
} catch (FactoryException ex) {
- JavaFxUtilities.LOGGER.log(Level.INFO,ex.getMessage(),ex);
+ error(ex);
}
}
}
@@ -135,11 +143,10 @@ public class CRSTable extends ScrollPane{
uiTable.setPlaceholder(new Label(""));
});
} catch (FactoryException ex) {
- JavaFxUtilities.LOGGER.log(Level.WARNING,ex.getMessage(),ex);
+ error(ex);
}
}
}.start();
-
}
public ObjectProperty<CoordinateReferenceSystem> crsProperty(){
@@ -150,6 +157,10 @@ public class CRSTable extends ScrollPane{
filter(searchword);
}
+ private static void error(final Exception e) {
+ // TODO
+ }
+
/**
* Display only the CRS name that contains the specified keywords. The {@code keywords}
* argument is a space-separated list, usually provided by the user after he pressed the
@@ -205,7 +216,7 @@ public class CRSTable extends ScrollPane{
}
static Image getIcon(IdentifiedObject obj) {
- Image icon = ICON_UNKNOWNED;
+ Image icon = ICON_UNKNOWN;
if (obj instanceof GeographicCRS) {
icon = ICON_GEO;
} else if (obj instanceof ProjectedCRS) {
@@ -247,12 +258,12 @@ public class CRSTable extends ScrollPane{
super.updateItem(item, empty);
setGraphic(null);
if (item!=null){
- Image icon = ICON_UNKNOWNED;
+ Image icon = ICON_UNKNOWN;
try {
final IdentifiedObject obj = item.createObject();
icon = getIcon(obj);
} catch (FactoryException ex) {
- JavaFxUtilities.LOGGER.log(Level.INFO, ex.getMessage(),ex);
+ error(ex);
}
setGraphic(new ImageView(icon));
}
@@ -280,7 +291,8 @@ public class CRSTable extends ScrollPane{
public DescColumn() {
super(Resources.format(Resources.Keys.Description));
setEditable(false);
- setCellValueFactory((TableColumn.CellDataFeatures<Code, String> param) -> new SimpleObjectProperty<>(param.getValue().getDescription()));
+ setCellValueFactory((TableColumn.CellDataFeatures<Code, String> param) ->
+ new SimpleObjectProperty<>(param.getValue().getDescription()));
}
}
@@ -300,8 +312,7 @@ public class CRSTable extends ScrollPane{
@Override
public TableCell<Code, Code> call(TableColumn<Code, Code> param) {
- return new TableCell<Code,Code>(){
-
+ return new TableCell<Code,Code>() {
{
setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
@@ -311,10 +322,10 @@ public class CRSTable extends ScrollPane{
try {
final IdentifiedObject obj = getItem().createObject();
if (obj instanceof FormattableObject) {
- FormattableObjectPane.showDialog(this, (FormattableObject) obj);
+ WKTPane.showDialog(this, (FormattableObject) obj);
}
} catch (FactoryException ex) {
- JavaFxUtilities.LOGGER.log(Level.INFO,ex.getMessage(),ex);
+ error(ex);
}
}
}
@@ -334,7 +345,5 @@ public class CRSTable extends ScrollPane{
}
});
}
-
}
-
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/Code.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/Code.java
similarity index 60%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/crs/Code.java
rename to application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/Code.java
index f47a97c..59676d3 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/Code.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/Code.java
@@ -14,38 +14,35 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui.crs;
+package org.apache.sis.gui.referencing;
-import org.apache.sis.util.ArgumentChecks;
import org.opengis.referencing.AuthorityFactory;
import org.opengis.referencing.IdentifiedObject;
import org.opengis.util.FactoryException;
/**
- * This element stores the {@linkplain #code code value}.
- * The description name will be fetched when first needed and returned by {@link #toString}.
+ * Stores the code of a coordinate reference system (CRS) together with its description.
+ * The description will be fetched when first needed and returned by {@link #toString()}.
*
- * @author Martin Desruisseaux (IRD)
- * @version 0.8
- * @since 0.8
+ * @author Martin Desruisseaux (Geomatys)
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
*/
final class Code {
-
/**
- * The authority code.
+ * The CRS code. Usually defined by EPSG, but other authorities are allowed.
*/
- public final String code;
+ final String code;
/**
- * The CRS object description for the {@linkplain #code}.
- * Will be extracted only when first needed.
+ * The CRS object description for the {@linkplain #code}, fetched when first needed.
+ * In Apache SIS implementation of EPSG factory, this is the CRS name.
*/
private String name;
- private String description;
-
/**
* The authority factory to use for fetching the name. Will be set to {@code null} after
* {@linkplain #name} has been made available, in order to allow the garbage collector
@@ -55,39 +52,29 @@ final class Code {
/**
* Creates a code from the specified value.
- *
- * @param factory The authority factory.
- * @param code The authority code.
*/
- public Code(final AuthorityFactory factory, final String code) {
- ArgumentChecks.ensureNonNull("factory", factory);
- ArgumentChecks.ensureNonNull("code", code);
+ Code(final AuthorityFactory factory, final String code) {
this.factory = factory;
this.code = code;
}
/**
* Create the Object identified by code.
- *
- * @return IdentifiedObject
- * @throws FactoryException
*/
- public IdentifiedObject createObject() throws FactoryException{
+ IdentifiedObject createObject() throws FactoryException{
return factory.createObject(code);
}
/**
* Returns a description of the object.
- *
- * @return
*/
- public String getDescription(){
- if (description == null) try {
- description = factory.getDescriptionText(code).toString();
+ public String getDescription() {
+ if (name == null) try {
+ name = factory.getDescriptionText(code).toString();
} catch (FactoryException e) {
- description = e.getLocalizedMessage();
+ name = e.getLocalizedMessage();
}
- return description;
+ return name;
}
/**
@@ -97,9 +84,6 @@ final class Code {
*/
@Override
public String toString() {
- if (name == null) {
- name = code + " - "+getDescription();
- }
- return name;
+ return code + " - " + getDescription();
}
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/FormattableObjectPane.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/WKTPane.java
similarity index 88%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/crs/FormattableObjectPane.java
rename to application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/WKTPane.java
index 9909695..b984d4c 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/crs/FormattableObjectPane.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/WKTPane.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui.crs;
+package org.apache.sis.gui.referencing;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
@@ -28,20 +28,21 @@ import javafx.scene.layout.BorderPane;
import org.apache.sis.io.wkt.Convention;
import org.apache.sis.io.wkt.FormattableObject;
+
/**
* Small panel to display an object as WKT in various conventions.
*
- * @author Johann Sorel (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
*/
-class FormattableObjectPane extends BorderPane {
+final class WKTPane extends BorderPane {
private final ChoiceBox<Convention> choice = new ChoiceBox<>(FXCollections.observableArrayList(Convention.values()));
private final TextArea text = new TextArea();
- public FormattableObjectPane(final FormattableObject obj) {
+ public WKTPane(final FormattableObject obj) {
setTop(choice);
setCenter(text);
@@ -55,7 +56,7 @@ class FormattableObjectPane extends BorderPane {
}
public static void showDialog(Object parent, FormattableObject candidate){
- final FormattableObjectPane chooser = new FormattableObjectPane(candidate);
+ final WKTPane chooser = new WKTPane(candidate);
final Alert alert = new Alert(Alert.AlertType.NONE);
final DialogPane pane = alert.getDialogPane();
@@ -64,5 +65,4 @@ class FormattableObjectPane extends BorderPane {
alert.setResizable(true);
alert.showAndWait();
}
-
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
new file mode 100644
index 0000000..73c8bc8
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.gui;
+
+import java.util.Locale;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+import javax.imageio.ImageIO;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.image.Image;
+import javafx.embed.swing.SwingFXUtils;
+
+
+/**
+ * JavaFX utilities for internal purpose only.
+ *
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final class FXUtilities {
+ /**
+ * Do not allow instantiation of this class.
+ */
+ private FXUtilities() {
+ }
+
+ /**
+ * Loads an image and resizes it to requested size.
+ *
+ * @param loader the class to use for loading the image.
+ * @param path path to image in the jar, relative to the {@code loader} class.
+ * @param resize the desired size, or {@code null} for no resizing.
+ * @return image resized to the given dimension.
+ * @throws IOException if the image can not be loaded.
+ *
+ * @deprecated we need a mechanism without dependency to AWT.
+ */
+ @Deprecated
+ public static Image getImage(final Class<?> loader, final String path, final Dimension resize) throws IOException {
+ BufferedImage img = ImageIO.read(loader.getResourceAsStream(path));
+ if (resize != null) {
+ final BufferedImage resized = new BufferedImage(resize.width, resize.height, BufferedImage.TYPE_INT_ARGB);
+ final Graphics2D g = resized.createGraphics();
+ g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+ g.drawImage(img, 0, 0, resize.width, resize.height, null);
+ g.dispose();
+ img = resized;
+ }
+ return SwingFXUtils.toFXImage(img, null);
+ }
+
+ /**
+ * Loads and initializes widget from JRXML definition provided in this module.
+ * The JRXML file shall be in the same package than the given {@code loader} class
+ * and have the same simple name followed by the {@code ".fxml"} extension.
+ *
+ * @param target the widget for which to load the JRXML file.
+ * @param loader the class to use for loading the file.
+ * @param locale the locale for the resources.
+ * @throws IOException if an error occurred while loading the JRXML file.
+ */
+ public static void loadJRXML(final Parent target, final Class<?> loader, final Locale locale) throws IOException {
+ final FXMLLoader fxl = new FXMLLoader(loader.getResource(loader.getSimpleName() + ".fxml"),
+ Resources.forLocale(locale));
+ fxl.setRoot(target);
+ fxl.setController(target);
+ /*
+ * In some environements like OSGi, we must use the class loader of the widget
+ * (not the class loader of FXMLLoader).
+ */
+ fxl.setClassLoader(loader.getClassLoader());
+ fxl.load();
+ }
+}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FontGlyphs.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FontGlyphs.java
index 9675057..154e572 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FontGlyphs.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FontGlyphs.java
@@ -30,14 +30,18 @@ import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import org.apache.sis.util.ArgumentChecks;
+
/**
* Internal image tool to generate icons for javafx widgets.
*
- * @author Johann Sorel (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
+ *
+ * @deprecated This introduces a dependency to AWT, which we wish to avoid at this early stage.
*/
+@Deprecated
public final class FontGlyphs {
private static Font FONT;
@@ -120,7 +124,6 @@ public final class FontGlyphs {
g.setPaint(gradiant);
g.fill(rect);
}
-
int x = border + insets.left + additionalLeftInset;
//draw text
@@ -135,8 +138,6 @@ public final class FontGlyphs {
g.setColor(Color.BLACK);
g.draw(rect);
}
-
return img;
}
-
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/JavaFxUtilities.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/JavaFxUtilities.java
deleted file mode 100644
index 69acf9e..0000000
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/JavaFxUtilities.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.internal.gui;
-
-import java.awt.Dimension;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-import java.util.Locale;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import javafx.embed.swing.SwingFXUtils;
-import javafx.fxml.FXMLLoader;
-import javafx.scene.Parent;
-import javafx.scene.image.Image;
-import javax.imageio.ImageIO;
-import org.apache.sis.gui.Resources;
-import org.apache.sis.util.logging.Logging;
-
-/**
- * Internal JavaFx utilities.
- *
- * @author Johann Sorel (Geomatys)
- * @version 0.8
- * @since 0.8
- * @module
- */
-public final class JavaFxUtilities {
-
- public static final Logger LOGGER = Logging.getLogger("org.apache.sis.gui");
-
- private JavaFxUtilities(){}
-
- /**
- * Load an image and resize it to requested size.
- *
- * @param path path to image in the jar
- * @param resize null for no resize
- * @return resized image
- */
- public static Image getImage(final String path, Dimension resize) {
- BufferedImage img = null;
- try {
- img = ImageIO.read(JavaFxUtilities.class.getResourceAsStream(path));
-
- if (resize!=null) {
- final BufferedImage resized = new BufferedImage(resize.width, resize.height, BufferedImage.TYPE_INT_ARGB);
- final Graphics2D g = resized.createGraphics();
- g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
- g.drawImage(img, 0, 0, resize.width, resize.height, null);
- g.dispose();
- img = resized;
- }
-
- } catch (IOException ex) {
- LOGGER.log(Level.WARNING, ex.getMessage(), ex);
- }
- return SwingFXUtils.toFXImage(img, null);
- }
-
- /**
- * Load and initialize widget from jrxml definition set this module bundle.
- *
- * @param candidate widget to load JRXML in
- * @param cdtClass class as base for resource classloader
- */
- public static void loadJRXML(Parent candidate, Class cdtClass) {
- final String fxmlpath = "/"+cdtClass.getName().replace('.', '/')+".fxml";
- final FXMLLoader loader = new FXMLLoader(cdtClass.getResource(fxmlpath));
- loader.setResources(Resources.forLocale(Locale.getDefault()));
- loader.setController(candidate);
- loader.setRoot(candidate);
- //in special environement like osgi or other, we must use the proper class loaders
- //not necessarly the one who loaded the FXMLLoader class
- loader.setClassLoader(cdtClass.getClassLoader());
- try {
- loader.load();
- } catch (IOException ex) {
- throw new IllegalArgumentException(ex.getMessage(), ex);
- }
- }
-
-}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
similarity index 96%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.java
rename to application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
index 9b56e14..8eda591 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sis.gui;
+package org.apache.sis.internal.gui;
import java.net.URL;
import java.util.Locale;
@@ -27,13 +27,13 @@ import org.apache.sis.util.resources.ResourceInternationalString;
/**
- * Warning and error messages that are specific to the {@code sis-storage} module.
+ * Messages that are specific to the {@code sis-javafx} module.
* Resources in this file should not be used by any other module. For resources shared by
* all modules in the Apache SIS project, see {@link org.apache.sis.util.resources} package.
*
- * @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.8
- * @since 0.8
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
* @module
*/
public final class Resources extends IndexedResourceBundle {
@@ -42,10 +42,6 @@ public final class Resources extends IndexedResourceBundle {
* {@code Keys} should appear in any resulting class files. Since the Java compiler
* inlines final integer values, using long identifiers will not bloat the constant
* pools of compiled classes.
- *
- * @author Martin Desruisseaux (IRD, Geomatys)
- * @since 0.3
- * @module
*/
@Generated("org.apache.sis.util.resources.IndexedResourceCompiler")
public static final class Keys extends KeyConstants {
@@ -81,7 +77,7 @@ public final class Resources extends IndexedResourceBundle {
public static final short Description = 2;
/**
- * Logitude first
+ * Longitude first
*/
public static final short LongitudeFirst = 5;
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
similarity index 97%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.properties
rename to application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
index 06bad7b..6ce5fb7 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/Resources.properties
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
@@ -23,5 +23,5 @@
Code = Code
Description = Description
CRS = CRS
-LongitudeFirst = Logitude first
+LongitudeFirst = Longitude first
AxisConvention = Axis convention
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Resources_fr.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
similarity index 100%
rename from application/sis-javafx/src/main/java/org/apache/sis/gui/Resources_fr.properties
rename to application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/package-info.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/package-info.java
new file mode 100644
index 0000000..673060f
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/package-info.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A set of helper classes for the SIS implementation.
+ *
+ * <STRONG>Do not use!</STRONG>
+ *
+ * This package is for internal use by SIS only. Classes in this package
+ * may change in incompatible ways in any future version without notice.
+ *
+ * @author Johann Sorel (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+package org.apache.sis.internal.gui;
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/CRSChooser.fxml b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/CRSChooser.fxml
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_conic.png b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_conic.png
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_conic.png
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_conic.png
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_geo.png b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_geo.png
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_geo.png
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_geo.png
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_square.png b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_square.png
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_square.png
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_square.png
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_stereo.png b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_stereo.png
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_stereo.png
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_stereo.png
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_utm.png b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_utm.png
similarity index 100%
rename from application/sis-javafx/src/main/resources/org/apache/sis/gui/crs/proj_utm.png
rename to application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/proj_utm.png
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 03/31: Initial commit of Smaniotto Enzo work from SIS-417,
with some renaming.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit f380b16d2ac9d008be94397b9bd3d33506db0359
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat May 26 16:23:25 2018 +0000
Initial commit of Smaniotto Enzo work from SIS-417, with some renaming.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832316 13f79535-47bb-0310-9956-ffa450edef68
---
.../src/main/java/org/apache/sis/gui/Main.java | 123 ++++++
.../org/apache/sis/gui/metadata/MetadataNode.java | 228 +++++++++++
.../apache/sis/gui/metadata/MetadataOverview.java | 432 +++++++++++++++++++++
.../org/apache/sis/gui/metadata/ResourceView.java | 282 ++++++++++++++
4 files changed, 1065 insertions(+)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
new file mode 100644
index 0000000..a036ba7
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.gui;
+
+import java.io.File;
+import javafx.application.Application;
+import javafx.application.Platform;
+import javafx.scene.Scene;
+import javafx.scene.control.Menu;
+import javafx.scene.control.MenuBar;
+import javafx.scene.control.MenuItem;
+import javafx.scene.control.SeparatorMenuItem;
+import javafx.scene.input.KeyCombination;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.FileChooser;
+import javafx.stage.Stage;
+import org.apache.sis.gui.metadata.ResourceView;
+
+
+/**
+ * Entry point for Apache SIS application.
+ *
+ * @author Smaniotto Enzo
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public class Main extends Application {
+ /**
+ * The primary stage onto which the application scene is set.
+ */
+ private Stage window;
+
+ /**
+ * The main content of this application. For now this is the metadata viewer.
+ * In a future version it will be another component.
+ */
+ private ResourceView content;
+
+ /**
+ * Creates a new Apache SIS application.
+ */
+ public Main() {
+ }
+
+ /**
+ * Invoked by JavaFX for starting the application.
+ * This method is called on the JavaFX Application Thread.
+ *
+ * @param window the primary stage onto which the application scene will be be set.
+ */
+ @Override
+ public void start(final Stage window) {
+ this.window = window;
+ /*
+ * Configure the menu bar.
+ */
+ final MenuBar menus = new MenuBar();
+ final Menu file = new Menu("File"); // TODO: localize
+ menus.getMenus().add(file);
+
+ final MenuItem open = new MenuItem("Open…"); // TODO: localize
+ open.setAccelerator(KeyCombination.keyCombination("Shortcut+O"));
+ open.setOnAction(e -> open());
+
+ final MenuItem exit = new MenuItem("Exit"); // TODO: localize
+ exit.setOnAction(e -> Platform.exit());
+ file.getItems().addAll(open, new SeparatorMenuItem(), exit);
+ /*
+ *
+ */
+ content = new ResourceView();
+ final BorderPane pane = new BorderPane();
+ pane.setTop(menus);
+ pane.setCenter(content.pane);
+ Scene scene = new Scene(pane);
+ window.setTitle("Apache Spatial Information System");
+ window.setScene(scene);
+ window.setWidth(800);
+ window.setHeight(650);
+ window.show();
+ }
+
+ /**
+ * Invoked when the user selected "File / open" menu.
+ */
+ private void open() {
+ final FileChooser fileChooser = new FileChooser();
+ fileChooser.setTitle("Open data file"); // TODO: localize
+ File fileByChooser = fileChooser.showOpenDialog(window);
+ if (fileByChooser != null) {
+ if (fileByChooser.isDirectory()) {
+ content.openDirectory(fileByChooser);
+ } else {
+ content.openFile(fileByChooser);
+ }
+ }
+ }
+
+ /**
+ * Starts the Apache SIS application.
+ *
+ * @param args ignored.
+ */
+ public static void main(final String[] args) {
+ launch(args);
+ }
+}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataNode.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataNode.java
new file mode 100644
index 0000000..39fb007
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataNode.java
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.gui.metadata;
+
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.Predicate;
+import javafx.beans.property.ObjectProperty;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTableView;
+import org.apache.sis.util.collection.TableColumn;
+import org.apache.sis.util.collection.TreeTable;
+import org.opengis.referencing.ReferenceSystem;
+
+
+/**
+ *
+ * @author Siddhesh Rane
+ */
+final class MetadataNode extends TreeTableView<TreeTable.Node> {
+
+ private static final Predicate<TreeTable.Node> HIDE_EMPTY_LEAF = t -> !t.isLeaf() || t.getValue(TableColumn.VALUE) != null;
+ private static final Predicate<TreeTable.Node> EXPAND_SINGLE_CHILD = node -> node.getChildren().size() == 1 || node.getParent() == null;
+
+ private TreeTable treeTable;
+ private TreeTableColumn<TreeTable.Node, String> nameColumn;
+ private TreeTableColumn<TreeTable.Node, TreeTable.Node> valueColumn;
+ private TreeTableColumn<TreeTable.Node, String> textColumn;
+
+ private final ObjectProperty<Predicate<TreeTable.Node>> createTreeItemForNodeProperty = new SimpleObjectProperty<>(HIDE_EMPTY_LEAF);
+
+ /**
+ * A property containing predicate that returns true if the given
+ * {@link TreeTable.Node} must be shown as a {@link TreeItem} in the
+ * {@link TreeTableView}. By default return true for all nodes unless
+ * preferences are loaded
+ *
+ * @return The property containing the expansion predicate
+ */
+ private ObjectProperty<Predicate<TreeTable.Node>> createTreeItemForNodeProperty() {
+ return createTreeItemForNodeProperty;
+ }
+
+ private Predicate<TreeTable.Node> getCreateTreeItemForNode() {
+ return createTreeItemForNodeProperty.get();
+ }
+
+ private void setCreateTreeItemForNode(Predicate<TreeTable.Node> createTreeItemForNode) {
+ createTreeItemForNodeProperty.set(createTreeItemForNode);
+ }
+
+ private final SimpleObjectProperty<Predicate<TreeTable.Node>> expandNodeProperty = new SimpleObjectProperty<>(EXPAND_SINGLE_CHILD);
+
+ /**
+ * A property containing predicate that returns true if the given
+ * {@link TreeTable.Node} must be expanded in the {@link TreeTableView} to
+ * show its children by default.
+ *
+ * @return The property containing the expansion predicate
+ */
+ private ObjectProperty<Predicate<TreeTable.Node>> expandNodeProperty() {
+ return expandNodeProperty;
+ }
+
+ private Predicate<TreeTable.Node> getExpandNode() {
+ return expandNodeProperty.get();
+ }
+
+ private void setExpandNode(Predicate<TreeTable.Node> expandNode) {
+ expandNodeProperty.set(expandNode);
+ }
+
+ private void expandNodes(TreeItem<TreeTable.Node> root) {
+ if (root == null || root.isLeaf()) {
+ return;
+ }
+ root.setExpanded(getExpandNode().test(root.getValue()));
+ for (TreeItem<TreeTable.Node> child : root.getChildren()) {
+ expandNodes(child);
+ }
+ }
+
+ ObjectProperty<Comparator<TreeTable.Node>> order = new SimpleObjectProperty<>(Comparator.comparingInt(n -> 0));
+
+ /**
+ * the default order of sorting for rows of the tree table.
+ *
+ * @return
+ */
+ private ObjectProperty<Comparator<TreeTable.Node>> orderProperty() {
+ return order;
+ }
+
+ private void setOrder(Comparator c) {
+ order.set(c);
+ }
+
+ private Comparator<TreeTable.Node> getOrder() {
+ return order.get();
+ }
+
+ MetadataNode(TreeTable treeTable) {
+ this();
+ setTreeTable(treeTable);
+ }
+
+ private MetadataNode() {
+ createTableColumns();
+ setShowRoot(false);
+ setColumnResizePolicy(CONSTRAINED_RESIZE_POLICY);
+ expandNodeProperty.addListener(ob -> expandNodes(getRoot()));
+ }
+
+ /**
+ * Creates {@link TableColumn}s for name, identifier, value valueastext, but
+ * doesnt add them to the table. These columns can later be added according
+ * what all is contained by the TreeTable.
+ */
+ private void createTableColumns() {
+ //NAME column
+ nameColumn = new TreeTableColumn<>(TableColumn.NAME.getHeader().toString());
+ nameColumn.setCellValueFactory((param) -> {
+ CharSequence value = param.getValue().getValue().getValue(TableColumn.NAME);
+ return new SimpleStringProperty(Objects.toString(value, ""));
+ });
+
+ //TEXT column
+ textColumn = new TreeTableColumn<>(TableColumn.VALUE_AS_TEXT.getHeader().toString());
+ textColumn.setCellValueFactory((param) -> {
+ CharSequence value = param.getValue().getValue().getValue(TableColumn.VALUE_AS_TEXT);
+ return new SimpleStringProperty(Objects.toString(value, ""));
+ });
+
+ //VALUE column
+ valueColumn = new TreeTableColumn<>(TableColumn.VALUE.getHeader().toString());
+ valueColumn.setCellValueFactory((param) -> {
+ TreeTable.Node value = param.getValue().getValue();
+ SimpleObjectProperty ret = new SimpleObjectProperty(value.getValue(TableColumn.VALUE));
+ if (value.getValue(TableColumn.NAME).toString().equals("Reference system info")) {
+ ReferenceSystem newVal = (ReferenceSystem) ret.getValue();
+ ret.setValue(newVal.getName());
+ }
+ return ret;
+ });
+ }
+
+ private TreeTable getTreeTable() {
+ return treeTable;
+ }
+
+ private void setTreeTable(TreeTable treeTable) {
+ this.treeTable = treeTable;
+ if (treeTable == null) {
+ setRoot(null);
+ return;
+ }
+
+ List<TableColumn<?>> columns = treeTable.getColumns();
+ if (columns.contains(TableColumn.NAME)) {
+ if (nameColumn.getTreeTableView() == null) {
+ getColumns().add(nameColumn);
+ }
+ } else {
+ getColumns().remove(nameColumn);
+ }
+ if (columns.contains(TableColumn.VALUE)) {
+ if (valueColumn.getTreeTableView() == null) {
+ getColumns().add(valueColumn);
+ }
+ } else {
+ getColumns().remove(valueColumn);
+ }
+ if (columns.contains(TableColumn.VALUE_AS_TEXT)) {
+ if (textColumn.getTreeTableView() == null) {
+ getColumns().add(textColumn);
+ }
+ } else {
+ getColumns().remove(textColumn);
+ }
+ TreeItem<TreeTable.Node> rootItem = new TreeItem<>(treeTable.getRoot());
+ setRoot(rootItem);
+ rootItem.setExpanded(true);
+ updateRoot();
+ }
+
+ private void updateRoot() {
+ getRoot().getChildren().clear();
+ createTreeItems(getRoot(), treeTable.getRoot().getChildren());
+ }
+
+ private void createTreeItems(TreeItem<TreeTable.Node> rootItem, Collection<TreeTable.Node> children) {
+ for (TreeTable.Node node : children) {
+ TreeItem parent = rootItem;
+ //include this node in the tree table view?
+ if (getCreateTreeItemForNode().test(node)) {
+ parent = new TreeItem(node);
+ parent.setExpanded(getExpandNode().test(node));
+ rootItem.getChildren().add(parent);
+ }
+ if (!node.isLeaf()) {
+ createTreeItems(parent, node.getChildren());
+ }
+ if (parent.getChildren().size() > 1) {
+ Comparator<TreeItem<TreeTable.Node>> cp = Comparator.comparing(TreeItem<TreeTable.Node>::getValue, getOrder());
+ parent.getChildren().sort(cp);
+ }
+ }
+ }
+}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataOverview.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataOverview.java
new file mode 100644
index 0000000..594a59d
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/MetadataOverview.java
@@ -0,0 +1,432 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.gui.metadata;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import static java.text.NumberFormat.getIntegerInstance;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import static javafx.event.ActionEvent.ACTION;
+import javafx.event.Event;
+import javafx.geometry.Insets;
+import javafx.scene.Node;
+import javafx.scene.canvas.Canvas;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.Label;
+import javafx.scene.control.TitledPane;
+import javafx.scene.control.Toggle;
+import javafx.scene.control.ToggleButton;
+import javafx.scene.control.ToggleGroup;
+import javafx.scene.image.Image;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.HBox;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.StackPane;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import org.apache.sis.metadata.iso.DefaultMetadata;
+import org.apache.sis.metadata.iso.citation.DefaultIndividual;
+import org.apache.sis.metadata.iso.citation.DefaultOrganisation;
+import org.apache.sis.metadata.iso.spatial.DefaultGridSpatialRepresentation;
+import static org.apache.sis.util.iso.Types.getCodeTitle;
+import org.opengis.metadata.Metadata;
+import org.opengis.metadata.citation.CitationDate;
+import org.opengis.metadata.citation.Party;
+import org.opengis.metadata.citation.Responsibility;
+import org.opengis.metadata.extent.Extent;
+import org.opengis.metadata.extent.GeographicBoundingBox;
+import org.opengis.metadata.extent.GeographicDescription;
+import org.opengis.metadata.extent.GeographicExtent;
+import org.opengis.metadata.identification.DataIdentification;
+import org.opengis.metadata.identification.Identification;
+import org.opengis.metadata.identification.TopicCategory;
+import org.opengis.metadata.spatial.Dimension;
+import org.opengis.metadata.spatial.SpatialRepresentation;
+import org.opengis.metadata.spatial.SpatialRepresentationType;
+import org.opengis.referencing.ReferenceSystem;
+import org.opengis.util.InternationalString;
+
+/**
+ * Metadata Viewer.
+ *
+ * @author Smaniotto Enzo
+ */
+class MetadataOverview extends StackPane {
+
+ private final Metadata METADATA;
+ private final String FROMFILE;
+ private final Locale LOCALE = Locale.getDefault();
+
+ public MetadataOverview(DefaultMetadata _md, String _fromFile) {
+ METADATA = _md;
+ FROMFILE = _fromFile;
+ VBox root = new VBox();
+ root.setStyle("-fx-background-color: linear-gradient(to bottom right, #aeb7c4, #fafafa);");
+
+ // Creation of the differents views.
+ VBox summaryView = createSummaryView();
+ DefaultMetadata md = (DefaultMetadata) METADATA;
+ MetadataNode advancedView = new MetadataNode(md.asTreeTable());
+ advancedView.setMaxHeight(Double.MAX_VALUE);
+ VBox.setVgrow(advancedView, Priority.ALWAYS);
+
+ // Create and configure view selection buttons.
+ ToggleGroup buttonGroup = new ToggleGroup();
+ ToggleButton tb1 = new ToggleButton("Summary");
+ ToggleButton tb2 = new ToggleButton("Advanced");
+ tb1.setStyle("-fx-text-fill: white; -fx-font-family: Arial Narrow;-fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); -fx-padding: 0.8em;");
+ tb2.setStyle("-fx-text-fill: white; -fx-font-family: Arial Narrow;-fx-font-weight: bold; -fx-background-color: linear-gradient(#61a2b1, #2A5058); -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0.6) , 5, 0.0 , 0 , 1 ); -fx-padding: 0.8em;");
+
+ tb1.setToggleGroup(buttonGroup);
+ tb1.setSelected(true);
+ tb1.setDisable(true);
+ tb2.setToggleGroup(buttonGroup);
+ buttonGroup.selectToggle(tb1);
+ buttonGroup.selectedToggleProperty().addListener((ObservableValue<? extends Toggle> observable, Toggle oldValue, Toggle newValue) -> {
+ if (tb2.isSelected()) {
+ tb2.setDisable(true);
+ root.getChildren().remove(summaryView);
+ root.getChildren().add(advancedView);
+ tb1.setDisable(false);
+ } else {
+ tb1.setDisable(true);
+ root.getChildren().add(summaryView);
+ root.getChildren().remove(advancedView);
+ tb2.setDisable(false);
+ }
+ });
+
+ HBox toggleGroupLayout = new HBox();
+ toggleGroupLayout.getChildren().addAll(tb1, tb2);
+ toggleGroupLayout.setPadding(new Insets(0, 0, 10, 0));
+
+ root.getChildren().add(toggleGroupLayout);
+ root.getChildren().add(summaryView);
+
+ this.getChildren().add(root);
+ }
+
+ private VBox createSummaryView() {
+ VBox vb = new VBox();
+ TitledPane idPane = new TitledPane("Identification info", createIdGridPane());
+ TitledPane spatialPane = new TitledPane("Spatial representation", createSpatialGridPane());
+ vb.getChildren().add(idPane);
+ vb.getChildren().add(spatialPane);
+ return vb;
+ }
+
+ private GridPane createIdGridPane() {
+ GridPane gp = new GridPane();
+ gp.setHgap(10.00);
+ int j = 0, k = 1;
+
+ HashMap<String, Identification> m = new HashMap<>();
+ ComboBox comboBox = createComboBox(m);
+ comboBox.setStyle("-fx-font-weight: bold; -fx-font-size: 2em;");
+ if (!comboBox.isVisible()) {
+ Label la = new Label(comboBox.getValue().toString());
+ la.setStyle("-fx-font-weight: bold; -fx-font-size: 2em;");
+ gp.add(la, j, k++, 2, 1);
+ } else {
+ gp.add(comboBox, j, k++, 2, 1);
+ }
+
+ // Show author information.
+ Collection<? extends Responsibility> contacts = this.METADATA.getContacts();
+ if (!contacts.isEmpty()) {
+ Responsibility contact = contacts.iterator().next();
+ Collection<? extends Party> parties = contact.getParties();
+ if (!parties.isEmpty()) {
+ Party party = parties.iterator().next();
+ if (party.getName() != null) {
+ Label partyType = new Label("Party");
+ Label partyValue = new Label(party.getName().toString());
+ if (party instanceof DefaultOrganisation) {
+ partyType.setText("Organisation");
+ } else if (party instanceof DefaultIndividual) {
+ partyType.setText("Author");
+ }
+ gp.add(partyType, j, k);
+ gp.add(partyValue, ++j, k++);
+ j = 0;
+ }
+ }
+ }
+
+ GridPane gpi = new GridPane();
+ gpi.setHgap(10.00);
+
+ comboBox.setOnAction(e -> {
+ gpi.getChildren().clear();
+ Identification id = m.get(comboBox.getValue().toString());
+
+ if (comboBox.getValue().toString().equals("No data to show")) {
+ return;
+ }
+
+ // Show the abstract or the credit, the topic category, the creation date, the type of data, the representation system info and also the geographical area.
+ Object ab = id.getAbstract();
+ if (ab != null) {
+ InternationalString abs = (InternationalString) ab;
+ Label crd = new Label("Abstract");
+ Label crdValue = new Label(abs.toString(LOCALE));
+ gpi.add(crd, 0, 1);
+ gpi.add(crdValue, 1, 1);
+ } else {
+ Collection<? extends InternationalString> credits = id.getCredits();
+ if (!credits.isEmpty()) {
+ InternationalString credit = credits.iterator().next();
+ Label crd = new Label("Credit");
+ Label crdValue = new Label(credit.toString());
+ gpi.add(crd, 0, 1);
+ gpi.add(crdValue, 1, 1);
+ }
+ }
+
+ Collection<TopicCategory> tcs = id.getTopicCategories();
+ if (!tcs.isEmpty()) {
+ TopicCategory tc = tcs.iterator().next();
+ Label topicC = new Label("Topic Category");
+ Label topicValue = new Label(tc.toString());
+ gpi.add(topicC, 0, 2);
+ gpi.add(topicValue, 1, 2);
+ }
+
+ if (!id.getCitation().getDates().isEmpty()) {
+ CitationDate dateAndType = id.getCitation().getDates().iterator().next();
+ DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM, LOCALE);
+ String dateStr = dateFormat.format(dateAndType.getDate());
+ String s = dateAndType.getDateType().toString();
+ s = s.replace("DateType[", "");
+ s = s.replace("]", "");
+ Label dt = new Label("Date type: " + s.toLowerCase());
+ Label dtValue = new Label(dateStr);
+ gpi.add(dt, 0, 3);
+ gpi.add(dtValue, 1, 3);
+ }
+
+ if (id instanceof DataIdentification) {
+ Label topicC = new Label("Object type");
+ Label topicValue = new Label("Data");
+ gpi.add(topicC, 0, 4);
+ gpi.add(topicValue, 1, 4);
+ } else {
+ Label topicC = new Label("Object type");
+ Label topicValue = new Label("Service");
+ gpi.add(topicC, 0, 4);
+ gpi.add(topicValue, 1, 4);
+ }
+
+ Collection<SpatialRepresentationType> spatialRepresentationTypes = id.getSpatialRepresentationTypes();
+ Iterator<SpatialRepresentationType> its = spatialRepresentationTypes.iterator();
+ String typeList = "Spatial representation type: ";
+ while (its.hasNext()) {
+ SpatialRepresentationType spatialRepresentationType = its.next();
+ typeList += spatialRepresentationType.toString().toLowerCase(LOCALE).replace("spatialrepresentationtype[", "").replace(']', '\0') + ", ";
+ }
+ if (!typeList.equals("Spatial representation type: ")) {
+ Label list = new Label(typeList.substring(0, typeList.length() - 2));
+ gpi.add(list, 0, 5, 2, 1);
+ }
+
+ Collection<? extends Extent> exs = id.getExtents();
+ if (!exs.isEmpty()) {
+ Extent ex = exs.iterator().next();
+ Collection<? extends GeographicExtent> ges = ex.getGeographicElements();
+ Iterator<? extends GeographicExtent> it = ges.iterator();
+ while (it.hasNext()) {
+ GeographicExtent ge = it.next();
+ Label geoEx = new Label("Zone");
+ Label geoExValue = new Label(ge.toString());
+ if (ge instanceof GeographicBoundingBox) {
+ geoEx.setText("");
+ GeographicBoundingBox gbd = (GeographicBoundingBox) ge;
+ geoExValue.setText("");
+ Canvas c = createMap(gbd.getNorthBoundLatitude(), gbd.getEastBoundLongitude(), gbd.getSouthBoundLatitude(), gbd.getWestBoundLongitude());
+ if (c != null) {
+ gpi.add(c, 0, 6, 2, 1);
+ } else {
+ geoEx.setText("Impossible to load the map.");
+ gpi.add(geoEx, 0, 6);
+ gpi.add(geoExValue, 1, 6);
+ }
+ } else if (ge instanceof GeographicDescription) {
+ geoEx.setText("Geographic description");
+ GeographicDescription gd = (GeographicDescription) ge;
+ geoExValue.setText(gd.getGeographicIdentifier().getCode());
+ }
+ }
+ }
+
+ });
+
+ Event.fireEvent(comboBox, new Event(ACTION));
+ gp.add(gpi, j, k++, 2, 1);
+
+ int ind = 0;
+ for (Node n : gp.getChildren()) {
+ if (ind++ != 0) {
+ n.setStyle("-fx-padding: 0 83 10 0;");
+ } else {
+ n.setStyle("-fx-padding: 0 0 10 0; -fx-font-weight: bold; -fx-font-size: 2em;");
+ }
+ }
+
+ for (Node n : gpi.getChildren()) {
+ n.setStyle("-fx-padding: 0 0 10 0;");
+ }
+
+ return gp;
+ }
+
+ private Canvas createMap(double north, double east, double south, double west) {
+ Canvas can = new Canvas();
+ final File file = new File("/home/admin/Documents/WorldMap360*180.png");
+ Image image;
+ String localUrl;
+ try {
+ localUrl = file.toURI().toURL().toString();
+ image = new Image(localUrl);
+ } catch (MalformedURLException ex) {
+ Logger.getLogger(MetadataOverview.class.getName()).log(Level.SEVERE, null, ex);
+ return null;
+ }
+ if (image.errorProperty().getValue()) {
+ return null;
+ }
+
+ double height = image.getHeight();
+ double width = image.getWidth();
+
+ can.setHeight(height);
+ can.setWidth(width);
+ can.getGraphicsContext2D().drawImage(image, 0, 0, width, height);
+ can.getGraphicsContext2D().setStroke(Color.DARKBLUE);
+ can.getGraphicsContext2D().setGlobalAlpha(0.1);
+ double x = west + width / 2, y = height / 2 - north, w = east - west, h = north - south;
+ can.getGraphicsContext2D().strokeRect(x, y, w, h);
+ final double minRectSize = 6.0;
+ if (w < minRectSize) {
+ double difX = minRectSize - w;
+ x -= difX / 2;
+ w = minRectSize;
+ }
+ if (h < minRectSize) {
+ double difY = minRectSize - h;
+ y -= difY / 2;
+ h = minRectSize;
+ }
+ can.getGraphicsContext2D().fillRect(x, y, w, h);
+ can.getGraphicsContext2D().setGlobalAlpha(1.0);
+ can.getGraphicsContext2D().setStroke(Color.DARKBLUE);
+ can.getGraphicsContext2D().strokeRect(x, y, w, h);
+
+ return can;
+ }
+
+ private GridPane createSpatialGridPane() {
+ GridPane gp = new GridPane();
+ gp.setHgap(10.00);
+ gp.setVgap(10.00);
+ int j = 0, k = 1;
+
+ Collection<? extends ReferenceSystem> referenceSystemInfos = METADATA.getReferenceSystemInfo();
+ if (!referenceSystemInfos.isEmpty()) {
+ ReferenceSystem referenceSystemInfo = referenceSystemInfos.iterator().next();
+ Label rsiValue = new Label("Reference system infos: " + referenceSystemInfo.getName().toString());
+ gp.add(rsiValue, j, k++);
+ }
+
+ Collection<? extends SpatialRepresentation> sris = this.METADATA.getSpatialRepresentationInfo();
+ if (sris.isEmpty()) {
+ Label noData = new Label("No data found.");
+ noData.setStyle("-fx-text-fill: red;");
+ gp.add(noData, ++j, k++, 2, 1);
+ return gp;
+ }
+ NumberFormat numberFormat = getIntegerInstance(LOCALE);
+ for (SpatialRepresentation sri : sris) {
+ String currentValue = "• ";
+ if (sri instanceof DefaultGridSpatialRepresentation) {
+ DefaultGridSpatialRepresentation sr = (DefaultGridSpatialRepresentation) sri;
+
+ Iterator<? extends Dimension> it = sr.getAxisDimensionProperties().iterator();
+ while (it.hasNext()) {
+ Dimension dim = it.next();
+ currentValue += numberFormat.format(dim.getDimensionSize()) + " " + getCodeTitle(dim.getDimensionName()) + " * ";
+ }
+ currentValue = currentValue.substring(0, currentValue.length() - 3);
+ Label spRep = new Label(currentValue);
+ gp.add(spRep, j, k++, 2, 1);
+ if (sr.getCellGeometry() != null) {
+ Label cellGeo = new Label("Cell geometry:");
+ Label cellGeoValue = new Label(getCodeTitle(sr.getCellGeometry()).toString());
+ gp.add(cellGeo, j, k);
+ gp.add(cellGeoValue, ++j, k++);
+ j = 0;
+ }
+ }
+ }
+ return gp;
+ }
+
+ private ComboBox createComboBox(HashMap<String, Identification> m) {
+ ComboBox cb = new ComboBox();
+ Collection<? extends Identification> ids = this.METADATA.getIdentificationInfo();
+ ObservableList<String> options = FXCollections.observableArrayList();
+ int i = 1;
+ if (ids.size() > 1) {
+ for (Identification id : ids) {
+ String currentName;
+ if (id.getCitation() != null) {
+ currentName = id.getCitation().getTitle().toString();
+ } else {
+ currentName = Integer.toString(i);
+ }
+ options.add(currentName);
+ m.put(currentName, id);
+ }
+ cb.setItems(options);
+ cb.setValue(ids.iterator().next().getCitation().getTitle().toString());
+ } else if (ids.size() == 1) {
+ if (ids.iterator().next().getCitation() != null) {
+ m.put(ids.iterator().next().getCitation().getTitle().toString(), ids.iterator().next());
+ cb.setValue(ids.iterator().next().getCitation().getTitle().toString());
+ cb.setVisible(false);
+ }
+ } else {
+ cb.setValue("No data to show");
+ cb.setVisible(false);
+ }
+ return cb;
+ }
+
+ public final String getFromFile() {
+ return FROMFILE;
+ }
+
+}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
new file mode 100644
index 0000000..2b5511d
--- /dev/null
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
@@ -0,0 +1,282 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.gui.metadata;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javafx.event.Event;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ContextMenu;
+import javafx.scene.control.Label;
+import javafx.scene.control.MenuItem;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeView;
+import javafx.scene.input.DataFormat;
+import javafx.scene.input.Dragboard;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.input.TransferMode;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.VBox;
+import javafx.scene.paint.Color;
+import org.apache.sis.internal.storage.folder.FolderStoreProvider;
+import org.apache.sis.metadata.iso.DefaultMetadata;
+import org.apache.sis.storage.Aggregate;
+import org.apache.sis.storage.DataStore;
+import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.storage.DataStores;
+import org.apache.sis.storage.Resource;
+import org.apache.sis.storage.StorageConnector;
+
+
+/**
+ * Show resources available in data files.
+ *
+ * @author Smaniotto Enzo
+ */
+public class ResourceView {
+
+ private final TreeItem<Label> root = new TreeItem<>(new Label("Files"));
+ private final TreeView<Label> resources = new TreeView<>(root);
+ public final BorderPane pane = new BorderPane();
+ private final Map<Label, TreeItem<?>> labelToItem = new HashMap<>();
+
+ // TODO: What is that?
+ private final List<String> LABINTRV = new ArrayList<>();
+
+ private Label sauvLabel, parent;
+
+ public ResourceView() {
+ pane.setStyle("-fx-background-color: linear-gradient(to bottom right, #aeb7c4, #fafafa);");
+ final VBox dragTarget = new VBox();
+
+ root.setExpanded(true);
+ resources.setStyle("-fx-background-color: rgba(77, 201, 68, 0.4);");
+ resources.setShowRoot(false);
+
+ resources.setOnDragOver(event -> {
+ if (event.getGestureSource() != dragTarget && event.getDragboard().hasFiles()) {
+ event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
+ }
+ event.consume();
+ });
+ resources.setOnDragDropped(event -> {
+ Dragboard db = event.getDragboard();
+ boolean success = false;
+
+ File firstFile = db.getFiles().get(0);
+ if (firstFile.isDirectory()) {
+ openDirectory(firstFile);
+ success = true;
+ } else {
+ if (db.hasFiles()) {
+ success = true;
+ }
+ List<?> fileList = (List<?>) db.getContent(DataFormat.FILES);
+ for (Object item : fileList) {
+ File f = (File) item;
+ openFile(f);
+ }
+ }
+ event.setDropCompleted(success);
+ event.consume();
+ });
+
+ pane.setLeft(resources);
+ pane.setCenter(null);
+ }
+
+ private void addContextMenu(Label lab) {
+ MenuItem close = new MenuItem("Close");
+ close.setOnAction(ac -> {
+ root.getChildren().remove(labelToItem.get(lab));
+ labelToItem.remove(lab);
+ LABINTRV.remove(lab.getId());
+ if (pane.getCenter() != null) {
+ if (lab.getId().equals(((MetadataOverview) pane.getCenter()).getFromFile())) {
+ pane.setCenter(null);
+ }
+ }
+ });
+ ContextMenu cm = new ContextMenu(close);
+ lab.setContextMenu(cm);
+ }
+
+ private void setOnClick(Label lab) {
+ addContextMenu(lab);
+ lab.setOnMouseClicked(click -> {
+ if (click.getButton() == MouseButton.PRIMARY) {
+ if (sauvLabel != null) {
+ sauvLabel.setTextFill(Color.BLACK);
+ }
+ addMetadatPanel(lab.getId());
+ sauvLabel = lab;
+ lab.setTextFill(Color.RED);
+ }
+ });
+ }
+
+ private boolean checkMetaPanel(String filePath) {
+ MetadataOverview meta;
+ try {
+ DataStore ds = DataStores.open(filePath);
+ meta = new MetadataOverview(new DefaultMetadata(ds.getMetadata()), filePath);
+ return true;
+ } catch (DataStoreException e) {
+ final Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("An error was occur");
+ Label lab = new Label(e.getMessage());
+ lab.setWrapText(true);
+ lab.setMaxWidth(650);
+ VBox vb = new VBox();
+ vb.getChildren().add(lab);
+ alert.getDialogPane().setContent(vb);
+ alert.show();
+ return false;
+ }
+ }
+
+ private void addMetadatPanel(String filePath) {
+ MetadataOverview meta;
+ try {
+ DataStore ds = DataStores.open(filePath);
+ meta = new MetadataOverview(new DefaultMetadata(ds.getMetadata()), filePath);
+ pane.setCenter(meta);
+ } catch (DataStoreException e) {
+ final Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("An error was occur");
+ Label lab = new Label(e.getMessage());
+ lab.setWrapText(true);
+ lab.setMaxWidth(650);
+ VBox vb = new VBox();
+ vb.getChildren().add(lab);
+ alert.getDialogPane().setContent(vb);
+ alert.show();
+ }
+ }
+
+ private void addMetadatPanel(Resource res, String filePath) {
+ MetadataOverview meta;
+ try {
+ meta = new MetadataOverview(((DefaultMetadata) res.getMetadata()), filePath);
+ pane.setCenter(meta);
+ } catch (DataStoreException e) {
+ final Alert alert = new Alert(Alert.AlertType.ERROR);
+ alert.setTitle("An error was occur");
+ Label lab = new Label(e.getMessage());
+ lab.setWrapText(true);
+ lab.setMaxWidth(650);
+ VBox vb = new VBox();
+ vb.getChildren().add(lab);
+ alert.getDialogPane().setContent(vb);
+ alert.show();
+ }
+ }
+
+ public void openFile(File f) {
+ if (checkMetaPanel(f.getAbsolutePath())) {
+ Label label = new Label(f.getName());
+ label.setId(f.getAbsolutePath());
+ if (LABINTRV.contains(f.getAbsolutePath())) {
+ for (Label elem : labelToItem.keySet()) {
+ if (elem.getId().equals(f.getAbsolutePath())) {
+ Event.fireEvent(elem, new MouseEvent(MouseEvent.MOUSE_CLICKED, 0, 0, 0, 0, MouseButton.PRIMARY, 1, true, true, true, true, true, true, true, true, true, true, null));
+ }
+ }
+ } else {
+ setOnClick(label);
+ TreeItem<Label> tItem = new TreeItem<>(label);
+ labelToItem.put(label, tItem);
+ LABINTRV.add(f.getAbsolutePath());
+ root.getChildren().add(tItem);
+ }
+ }
+ }
+
+ public void openDirectory(File firstFile) {
+ if (!LABINTRV.contains("[Aggregate] " + firstFile.getName())) {
+ DataStore resource = null;
+ try {
+ resource = FolderStoreProvider.INSTANCE.open(new StorageConnector(firstFile));
+ } catch (DataStoreException ex) {
+ ex.getMessage();
+ }
+ if (resource instanceof Aggregate) {
+ parent = new Label("[Aggregate] " + firstFile.getName());
+ parent.setId(firstFile.getAbsolutePath());
+ Label cl = parent;
+ parent.setOnMouseClicked(click -> {
+ if (click.getButton() == MouseButton.SECONDARY) {
+ parent = cl;
+ }
+ });
+ TreeItem<Label> ti = new TreeItem<>(parent);
+
+ MenuItem close = new MenuItem("Close");
+ close.setOnAction(ac -> {
+ root.getChildren().remove(labelToItem.get(cl));
+ labelToItem.remove(cl);
+ LABINTRV.remove(parent.getText());
+ if (pane.getCenter() != null) {
+ if (parent.getId().equals(((MetadataOverview) pane.getCenter()).getFromFile())) {
+ pane.setCenter(null);
+ }
+ }
+ });
+ ContextMenu cm = new ContextMenu(close);
+ parent.setContextMenu(cm);
+
+ try {
+ for (Resource res : ((Aggregate) resource).components()) {
+ Label lab = new Label(res.toString());
+ lab.setOnMouseClicked(click -> {
+ if (click.getButton() == MouseButton.PRIMARY) {
+ if (sauvLabel != null) {
+ sauvLabel.setTextFill(Color.BLACK);
+ }
+ addMetadatPanel(res, cl.getId());
+ sauvLabel = lab;
+ lab.setTextFill(Color.RED);
+ }
+ });
+ TreeItem<Label> tiChild = new TreeItem<>(lab);
+ ti.getChildren().add(tiChild);
+ }
+ } catch (DataStoreException ex) {
+ System.out.println(ex.getMessage()); // TODO: NO!!!!!
+ }
+ root.getChildren().add(ti);
+ LABINTRV.add(parent.getText());
+ labelToItem.put(parent, ti);
+ }
+ } else { // If the file is already open.
+ if (sauvLabel != null) {
+ sauvLabel.setTextFill(Color.BLACK);
+ }
+ root.getChildren().forEach(elem -> {
+ if (elem.getValue().getText().equals("[Aggregate] " + firstFile.getName())) {
+ sauvLabel = elem.getValue();
+ elem.getValue().setTextFill(Color.RED);
+ }
+ });
+ pane.setCenter(null);
+ }
+ }
+}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 04/31: Initial review of GUI main class (localization,
file filters).
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit a1f39a9dafc5db1889abf9ae1db1a52a081298f8
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sun May 27 17:50:15 2018 +0000
Initial review of GUI main class (localization, file filters).
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832343 13f79535-47bb-0310-9956-ffa450edef68
---
.../src/main/java/org/apache/sis/gui/Main.java | 116 +++++++++++++++++----
.../org/apache/sis/gui/metadata/ResourceView.java | 64 +++++++++---
.../org/apache/sis/gui/referencing/CRSChooser.java | 3 +-
.../org/apache/sis/gui/referencing/CRSTable.java | 6 +-
.../org/apache/sis/internal/gui/FXUtilities.java | 7 +-
.../org/apache/sis/internal/gui/Resources.java | 78 ++++----------
.../apache/sis/internal/gui/Resources.properties | 7 +-
.../sis/internal/gui/Resources_fr.properties | 7 +-
.../org/apache/sis/gui/referencing/CRSChooser.fxml | 2 +-
.../org/apache/sis/util/resources/Vocabulary.java | 17 ++-
.../sis/util/resources/Vocabulary.properties | 3 +
.../sis/util/resources/Vocabulary_fr.properties | 3 +
.../sis/internal/storage/StoreUtilities.java | 2 +-
13 files changed, 197 insertions(+), 118 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
index a036ba7..6b19666 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
@@ -16,7 +16,11 @@
*/
package org.apache.sis.gui;
-import java.io.File;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
@@ -29,10 +33,19 @@ import javafx.scene.layout.BorderPane;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.apache.sis.gui.metadata.ResourceView;
+import org.apache.sis.internal.gui.Resources;
+import org.apache.sis.internal.storage.Capability;
+import org.apache.sis.internal.storage.StoreMetadata;
+import org.apache.sis.storage.DataStoreProvider;
+import org.apache.sis.storage.DataStores;
+import org.apache.sis.util.ArraysExt;
+import org.apache.sis.util.resources.Vocabulary;
/**
* Entry point for Apache SIS application.
+ * Current implementation shows a {@link ResourceView} on which user can drop the files to open.
+ * The content shown by this {@code Main} class may change in any future Apache SIS version.
*
* @author Smaniotto Enzo
* @author Martin Desruisseaux (Geomatys)
@@ -48,11 +61,19 @@ public class Main extends Application {
/**
* The main content of this application. For now this is the metadata viewer.
- * In a future version it will be another component.
+ * In a future version it may be another component.
*/
private ResourceView content;
/**
+ * The file filters to use in the dialog box shown by the "File" ▶ "Open" menu.
+ * This array is created when first needed.
+ *
+ * @see #createFileFilters()
+ */
+ private FileChooser.ExtensionFilter[] openFilters;
+
+ /**
* Creates a new Apache SIS application.
*/
public Main() {
@@ -67,22 +88,25 @@ public class Main extends Application {
@Override
public void start(final Stage window) {
this.window = window;
+ final Vocabulary vocabulary = Vocabulary.getResources((Locale) null);
/*
- * Configure the menu bar.
+ * Configure the menu bar. For most menu item, the action is to invoke a method
+ * of the same name in this application class (e.g. open()).
*/
final MenuBar menus = new MenuBar();
- final Menu file = new Menu("File"); // TODO: localize
- menus.getMenus().add(file);
+ final Menu file = new Menu(vocabulary.getString(Vocabulary.Keys.File));
+ {
+ final MenuItem open = new MenuItem(vocabulary.getMenuLabel(Vocabulary.Keys.Open));
+ open.setAccelerator(KeyCombination.keyCombination("Shortcut+O"));
+ open.setOnAction(e -> open());
- final MenuItem open = new MenuItem("Open…"); // TODO: localize
- open.setAccelerator(KeyCombination.keyCombination("Shortcut+O"));
- open.setOnAction(e -> open());
-
- final MenuItem exit = new MenuItem("Exit"); // TODO: localize
- exit.setOnAction(e -> Platform.exit());
- file.getItems().addAll(open, new SeparatorMenuItem(), exit);
+ final MenuItem exit = new MenuItem(vocabulary.getString(Vocabulary.Keys.Exit));
+ exit.setOnAction(e -> Platform.exit());
+ file.getItems().addAll(open, new SeparatorMenuItem(), exit);
+ }
+ menus.getMenus().add(file);
/*
- *
+ * Set the main content and show.
*/
content = new ResourceView();
final BorderPane pane = new BorderPane();
@@ -97,19 +121,65 @@ public class Main extends Application {
}
/**
- * Invoked when the user selected "File / open" menu.
+ * Creates the file filters for the dialog box to shown in "File" ▶ "Open" and "File" ▶ "Save" menus.
+ *
+ * @todo Iterate only over the classes in JDK9, without initializing the providers.
*/
- private void open() {
- final FileChooser fileChooser = new FileChooser();
- fileChooser.setTitle("Open data file"); // TODO: localize
- File fileByChooser = fileChooser.showOpenDialog(window);
- if (fileByChooser != null) {
- if (fileByChooser.isDirectory()) {
- content.openDirectory(fileByChooser);
- } else {
- content.openFile(fileByChooser);
+ private void createFileFilters() {
+ final Resources res = Resources.getInstance();
+ final Set<String> allSuffixes = new LinkedHashSet<>();
+ final List<FileChooser.ExtensionFilter> openFilters = new ArrayList<>();
+// final List<FileChooser.ExtensionFilter> saveFilters = new ArrayList<>();
+ /*
+ * Add an "All files (*.*)" filter only for the Open action.
+ * The Save action will need to specify a specific filter.
+ */
+ openFilters.add(new FileChooser.ExtensionFilter(res.getString(Resources.Keys.AllFiles), "*.*"));
+ for (DataStoreProvider provider : DataStores.providers()) {
+ final StoreMetadata md = provider.getClass().getAnnotation(StoreMetadata.class);
+ if (md != null) {
+ final String[] suffixes = md.fileSuffixes();
+ if (suffixes.length != 0) {
+ final boolean canOpen = ArraysExt.contains(md.capabilities(), Capability.READ);
+// final boolean canSave = ArraysExt.contains(md.capabilities(), Capability.WRITE);
+ for (int i=0; i < suffixes.length; i++) {
+ final String fs = "*.".concat(suffixes[i]);
+ suffixes[i] = fs;
+ if (canOpen) {
+ allSuffixes.add(fs);
+ }
+ }
+ final FileChooser.ExtensionFilter f = new FileChooser.ExtensionFilter(
+ md.formatName() + " (" + suffixes[0] + ')', suffixes);
+ if (canOpen) openFilters.add(f);
+// if (canSave) saveFilters.add(f);
+ }
}
}
+ /*
+ * Add a filter for all geospatial files in second position, after "All files" and before
+ * the filters for specific formats. This will be the default filter for the "Open" action.
+ */
+ openFilters.add(1, new FileChooser.ExtensionFilter(res.getString(Resources.Keys.GeospatialFiles),
+ allSuffixes.toArray(new String[allSuffixes.size()])));
+ this.openFilters = openFilters.toArray(new FileChooser.ExtensionFilter[openFilters.size()]);
+// this.saveFilters = saveFilters.toArray(new FileChooser.ExtensionFilter[saveFilters.size()]);
+ }
+
+ /**
+ * Invoked when the user selects "File" ▶ "Open" menu.
+ * Users can select an arbitrary amount of files or directories.
+ * The effect is the same as dragging the files in the "resources tree" window.
+ */
+ private void open() {
+ if (openFilters == null) {
+ createFileFilters();
+ }
+ final FileChooser chooser = new FileChooser();
+ chooser.setTitle(Resources.format(Resources.Keys.OpenDataFile));
+ chooser.getExtensionFilters().addAll(openFilters);
+ chooser.setSelectedExtensionFilter(openFilters[1]); // TODO: remember last filter used.
+ content.open(chooser.showOpenMultipleDialog(window));
}
/**
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
index 2b5511d..72571a0 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
@@ -21,7 +21,9 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import javafx.collections.ObservableList;
import javafx.event.Event;
+import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.Label;
@@ -33,7 +35,7 @@ import javafx.scene.input.Dragboard;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
-import javafx.scene.layout.BorderPane;
+import javafx.scene.control.SplitPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import org.apache.sis.internal.storage.folder.FolderStoreProvider;
@@ -54,8 +56,7 @@ import org.apache.sis.storage.StorageConnector;
public class ResourceView {
private final TreeItem<Label> root = new TreeItem<>(new Label("Files"));
- private final TreeView<Label> resources = new TreeView<>(root);
- public final BorderPane pane = new BorderPane();
+ public final SplitPane pane = new SplitPane();
private final Map<Label, TreeItem<?>> labelToItem = new HashMap<>();
// TODO: What is that?
@@ -68,6 +69,7 @@ public class ResourceView {
final VBox dragTarget = new VBox();
root.setExpanded(true);
+ final TreeView<Label> resources = new TreeView<>(root);
resources.setStyle("-fx-background-color: rgba(77, 201, 68, 0.4);");
resources.setShowRoot(false);
@@ -98,9 +100,25 @@ public class ResourceView {
event.setDropCompleted(success);
event.consume();
});
+ pane.getItems().add(resources);
+ }
- pane.setLeft(resources);
- pane.setCenter(null);
+ private MetadataOverview getContent() {
+ final ObservableList<Node> items = pane.getItems();
+ if (items.size() >= 2) {
+ return (MetadataOverview) items.get(1);
+ } else {
+ return null;
+ }
+ }
+
+ private void setContent(final MetadataOverview content) {
+ final ObservableList<Node> items = pane.getItems();
+ if (items.size() >= 2) {
+ items.set(1, content);
+ } else {
+ items.add(content);
+ }
}
private void addContextMenu(Label lab) {
@@ -109,9 +127,10 @@ public class ResourceView {
root.getChildren().remove(labelToItem.get(lab));
labelToItem.remove(lab);
LABINTRV.remove(lab.getId());
- if (pane.getCenter() != null) {
- if (lab.getId().equals(((MetadataOverview) pane.getCenter()).getFromFile())) {
- pane.setCenter(null);
+ final MetadataOverview content = getContent();
+ if (content != null) {
+ if (lab.getId().equals(content.getFromFile())) {
+ setContent(null);
}
}
});
@@ -158,7 +177,7 @@ public class ResourceView {
try {
DataStore ds = DataStores.open(filePath);
meta = new MetadataOverview(new DefaultMetadata(ds.getMetadata()), filePath);
- pane.setCenter(meta);
+ setContent(meta);
} catch (DataStoreException e) {
final Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("An error was occur");
@@ -176,7 +195,7 @@ public class ResourceView {
MetadataOverview meta;
try {
meta = new MetadataOverview(((DefaultMetadata) res.getMetadata()), filePath);
- pane.setCenter(meta);
+ setContent(meta);
} catch (DataStoreException e) {
final Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("An error was occur");
@@ -190,7 +209,19 @@ public class ResourceView {
}
}
- public void openFile(File f) {
+ public void open(final List<File> files) {
+ if (files != null) {
+ for (final File file : files) {
+ if (file.isDirectory()) {
+ openDirectory(file);
+ } else {
+ openFile(file);
+ }
+ }
+ }
+ }
+
+ private void openFile(File f) {
if (checkMetaPanel(f.getAbsolutePath())) {
Label label = new Label(f.getName());
label.setId(f.getAbsolutePath());
@@ -210,7 +241,7 @@ public class ResourceView {
}
}
- public void openDirectory(File firstFile) {
+ private void openDirectory(File firstFile) {
if (!LABINTRV.contains("[Aggregate] " + firstFile.getName())) {
DataStore resource = null;
try {
@@ -234,9 +265,10 @@ public class ResourceView {
root.getChildren().remove(labelToItem.get(cl));
labelToItem.remove(cl);
LABINTRV.remove(parent.getText());
- if (pane.getCenter() != null) {
- if (parent.getId().equals(((MetadataOverview) pane.getCenter()).getFromFile())) {
- pane.setCenter(null);
+ final MetadataOverview content = getContent();
+ if (content != null) {
+ if (parent.getId().equals(content.getFromFile())) {
+ setContent(null);
}
}
});
@@ -276,7 +308,7 @@ public class ResourceView {
elem.getValue().setTextFill(Color.RED);
}
});
- pane.setCenter(null);
+ setContent(null);
}
}
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
index a4b8901..690bf5b 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
@@ -16,7 +16,6 @@
*/
package org.apache.sis.gui.referencing;
-import java.util.Locale;
import java.io.IOException;
import java.io.UncheckedIOException;
import javafx.beans.property.ObjectProperty;
@@ -60,7 +59,7 @@ public class CRSChooser extends BorderPane {
*/
public CRSChooser() {
try {
- FXUtilities.loadJRXML(this, CRSChooser.class, Locale.getDefault());
+ FXUtilities.loadJRXML(this, CRSChooser.class);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
index 66448c5..33db6d6 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSTable.java
@@ -47,11 +47,11 @@ import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.CornerRadii;
import javafx.util.Callback;
-import org.apache.sis.internal.gui.Resources;
import org.apache.sis.internal.gui.FontGlyphs;
import org.apache.sis.internal.gui.FXUtilities;
import org.apache.sis.io.wkt.FormattableObject;
import org.apache.sis.metadata.iso.citation.Citations;
+import org.apache.sis.util.resources.Vocabulary;
import org.opengis.referencing.IdentifiedObject;
import org.opengis.referencing.crs.CRSAuthorityFactory;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
@@ -278,7 +278,7 @@ final class CRSTable extends ScrollPane {
private static class CodeColumn extends TableColumn<Code, String> {
public CodeColumn() {
- super(Resources.format(Resources.Keys.Code));
+ super(Vocabulary.format(Vocabulary.Keys.Code));
setEditable(false);
setPrefWidth(150);
setCellValueFactory((TableColumn.CellDataFeatures<Code, String> param) -> new SimpleObjectProperty<>(param.getValue().code));
@@ -289,7 +289,7 @@ final class CRSTable extends ScrollPane {
private static class DescColumn extends TableColumn<Code, String> {
public DescColumn() {
- super(Resources.format(Resources.Keys.Description));
+ super(Vocabulary.format(Vocabulary.Keys.Description));
setEditable(false);
setCellValueFactory((TableColumn.CellDataFeatures<Code, String> param) ->
new SimpleObjectProperty<>(param.getValue().getDescription()));
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
index 73c8bc8..500c0b3 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/FXUtilities.java
@@ -16,7 +16,6 @@
*/
package org.apache.sis.internal.gui;
-import java.util.Locale;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
@@ -76,12 +75,10 @@ public final class FXUtilities {
*
* @param target the widget for which to load the JRXML file.
* @param loader the class to use for loading the file.
- * @param locale the locale for the resources.
* @throws IOException if an error occurred while loading the JRXML file.
*/
- public static void loadJRXML(final Parent target, final Class<?> loader, final Locale locale) throws IOException {
- final FXMLLoader fxl = new FXMLLoader(loader.getResource(loader.getSimpleName() + ".fxml"),
- Resources.forLocale(locale));
+ public static void loadJRXML(final Parent target, final Class<?> loader) throws IOException {
+ final FXMLLoader fxl = new FXMLLoader(loader.getResource(loader.getSimpleName() + ".fxml"), Resources.getInstance());
fxl.setRoot(target);
fxl.setController(target);
/*
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
index 9cf419b..152237a 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
@@ -17,13 +17,10 @@
package org.apache.sis.internal.gui;
import java.net.URL;
-import java.util.Locale;
import java.util.MissingResourceException;
import javax.annotation.Generated;
-import org.opengis.util.InternationalString;
import org.apache.sis.util.resources.KeyConstants;
import org.apache.sis.util.resources.IndexedResourceBundle;
-import org.apache.sis.util.resources.ResourceInternationalString;
/**
@@ -56,24 +53,25 @@ public final class Resources extends IndexedResourceBundle {
private Keys() {
}
- public static final short AxisConvention = 3;
-
/**
- * CRS
+ * All files
*/
- public static final short CRS = 4;
+ public static final short AllFiles = 3;
/**
- * Code
+ * Coordinate Reference Systems
*/
- public static final short Code = 1;
+ public static final short CRSs = 1;
/**
- * Description
+ * Geospatial data files
*/
- public static final short Description = 2;
+ public static final short GeospatialFiles = 4;
- public static final short LongitudeFirst = 5;
+ /**
+ * Open data file
+ */
+ public static final short OpenDataFile = 2;
}
/**
@@ -97,14 +95,13 @@ public final class Resources extends IndexedResourceBundle {
}
/**
- * Returns resources in the given locale.
+ * Returns resources in the default locale.
*
- * @param locale the locale, or {@code null} for the default locale.
- * @return resources in the given locale.
+ * @return resources in the default locale.
* @throws MissingResourceException if resources can not be found.
*/
- public static Resources forLocale(final Locale locale) throws MissingResourceException {
- return getBundle(Resources.class, locale);
+ public static Resources getInstance() throws MissingResourceException {
+ return getBundle(Resources.class, null);
}
/**
@@ -115,7 +112,7 @@ public final class Resources extends IndexedResourceBundle {
* @throws MissingResourceException if no object for the given key can be found.
*/
public static String format(final short key) throws MissingResourceException {
- return forLocale(null).getString(key);
+ return getInstance().getString(key);
}
/**
@@ -130,7 +127,7 @@ public final class Resources extends IndexedResourceBundle {
public static String format(final short key,
final Object arg0) throws MissingResourceException
{
- return forLocale(null).getString(key, arg0);
+ return getInstance().getString(key, arg0);
}
/**
@@ -147,7 +144,7 @@ public final class Resources extends IndexedResourceBundle {
final Object arg0,
final Object arg1) throws MissingResourceException
{
- return forLocale(null).getString(key, arg0, arg1);
+ return getInstance().getString(key, arg0, arg1);
}
/**
@@ -166,45 +163,6 @@ public final class Resources extends IndexedResourceBundle {
final Object arg1,
final Object arg2) throws MissingResourceException
{
- return forLocale(null).getString(key, arg0, arg1, arg2);
- }
-
- /**
- * The international string to be returned by {@link formatInternational}.
- */
- private static final class International extends ResourceInternationalString {
- private static final long serialVersionUID = -7265791441872360274L;
-
- International(short key) {super(key);}
- International(short key, Object args) {super(key, args);}
- @Override protected KeyConstants getKeyConstants() {return Keys.INSTANCE;}
- @Override protected IndexedResourceBundle getBundle(final Locale locale) {
- return forLocale(locale);
- }
- }
-
- /**
- * Gets an international string for the given key. This method does not check for the key
- * validity. If the key is invalid, then a {@link MissingResourceException} may be thrown
- * when a {@link InternationalString#toString(Locale)} method is invoked.
- *
- * @param key the key for the desired string.
- * @return an international string for the given key.
- */
- public static InternationalString formatInternational(final short key) {
- return new International(key);
- }
-
- /**
- * Gets an international string for the given key. This method does not check for the key
- * validity. If the key is invalid, then a {@link MissingResourceException} may be thrown
- * when a {@link InternationalString#toString(Locale)} method is invoked.
- *
- * @param key the key for the desired string.
- * @param args values to substitute to "{0}", "{1}", <i>etc</i>.
- * @return an international string for the given key.
- */
- public static InternationalString formatInternational(final short key, final Object... args) {
- return new International(key, args);
+ return getInstance().getString(key, arg0, arg1, arg2);
}
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
index 61b64ed..630609c 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
@@ -20,6 +20,7 @@
# For resources shared by all modules in the Apache SIS project, see "org.apache.sis.util.resources" package.
#
-Code = Code
-Description = Description
-CRS = CRS
+AllFiles = All files
+CRSs = Coordinate Reference Systems
+GeospatialFiles = Geospatial data files
+OpenDataFile = Open data file
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
index b7a20f2..9d73d9c 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
@@ -25,6 +25,7 @@
# U+00A0 NO-BREAK SPACE before :
#
-Code = Code
-Description = Description
-CRS = CRS
+AllFiles = Tous les fichiers
+CRSs = Syst\u00e8mes de r\u00e9f\u00e9rence des coordonn\u00e9es
+GeospatialFiles = Fichiers de donn\u00e9es g\u00e9ospatiales
+OpenDataFile = Ouvrir un fichier de donn\u00e9es
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
index 0e6587f..7401b15 100644
--- a/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
+++ b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
@@ -19,7 +19,7 @@
<RowConstraints vgrow="NEVER" />
</rowConstraints>
<children>
- <Label styleClass="property-key" text="%CRS" GridPane.rowSpan="2" />
+ <Label styleClass="property-key" text="%CRSs" GridPane.rowSpan="2" />
<TextField fx:id="uiSearch" GridPane.columnSpan="3" GridPane.rowIndex="2" />
</children>
</GridPane>
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
index 05829f5..982badc 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.java
@@ -28,7 +28,7 @@ import org.opengis.util.InternationalString;
* Locale-dependent resources for single words or short sentences.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
@@ -312,6 +312,16 @@ public final class Vocabulary extends IndexedResourceBundle {
public static final short EntryCount_1 = 121;
/**
+ * Exit
+ */
+ public static final short Exit = 143;
+
+ /**
+ * File
+ */
+ public static final short File = 144;
+
+ /**
* Geocentric
*/
public static final short Geocentric = 42;
@@ -522,6 +532,11 @@ public final class Vocabulary extends IndexedResourceBundle {
public static final short Offset = 79;
/**
+ * Open
+ */
+ public static final short Open = 145;
+
+ /**
* Operating system
*/
public static final short OperatingSystem = 80;
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
index de0f9f8..72250e5 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary.properties
@@ -65,6 +65,8 @@ EllipsoidChange = Ellipsoid change
EllipsoidalHeight = Ellipsoidal height
EndDate = End date
EntryCount_1 = {0} entr{0,choice,0#y|2#ies}
+Exit = Exit
+File = File
Geocentric = Geocentric
GeocentricRadius = Geocentric radius
GeocentricConversion = Geocentric conversion
@@ -107,6 +109,7 @@ NumberOfNaN = Number of \u2018NaN\u2019
Obligation = Obligation
Of_3 = {0} ({1} of {2})
Offset = Offset
+Open = Open
OperatingSystem = Operating system
Operations = Operations
Optional = Optional
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
index add2f86..39351ab 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Vocabulary_fr.properties
@@ -72,6 +72,8 @@ EllipsoidChange = Changement d\u2019ellipso\u00efde
EllipsoidalHeight = Hauteur ellipso\u00efdale
EntryCount_1 = {0} entr\u00e9e{0,choice,0#|2#s}
EndDate = Date de fin
+Exit = Quitter
+File = Fichier
Geocentric = G\u00e9ocentrique
GeocentricRadius = Rayon g\u00e9ocentrique
GeocentricConversion = Conversion g\u00e9ocentrique
@@ -114,6 +116,7 @@ NumberOfNaN = Nombre de \u2018NaN\u2019
Obligation = Obligation
Of_3 = {0} ({1} de {2})
Offset = D\u00e9calage
+Open = Ouvrir
OperatingSystem = Syst\u00e8me d\u2019exploitation
Operations = Op\u00e9rations
Optional = Optionnel
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreUtilities.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreUtilities.java
index bb612c8..b52d702 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreUtilities.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/StoreUtilities.java
@@ -17,9 +17,9 @@
package org.apache.sis.internal.storage;
import java.util.EnumSet;
+import java.util.stream.Stream;
import java.nio.file.OpenOption;
import java.nio.file.StandardOpenOption;
-import java.util.stream.Stream;
import org.opengis.metadata.Metadata;
import org.opengis.metadata.identification.Identification;
import org.opengis.metadata.identification.DataIdentification;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 02/31: Remove the "Longitude first" checkbox from CRSChooser
- this is not the right widget were to provide this choice.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit fbe033418154cdf27771b392007fcf3994d8f93f
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat May 26 14:25:31 2018 +0000
Remove the "Longitude first" checkbox from CRSChooser - this is not the right widget were to provide this choice.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832312 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/gui/referencing/CRSChooser.java | 45 ++------------------
.../org/apache/sis/internal/gui/Resources.java | 6 ---
.../apache/sis/internal/gui/Resources.properties | 2 -
.../sis/internal/gui/Resources_fr.properties | 2 -
.../org/apache/sis/gui/referencing/CRSChooser.fxml | 48 ++++++++++------------
5 files changed, 25 insertions(+), 78 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
index 3aeede0..a4b8901 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/referencing/CRSChooser.java
@@ -22,30 +22,22 @@ import java.io.UncheckedIOException;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
-import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
-import javafx.scene.control.CheckBox;
-import javafx.scene.control.ChoiceBox;
import javafx.scene.control.DialogPane;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane;
-import org.opengis.util.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.apache.sis.internal.gui.FXUtilities;
-import org.apache.sis.referencing.crs.DefaultGeographicCRS;
-import org.apache.sis.referencing.cs.AxesConvention;
-import org.apache.sis.referencing.CRS;
-import org.apache.sis.referencing.IdentifiedObjects;
-import org.apache.sis.referencing.crs.AbstractCRS;
/**
- * Widget configuration panel used to select a {@link CoordinateReferenceSystem}.
+ * A list of Coordinate Reference Systems (CRS) from which the user can select.
*
* @author Johann Sorel (Geomatys)
+ * @author Martin Desruisseaux (Geomatys)
* @version 1.0
* @since 1.0
* @module
@@ -53,15 +45,10 @@ import org.apache.sis.referencing.crs.AbstractCRS;
public class CRSChooser extends BorderPane {
@FXML
- private CheckBox uiLongFirst;
- @FXML
- private CheckBox uiAxisConv;
- @FXML
private BorderPane uiPane;
+
@FXML
private TextField uiSearch;
- @FXML
- private ChoiceBox<AxesConvention> uiChoice;
private CRSTable uiTable;
@@ -96,30 +83,6 @@ public class CRSChooser extends BorderPane {
updateText = false;
}
});
-
- uiChoice.setItems(FXCollections.observableArrayList(AxesConvention.values()));
-
- }
-
- private CoordinateReferenceSystem getCorrectedCRS(){
- CoordinateReferenceSystem crs = crsProperty.get();
- if (crs == null) return null;
-
- try {
- Integer epsg = IdentifiedObjects.lookupEPSG(crs);
- if (epsg != null) {
- crs = CRS.forCode("EPSG:" + epsg);
- if (uiLongFirst.isSelected()) {
- crs = AbstractCRS.castOrCopy(crs).forConvention(AxesConvention.RIGHT_HANDED);
- }
- }
- } catch (FactoryException ex) {
- // TODO
- }
- if (uiAxisConv.isSelected() && crs instanceof DefaultGeographicCRS && uiChoice.getValue() != null) {
- crs = ((DefaultGeographicCRS) crs).forConvention(uiChoice.getValue());
- }
- return crs;
}
/**
@@ -149,6 +112,6 @@ public class CRSChooser extends BorderPane {
alert.getButtonTypes().setAll(ButtonType.OK,ButtonType.CANCEL);
alert.setResizable(true);
final ButtonType res = alert.showAndWait().orElse(ButtonType.CANCEL);
- return res == ButtonType.CANCEL ? null : chooser.getCorrectedCRS();
+ return res == ButtonType.CANCEL ? null : chooser.crsProperty.get();
}
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
index 8eda591..9cf419b 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.java
@@ -56,9 +56,6 @@ public final class Resources extends IndexedResourceBundle {
private Keys() {
}
- /**
- * Axis convention
- */
public static final short AxisConvention = 3;
/**
@@ -76,9 +73,6 @@ public final class Resources extends IndexedResourceBundle {
*/
public static final short Description = 2;
- /**
- * Longitude first
- */
public static final short LongitudeFirst = 5;
}
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
index 6ce5fb7..61b64ed 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources.properties
@@ -23,5 +23,3 @@
Code = Code
Description = Description
CRS = CRS
-LongitudeFirst = Longitude first
-AxisConvention = Axis convention
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
index 878ee29..b7a20f2 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
+++ b/application/sis-javafx/src/main/java/org/apache/sis/internal/gui/Resources_fr.properties
@@ -28,5 +28,3 @@
Code = Code
Description = Description
CRS = CRS
-LongitudeFirst = Longitude en premier
-AxisConvention = Convention
diff --git a/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
index cb22507..0e6587f 100644
--- a/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
+++ b/application/sis-javafx/src/main/resources/org/apache/sis/gui/referencing/CRSChooser.fxml
@@ -6,31 +6,25 @@
<?import javafx.scene.layout.*?>
<fx:root maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" type="BorderPane" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
- <top>
- <GridPane hgap="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" vgap="10.0" BorderPane.alignment="CENTER">
- <columnConstraints>
- <ColumnConstraints hgrow="NEVER" />
- <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
- <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" prefWidth="100.0" />
- </columnConstraints>
- <rowConstraints>
- <RowConstraints vgrow="NEVER" />
- <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
- <RowConstraints vgrow="NEVER" />
- </rowConstraints>
- <children>
- <Label styleClass="property-key" text="%CRS" GridPane.rowSpan="2" />
- <CheckBox fx:id="uiLongFirst" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="property-key" text="%LongitudeFirst" GridPane.columnIndex="1" GridPane.columnSpan="2" GridPane.halignment="LEFT" />
- <TextField fx:id="uiSearch" GridPane.columnSpan="3" GridPane.rowIndex="2" />
- <CheckBox fx:id="uiAxisConv" mnemonicParsing="false" text="%AxisConvention" GridPane.columnIndex="1" GridPane.rowIndex="1" />
- <ChoiceBox fx:id="uiChoice" prefWidth="150.0" GridPane.columnIndex="2" GridPane.rowIndex="1" />
- </children>
- <BorderPane.margin>
- <Insets bottom="10.0" left="10.0" right="10.0" />
- </BorderPane.margin>
- </GridPane>
- </top>
- <center>
- <BorderPane fx:id="uiPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" BorderPane.alignment="CENTER" />
- </center>
+ <top>
+ <GridPane hgap="10.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" vgap="10.0" BorderPane.alignment="CENTER">
+ <columnConstraints>
+ <ColumnConstraints hgrow="NEVER" />
+ <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
+ <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" minWidth="10.0" prefWidth="100.0" />
+ </columnConstraints>
+ <rowConstraints>
+ <RowConstraints vgrow="NEVER" />
+ <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="NEVER" />
+ <RowConstraints vgrow="NEVER" />
+ </rowConstraints>
+ <children>
+ <Label styleClass="property-key" text="%CRS" GridPane.rowSpan="2" />
+ <TextField fx:id="uiSearch" GridPane.columnSpan="3" GridPane.rowIndex="2" />
+ </children>
+ </GridPane>
+ </top>
+ <center>
+ <BorderPane fx:id="uiPane" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" BorderPane.alignment="CENTER" />
+ </center>
</fx:root>
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 05/31: When opening a dataset,
try the DataStoreProvider for the file extension before to try any
other DataStoreProvider. The intent is to avoid
DataStoreProvider.probeContent(...) invocation that may cause loading of
large dependencies.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 79944c3e0437b94ceac76e7d41006678d4dcb874
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon May 28 10:33:10 2018 +0000
When opening a dataset, try the DataStoreProvider for the file extension before to try any other DataStoreProvider.
The intent is to avoid DataStoreProvider.probeContent(...) invocation that may cause loading of large dependencies.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832375 13f79535-47bb-0310-9956-ffa450edef68
---
.../sis/internal/storage/io/IOUtilities.java | 6 +-
.../org/apache/sis/storage/DataStoreRegistry.java | 134 ++++++++++++---------
.../org/apache/sis/storage/ProbeProviderPair.java | 5 +-
3 files changed, 85 insertions(+), 60 deletions(-)
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
index b5f6a7d..9c582f8 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/IOUtilities.java
@@ -84,9 +84,9 @@ public final class IOUtilities extends Static {
}
/**
- * Returns the filename extension from a {@link Path}, {@link File}, {@link URL}, {@link URI} or
- * {@link CharSequence} instance. If no extension is found, returns an empty string. If the given
- * object is of unknown type, return {@code null}.
+ * Returns the filename extension (without leading dot) from a {@link Path}, {@link File}, {@link URL},
+ * {@link URI} or {@link CharSequence} instance. If no extension is found, returns an empty string.
+ * If the given object is of unknown type, return {@code null}.
*
* @param path the path as an instance of one of the above-cited types, or {@code null}.
* @return the extension in the given path, or an empty string if none, or {@code null}
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
index 8a88736..ef81e33 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
@@ -22,9 +22,12 @@ import java.util.Set;
import java.util.Iterator;
import java.util.ServiceLoader;
import org.apache.sis.internal.storage.Resources;
+import org.apache.sis.internal.storage.StoreMetadata;
+import org.apache.sis.internal.storage.io.IOUtilities;
import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.internal.referencing.LazySet;
import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.ArraysExt;
/**
@@ -143,6 +146,8 @@ final class DataStoreRegistry {
* @param open {@code true} for creating a {@link DataStore}, or {@code false} if not needed.
* @throws UnsupportedStorageException if no {@link DataStoreProvider} is found for a given storage object.
* @throws DataStoreException if an error occurred while opening the storage.
+ *
+ * @todo Iterate on {@code ServiceLoader.Provider.type()} on JDK9.
*/
private ProbeProviderPair lookup(final Object storage, final boolean open) throws DataStoreException {
StorageConnector connector;
@@ -151,64 +156,76 @@ final class DataStoreRegistry {
} else {
connector = new StorageConnector(storage);
}
+ /*
+ * If we can get a filename extension from the given storage (file, URL, etc.), then we may perform two iterations
+ * on the provider list. The first iteration will use only the providers which declare capability to read files of
+ * that suffix (matchCondition = TRUE). Only if no provider has been able to read that file, we will do a second
+ * iteration on other providers (matchCondition = FALSE). The intent is to avoid DataStoreProvider.probeContent(…)
+ * invocations loading large dependencies.
+ */
+ final String extension = IOUtilities.extension(storage);
+ Boolean matchCondition = (extension != null && !extension.isEmpty()) ? Boolean.TRUE : null;
+ final List<ProbeProviderPair> needMoreBytes = new LinkedList<>();
ProbeProviderPair selected = null;
- List<ProbeProviderPair> deferred = null;
try {
- /*
- * All usages of 'loader' and its 'providers' iterator must be protected in a synchronized block,
- * because ServiceLoader is not thread-safe. We try to keep the synhronization block as small as
- * possible for less contention. In particular, the probeContent(connector) method call may be costly.
- */
- final Iterator<DataStoreProvider> providers;
- DataStoreProvider provider;
- synchronized (loader) {
- providers = loader.iterator();
- provider = providers.hasNext() ? providers.next() : null;
- }
- while (provider != null) {
- final ProbeResult probe = provider.probeContent(connector);
- if (probe.isSupported()) {
- /*
- * Stop at the first provider claiming to be able to read the storage.
- * Do not iterate over the list of deferred providers (if any).
- */
- selected = new ProbeProviderPair(provider, probe);
- deferred = null;
- break;
- }
- if (ProbeResult.INSUFFICIENT_BYTES.equals(probe)) {
- /*
- * If a provider doesn't have enough bytes for answering the question,
- * try again after this loop with more bytes in the buffer, unless we
- * found an other provider.
- */
- if (deferred == null) {
- deferred = new LinkedList<>();
- }
- deferred.add(new ProbeProviderPair(provider, probe));
- } else if (ProbeResult.UNDETERMINED.equals(probe)) {
- /*
- * If a provider doesn't know whether it can open the given storage,
- * we will try it only if we find no provider retuning SUPPORTED.
- *
- * TODO: What to do if we find more than one provider here? We can not invoke
- * provider.open(connector) in a try … catch block because it may leave
- * the StorageConnector in an invalid state in case of failure.
- */
- selected = new ProbeProviderPair(provider, probe);
- }
+search: do {
+ /*
+ * All usages of 'loader' and its 'providers' iterator must be protected in a synchronized block,
+ * because ServiceLoader is not thread-safe. We try to keep the synhronization block as small as
+ * possible for less contention. In particular, the probeContent(connector) method call may be costly.
+ */
+ final Iterator<DataStoreProvider> providers;
+ DataStoreProvider provider;
synchronized (loader) {
+ providers = loader.iterator();
provider = providers.hasNext() ? providers.next() : null;
}
- }
- /*
- * If any provider did not had enough bytes for answering the 'probeContent(…)' question,
- * get more bytes and try again. We try to prefetch more bytes only if we have no choice
- * in order to avoid latency on network connection.
- */
- if (deferred != null) {
-search: while (!deferred.isEmpty() && connector.prefetch()) {
- for (final Iterator<ProbeProviderPair> it = deferred.iterator(); it.hasNext();) {
+ while (provider != null) {
+ boolean accept = true;
+ if (matchCondition != null) {
+ final StoreMetadata md = provider.getClass().getAnnotation(StoreMetadata.class);
+ accept = (md != null && ArraysExt.containsIgnoreCase(md.fileSuffixes(), extension)) == matchCondition;
+ }
+ if (accept) {
+ final ProbeResult probe = provider.probeContent(connector);
+ if (probe.isSupported()) {
+ /*
+ * Stop at the first provider claiming to be able to read the storage.
+ * Do not iterate over the list of deferred providers (if any).
+ */
+ selected = new ProbeProviderPair(provider, probe);
+ break search;
+ }
+ if (ProbeResult.INSUFFICIENT_BYTES.equals(probe)) {
+ /*
+ * If a provider doesn't have enough bytes for answering the question,
+ * try again after this loop with more bytes in the buffer, unless we
+ * found an other provider.
+ */
+ needMoreBytes.add(new ProbeProviderPair(provider, probe));
+ } else if (ProbeResult.UNDETERMINED.equals(probe)) {
+ /*
+ * If a provider doesn't know whether it can open the given storage,
+ * we will try it only if we find no provider retuning SUPPORTED.
+ * We select the first provider because it is more likely to be the
+ * one for the file extension of the given storage.
+ */
+ if (selected == null) {
+ selected = new ProbeProviderPair(provider, probe);
+ }
+ }
+ }
+ synchronized (loader) {
+ provider = providers.hasNext() ? providers.next() : null;
+ }
+ }
+ /*
+ * If any provider did not had enough bytes for answering the 'probeContent(…)' question,
+ * get more bytes and try again. We try to prefetch more bytes only if we have no choice
+ * in order to avoid latency on network connection.
+ */
+ while (!needMoreBytes.isEmpty() && connector.prefetch()) {
+ for (final Iterator<ProbeProviderPair> it = needMoreBytes.iterator(); it.hasNext();) {
final ProbeProviderPair p = it.next();
p.probe = p.provider.probeContent(connector);
if (p.probe.isSupported()) {
@@ -216,14 +233,21 @@ search: while (!deferred.isEmpty() && connector.prefetch()) {
break search;
}
if (!ProbeResult.INSUFFICIENT_BYTES.equals(p.probe)) {
- if (ProbeResult.UNDETERMINED.equals(p.probe)) {
+ if (selected == null && ProbeResult.UNDETERMINED.equals(p.probe)) {
selected = p; // To be used only if we don't find a better match.
}
it.remove(); // UNSUPPORTED_* or UNDETERMINED: do not try again those providers.
}
}
}
- }
+ /*
+ * If we filtered providers by the file extension without finding a suitable provider,
+ * try again with all other providers (even if they are for another file extension).
+ */
+ if (Boolean.TRUE.equals(matchCondition)) {
+ matchCondition = Boolean.FALSE;
+ }
+ } while (matchCondition != null);
/*
* If a provider has been found, or if a provider returned UNDETERMINED, use that one
* for opening a DataStore. Note that if more than one provider returned UNDETERMINED,
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeProviderPair.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeProviderPair.java
index ca32226..87b7657 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeProviderPair.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeProviderPair.java
@@ -18,8 +18,8 @@ package org.apache.sis.storage;
/**
- * A pair of {@link ProbeResult} and {@link DataStoreProvider},
- * for internal usage by {@link DataStoreRegistry} only.
+ * A pair of {@link ProbeResult} and {@link DataStoreProvider}, for internal usage by {@link DataStoreRegistry} only.
+ * Provides also a {@link DataStore} created by the provider if this class is used for an {@code open} operation.
*
* @author Martin Desruisseaux (Geomatys)
* @version 0.4
@@ -39,6 +39,7 @@ final class ProbeProviderPair {
/**
* A data store created by the provider.
+ * This is non-null only if this class is used for an {@code open} operation.
*/
DataStore store;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 18/31: Remember the filter used last time the user opened a
file.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 9a5423818f73fa9a11ccf5b0cb6cee67def5df30
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon Jun 4 10:27:20 2018 +0000
Remember the filter used last time the user opened a file.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832807 13f79535-47bb-0310-9956-ffa450edef68
---
.../sis-javafx/src/main/java/org/apache/sis/gui/Main.java | 15 +++++++++++++--
.../java/org/apache/sis/gui/metadata/ResourceView.java | 12 +++++-------
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
index 6b19666..ae06570 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/Main.java
@@ -16,6 +16,7 @@
*/
package org.apache.sis.gui;
+import java.io.File;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
@@ -74,6 +75,11 @@ public class Main extends Application {
private FileChooser.ExtensionFilter[] openFilters;
/**
+ * The last filter used by the {@link #open()} action.
+ */
+ private FileChooser.ExtensionFilter lastFilter;
+
+ /**
* Creates a new Apache SIS application.
*/
public Main() {
@@ -174,12 +180,17 @@ public class Main extends Application {
private void open() {
if (openFilters == null) {
createFileFilters();
+ lastFilter = openFilters[1];
}
final FileChooser chooser = new FileChooser();
chooser.setTitle(Resources.format(Resources.Keys.OpenDataFile));
chooser.getExtensionFilters().addAll(openFilters);
- chooser.setSelectedExtensionFilter(openFilters[1]); // TODO: remember last filter used.
- content.open(chooser.showOpenMultipleDialog(window));
+ chooser.setSelectedExtensionFilter(lastFilter);
+ final List<File> files = chooser.showOpenMultipleDialog(window);
+ if (files != null) {
+ lastFilter = chooser.getSelectedExtensionFilter();
+ content.open(files);
+ }
}
/**
diff --git a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
index 72571a0..5a9af51 100644
--- a/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
+++ b/application/sis-javafx/src/main/java/org/apache/sis/gui/metadata/ResourceView.java
@@ -210,13 +210,11 @@ public class ResourceView {
}
public void open(final List<File> files) {
- if (files != null) {
- for (final File file : files) {
- if (file.isDirectory()) {
- openDirectory(file);
- } else {
- openFile(file);
- }
+ for (final File file : files) {
+ if (file.isDirectory()) {
+ openDirectory(file);
+ } else {
+ openFile(file);
}
}
}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 06/31: Take axis direction in account when computing the
geographic bounding box.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit a2fae023753585302b25ea2e51c5235a7ead69c6
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon May 28 13:44:53 2018 +0000
Take axis direction in account when computing the geographic bounding box.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832397 13f79535-47bb-0310-9956-ffa450edef68
---
.../java/org/apache/sis/internal/netcdf/Axis.java | 29 ++++-
.../org/apache/sis/internal/netcdf/Decoder.java | 25 +---
.../sis/internal/netcdf/impl/GridGeometryInfo.java | 2 +-
.../sis/internal/netcdf/impl/package-info.java | 2 +-
.../apache/sis/internal/netcdf/package-info.java | 6 +-
.../sis/internal/netcdf/ucar/package-info.java | 7 +-
.../apache/sis/storage/netcdf/MetadataReader.java | 128 +++++++++++++--------
.../apache/sis/storage/netcdf/package-info.java | 2 +-
.../internal/netcdf/impl/ChannelDecoderTest.java | 3 +-
9 files changed, 118 insertions(+), 86 deletions(-)
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Axis.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Axis.java
index 7376e3e..5939443 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Axis.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Axis.java
@@ -17,9 +17,12 @@
package org.apache.sis.internal.netcdf;
import java.io.IOException;
-import org.apache.sis.util.ArraysExt;
+import org.opengis.referencing.cs.AxisDirection;
+import org.apache.sis.internal.metadata.AxisDirections;
import org.apache.sis.storage.netcdf.AttributeNames;
import org.apache.sis.storage.DataStoreException;
+import org.apache.sis.util.iso.Types;
+import org.apache.sis.util.ArraysExt;
/**
@@ -29,7 +32,7 @@ import org.apache.sis.storage.DataStoreException;
* {@link ucar.nc2.dataset.CoordinateAxis1D} or {@link ucar.nc2.dataset.CoordinateAxis2D} respectively.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @see GridGeometry#getAxes()
*
@@ -96,4 +99,26 @@ public final class Axis {
}
}
}
+
+ /**
+ * Returns the axis direction for the given unit of measurement as a sign relative to the given direction.
+ * This method performs the second half of the work of parsing "degrees_east" or "degrees_west" units.
+ *
+ * @param unit the string representation of the netCDF unit, or {@code null}.
+ * @param positive the direction to take as positive value: {@link AxisDirection#EAST} or {@link AxisDirection#NORTH}.
+ * @return the axis direction as a sign relative to the positive direction, or 0 if unrecognized.
+ */
+ public static int direction(final String unit, final AxisDirection positive) {
+ if (unit != null) {
+ final int s = unit.indexOf('_');
+ if (s > 0) {
+ final AxisDirection dir = Types.forCodeName(AxisDirection.class, unit.substring(s+1), false);
+ if (dir != null) {
+ if (dir.equals(positive)) return +1;
+ if (dir.equals(AxisDirections.opposite(positive))) return -1;
+ }
+ }
+ }
+ return 0;
+ }
}
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
index e596c77..45dd2ae 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Decoder.java
@@ -21,9 +21,6 @@ import java.util.Objects;
import java.util.Collection;
import java.io.Closeable;
import java.io.IOException;
-import javax.measure.Unit;
-import javax.measure.format.ParserException;
-import org.apache.sis.measure.Units;
import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
@@ -37,7 +34,7 @@ import org.apache.sis.util.logging.WarningListeners;
* Synchronizations are caller's responsibility.</p>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
@@ -154,26 +151,6 @@ public abstract class Decoder implements Closeable {
public abstract Date dateValue(final String name);
/**
- * Returns the value of the attribute of the given name as a unit of measurement, or {@code null} if none.
- *
- * @param name the name of the attribute to search, or {@code null}.
- * @return the attribute value, or {@code null} if none or unparsable or if the given name was null.
- *
- * @todo Current Units.valueOf(String) implementation ignore direction in "degrees_east" or "degrees_west".
- * We may need to take that in account (with "degrees_west" to "degrees_east" converter that reverse
- * the sign).
- */
- public final Unit<?> unitValue(final String name) {
- final String unit = stringValue(name);
- if (unit != null) try {
- return Units.valueOf(unit);
- } catch (ParserException e) {
- listeners.warning(null, e);
- }
- return null;
- }
-
- /**
* Converts the given numerical values to date, using the information provided in the given unit symbol.
* The unit symbol is typically a string like <cite>"days since 1970-01-01T00:00:00Z"</cite>.
*
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/GridGeometryInfo.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/GridGeometryInfo.java
index 23c683e..d221142 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/GridGeometryInfo.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/GridGeometryInfo.java
@@ -178,7 +178,7 @@ final class GridGeometryInfo extends GridGeometry {
*/
@Override
protected double coordinateForAxis(final Object axis, final int j, final int i) throws IOException, DataStoreException {
- final VariableInfo v = ((VariableInfo) axis);
+ final VariableInfo v = (VariableInfo) axis;
final int n = v.dimensions[0].length;
return v.read().doubleValue(j + n*i);
}
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/package-info.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/package-info.java
index a9e953b..3a34638 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/package-info.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/package-info.java
@@ -29,7 +29,7 @@
*
* @author Johann Sorel (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/package-info.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/package-info.java
index d64d02f..3a164ec 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/package-info.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/package-info.java
@@ -34,11 +34,11 @@
* ISO 19123 <cite>"domain"</cite>, the netCDF coordinate system <cite>"domain"</cite> is closer to
* ISO 19123 <cite>"grid envelope"</cite> and the ISO 19123 <cite>"range"</cite> is rather related
* to the netCDF variable minimum and maximum values. Trying to use OGC/ISO and netCDF objects in
- * the same code appears to be <strong>very</strong> confusing. This isolation layer allows our code
- * to use a more consistent vocabulary (compared to the rest of Apache SIS).</p>
+ * the same code appears to be very confusing. This isolation layer allows our code to use a more
+ * consistent vocabulary (more similar to the rest of Apache SIS).</p>
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/package-info.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/package-info.java
index e419e83..f6e3b2e 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/package-info.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/package-info.java
@@ -20,8 +20,11 @@
* as wrappers around the UCAR netCDF library.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.8
- * @since 0.3
+ * @version 1.0
+ *
+ * @see <a href="https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/javadoc/index.html">UCAR javadoc</a>
+ *
+ * @since 0.3
* @module
*/
package org.apache.sis.internal.netcdf.ucar;
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 48d59f5..0158a85 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -45,6 +45,7 @@ import org.opengis.metadata.citation.*;
import org.opengis.metadata.identification.*;
import org.opengis.metadata.maintenance.ScopeCode;
import org.opengis.metadata.constraint.Restriction;
+import org.opengis.referencing.cs.AxisDirection;
import org.opengis.referencing.crs.VerticalCRS;
import org.apache.sis.util.iso.Types;
@@ -281,6 +282,14 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
}
/**
+ * Reads the numeric value for the given value, or returns {@code NaN} if none.
+ */
+ private double numericValue(final String name) {
+ final Number v = decoder.numericValue(name);
+ return (v != null) ? v.doubleValue() : Double.NaN;
+ }
+
+ /**
* Returns the enumeration constant for the given name, or {@code null} if the given name is not recognized.
* In the later case, this method emits a warning.
*/
@@ -711,9 +720,23 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
final AttributeNames.Dimension attributeNames = axis.attributeNames;
if (attributeNames != null) {
setAxisName(dim, attributeNames.DEFAULT_NAME_TYPE);
- final Number value = decoder.numericValue(attributeNames.RESOLUTION);
- if (value != null) {
- setAxisResolution(dim, value.doubleValue());
+ final String res = stringValue(attributeNames.RESOLUTION);
+ if (res != null) try {
+ /*
+ * ACDD convention recommends to write units after the resolution.
+ * Examples: "100 meters", "0.1 degree".
+ */
+ final int s = res.indexOf(' ');
+ final double value;
+ if (s < 0) {
+ value = numericValue(attributeNames.RESOLUTION);
+ } else {
+ value = Double.parseDouble(res.substring(0, s));
+ // TODO: parse units and build a Quantity object.
+ }
+ setAxisResolution(dim, value);
+ } catch (NumberFormatException e) {
+ warning(e);
}
}
}
@@ -728,35 +751,22 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
*/
private boolean addExtent() {
addExtent(stringValue(GEOGRAPHIC_IDENTIFIER));
+ final double[] extent = new double[4];
/*
- * If at least one geographic ordinates is available, add a GeographicBoundingBox.
+ * If at least one geographic coordinate is available, add a GeographicBoundingBox.
*/
- final Number xmin = decoder.numericValue(LONGITUDE.MINIMUM);
- final Number xmax = decoder.numericValue(LONGITUDE.MAXIMUM);
- final Number ymin = decoder.numericValue(LATITUDE .MINIMUM);
- final Number ymax = decoder.numericValue(LATITUDE .MAXIMUM);
- final Number zmin = decoder.numericValue(VERTICAL .MINIMUM);
- final Number zmax = decoder.numericValue(VERTICAL .MAXIMUM);
- boolean hasExtent = (xmin != null || xmax != null || ymin != null || ymax != null);
+ boolean hasExtent;
+ hasExtent = fillExtent(LONGITUDE, Units.DEGREE, AxisDirection.EAST, extent, 0);
+ hasExtent |= fillExtent(LATITUDE, Units.DEGREE, AxisDirection.NORTH, extent, 2);
if (hasExtent) {
- final UnitConverter xConv = getConverterTo(decoder.unitValue(LONGITUDE.UNITS), Units.DEGREE);
- final UnitConverter yConv = getConverterTo(decoder.unitValue(LATITUDE .UNITS), Units.DEGREE);
- addExtent(new double[] {valueOf(xmin, xConv), valueOf(xmax, xConv),
- valueOf(ymin, yConv), valueOf(ymax, yConv)}, 0);
+ addExtent(extent, 0);
+ hasExtent = true;
}
/*
- * If at least one vertical ordinates above is available, add a VerticalExtent.
+ * If at least one vertical coordinate is available, add a VerticalExtent.
*/
- if (zmin != null || zmax != null) {
- final UnitConverter c = getConverterTo(decoder.unitValue(VERTICAL.UNITS), Units.METRE);
- double min = valueOf(zmin, c);
- double max = valueOf(zmax, c);
- if (CF.POSITIVE_DOWN.equals(stringValue(VERTICAL.POSITIVE))) {
- final double tmp = min;
- min = -max;
- max = -tmp;
- }
- addVerticalExtent(min, max, VERTICAL_CRS);
+ if (fillExtent(VERTICAL, Units.METRE, null, extent, 0)) {
+ addVerticalExtent(extent[0], extent[1], VERTICAL_CRS);
hasExtent = true;
}
/*
@@ -778,8 +788,8 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
}
}
/*
- * If at least one time values above is available, add a temporal extent.
- * This operation requires the the sis-temporal module. If not available,
+ * If at least one time value above is available, add a temporal extent.
+ * This operation requires the sis-temporal module. If not available,
* we will report a warning and leave the temporal extent missing.
*/
if (startTime != null || endTime != null) try {
@@ -792,31 +802,49 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
}
/**
- * Returns the converter from the given source unit (which may be {@code null}) to the
- * given target unit, or {@code null} if none or incompatible.
- */
- private UnitConverter getConverterTo(final Unit<?> source, final Unit<?> target) {
- if (source != null) try {
- return source.getConverterToAny(target);
- } catch (IncommensurableException e) {
- warning(e);
- }
- return null;
- }
-
- /**
- * Returns the values of the given number if non-null, or NaN if null. If the given
- * converter is non-null, it is applied.
+ * Fills one dimension of the geographic bounding box or vertical extent.
+ * The extent values are written in the given {@code extent} array.
+ *
+ * @param dim the dimension for which to get the extent.
+ * @param targetUnit the destination unit of the extent.
+ * @param positive the direction considered positive, or {@code null} if the unit symbol is not expected to contain a direction.
+ * @param extent where to store the minimum and maximum values.
+ * @param index index where to store the minimum value in {@code extent}. The maximum value is stored at {@code index+1}.
+ * @return {@code true} if a minimum or a maximum value has been found.
*/
- private static double valueOf(final Number value, final UnitConverter converter) {
- double n = Double.NaN;
- if (value != null) {
- n = value.doubleValue();
- if (converter != null) {
- n = converter.convert(n);
+ private boolean fillExtent(final AttributeNames.Dimension dim, final Unit<?> targetUnit, final AxisDirection positive,
+ final double[] extent, final int index)
+ {
+ double min = numericValue(dim.MINIMUM);
+ double max = numericValue(dim.MAXIMUM);
+ boolean hasExtent = !Double.isNaN(min) || !Double.isNaN(max);
+ if (hasExtent) {
+ final String symbol = stringValue(dim.UNITS);
+ if (symbol != null) {
+ try {
+ final UnitConverter c = Units.valueOf(symbol).getConverterToAny(targetUnit);
+ min = c.convert(min);
+ max = c.convert(max);
+ } catch (ParserException | IncommensurableException e) {
+ warning(e);
+ }
+ boolean reverse = false;
+ if (positive != null) {
+ reverse = Axis.direction(symbol, positive) < 0;
+ } else if (dim.POSITIVE != null) {
+ // For now, only the vertical axis have a "positive" attribute.
+ reverse = CF.POSITIVE_DOWN.equals(stringValue(dim.POSITIVE));
+ }
+ if (reverse) {
+ final double tmp = min;
+ min = -max;
+ max = -tmp;
+ }
}
}
- return n;
+ extent[index ] = min;
+ extent[index+1] = max;
+ return hasExtent;
}
/**
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/package-info.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/package-info.java
index 1e164c0..fd04b6c 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/package-info.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/package-info.java
@@ -48,7 +48,7 @@
* Care must be taken for avoiding confusion when using SIS and UCAR libraries together.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
diff --git a/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/impl/ChannelDecoderTest.java b/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/impl/ChannelDecoderTest.java
index 8588a92..4e3a61c 100644
--- a/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/impl/ChannelDecoderTest.java
+++ b/storage/sis-netcdf/src/test/java/org/apache/sis/internal/netcdf/impl/ChannelDecoderTest.java
@@ -31,8 +31,7 @@ import org.opengis.test.dataset.TestData;
/**
* Tests the {@link ChannelDecoder} implementation. This test shall be executed only if the
- * {@link ChannelDecoder} tests, which use the UCAR library has a reference implementation,
- * passed.
+ * {@link DecoderTest}, which use the UCAR library has a reference implementation, passed.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 10/31: Remove @Debug annotation on toString() methods in
order to avoid polluting the list of debug methods with long list of
toString() methods. Unless otherwise specified in javadoc,
toString() will be considered implicitly for debugging purpose.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 5eb53e5fca8488b1cdcabad33541a1a80f34e39f
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed May 30 11:05:14 2018 +0000
Remove @Debug annotation on toString() methods in order to avoid polluting the list of debug methods with long list of toString() methods.
Unless otherwise specified in javadoc, toString() will be considered implicitly for debugging purpose.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832534 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/feature/AbstractAssociation.java | 2 --
.../org/apache/sis/feature/AbstractAttribute.java | 2 --
.../org/apache/sis/feature/AbstractOperation.java | 2 --
.../apache/sis/feature/DefaultAssociationRole.java | 2 --
.../org/apache/sis/feature/DefaultAttributeType.java | 2 --
.../java/org/apache/sis/feature/PropertyView.java | 2 --
.../org/apache/sis/feature/builder/TypeBuilder.java | 2 --
.../sis/internal/jaxb/IdentifierMapAdapter.java | 3 ---
.../sis/internal/jaxb/SpecializedIdentifier.java | 2 --
.../internal/jaxb/lan/LocalisedCharacterString.java | 2 --
.../org/apache/sis/internal/jaxb/lan/TextGroup.java | 2 --
.../apache/sis/internal/simple/CitationConstant.java | 2 --
.../apache/sis/internal/simple/SimpleCitation.java | 2 --
.../org/apache/sis/internal/simple/SimpleFormat.java | 2 --
.../apache/sis/internal/simple/SimpleIdentifier.java | 2 --
.../src/main/java/org/apache/sis/io/wkt/Element.java | 1 -
.../main/java/org/apache/sis/io/wkt/Formatter.java | 2 --
.../main/java/org/apache/sis/metadata/CacheKey.java | 2 --
.../org/apache/sis/metadata/MetadataStandard.java | 2 --
.../java/org/apache/sis/metadata/ObjectPair.java | 2 --
.../org/apache/sis/metadata/PropertyAccessor.java | 2 --
.../main/java/org/apache/sis/metadata/TreeNode.java | 2 --
.../org/apache/sis/metadata/TreeNodeChildren.java | 2 --
.../org/apache/sis/util/iso/DefaultNameSpace.java | 2 --
.../java/org/apache/sis/util/iso/DefaultRecord.java | 2 --
.../org/apache/sis/util/iso/DefaultRecordSchema.java | 2 --
.../org/apache/sis/util/iso/RecordDefinition.java | 2 --
.../sis/coverage/grid/GridCoordinatesView.java | 2 --
.../org/apache/sis/coverage/grid/GridExtent.java | 2 --
.../org/apache/sis/coverage/grid/GridGeometry.java | 2 --
.../apache/sis/coverage/grid/PixelTranslation.java | 2 --
.../sis/referencing/gazetteer/AbstractLocation.java | 2 --
.../gazetteer/MilitaryGridReferenceSystem.java | 2 --
.../referencing/provider/DatumShiftGridFile.java | 2 --
.../sis/parameter/AbstractParameterDescriptor.java | 1 -
.../java/org/apache/sis/parameter/Parameters.java | 1 -
.../factory/AuthorityFactoryIdentifier.java | 2 --
.../factory/ConcurrentAuthorityFactory.java | 4 +---
.../factory/GeodeticAuthorityFactory.java | 2 --
.../sis/referencing/factory/sql/AuthorityCodes.java | 2 --
.../apache/sis/referencing/factory/sql/AxisName.java | 2 --
.../operation/builder/LinearTransformBuilder.java | 2 --
.../operation/transform/TransferFunction.java | 2 --
.../org/apache/sis/internal/converter/ClassPair.java | 2 --
.../sis/internal/converter/ConverterRegistry.java | 2 --
.../sis/internal/converter/FallbackConverter.java | 2 --
.../sis/internal/converter/SurjectiveConverter.java | 2 --
.../apache/sis/internal/util/AbstractMapEntry.java | 2 --
.../java/org/apache/sis/measure/AngleFormat.java | 2 --
.../java/org/apache/sis/measure/LinearConverter.java | 2 --
.../src/main/java/org/apache/sis/util/Debug.java | 20 +++++++++-----------
.../sis/util/resources/IndexedResourceBundle.java | 1 -
.../org/apache/sis/internal/util/CitationMock.java | 2 --
.../sis/storage/earthobservation/LandsatStore.java | 2 --
.../org/apache/sis/storage/geotiff/CRSBuilder.java | 2 --
.../org/apache/sis/internal/netcdf/GridGeometry.java | 7 +++++--
.../org/apache/sis/internal/netcdf/Variable.java | 2 --
.../sis/internal/netcdf/impl/ChannelDecoder.java | 2 --
.../apache/sis/internal/netcdf/impl/Dimension.java | 2 --
.../sis/internal/netcdf/ucar/DecoderWrapper.java | 2 --
.../apache/sis/storage/netcdf/MetadataReader.java | 4 ----
.../org/apache/sis/storage/netcdf/NetcdfStore.java | 2 --
.../sis/internal/sql/reverse/SchemaMetaModel.java | 2 --
.../sis/internal/sql/reverse/TableMetaModel.java | 2 --
.../apache/sis/internal/storage/io/ChannelData.java | 2 --
.../sis/internal/storage/query/SimpleQuery.java | 2 --
.../java/org/apache/sis/storage/ProbeResult.java | 2 --
.../org/apache/sis/storage/StorageConnector.java | 2 --
.../internal/storage/xml/stream/StaxDataStore.java | 2 --
.../apache/sis/internal/storage/gpx/WriterTest.java | 2 --
70 files changed, 15 insertions(+), 149 deletions(-)
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
index 713bbc0..246b203 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
@@ -21,7 +21,6 @@ import java.util.Iterator;
import java.io.Serializable;
import org.opengis.util.GenericName;
import org.opengis.metadata.quality.DataQuality;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.internal.feature.Resources;
@@ -225,7 +224,6 @@ public abstract class AbstractAssociation extends Field<Feature> implements Feat
*
* @return a string representation of this association for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final String pt = DefaultAssociationRole.getTitleProperty(role);
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
index 20e2303..8618d3c 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAttribute.java
@@ -28,7 +28,6 @@ import java.io.IOException;
import org.opengis.util.GenericName;
import org.opengis.metadata.quality.DataQuality;
import org.opengis.metadata.maintenance.ScopeCode;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.ArgumentChecks;
@@ -467,7 +466,6 @@ public abstract class AbstractAttribute<V> extends Field<V> implements Attribute
*
* @return a string representation of this attribute for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = FieldType.toString(isDeprecated(type), "Attribute", type.getName(),
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
index 8c2dcd0..fa35d1a 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractOperation.java
@@ -30,7 +30,6 @@ import org.opengis.parameter.GeneralParameterDescriptor;
import org.opengis.parameter.ParameterDescriptorGroup;
import org.opengis.parameter.ParameterValueGroup;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
// Branch-dependent imports
import org.opengis.feature.Attribute;
@@ -258,7 +257,6 @@ public abstract class AbstractOperation extends AbstractIdentifiedType implement
*
* @return a string representation of this operation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(40).append(Classes.getShortClassName(this)).append('[');
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
index 01932ab..44a88a0 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
@@ -26,7 +26,6 @@ import org.opengis.util.InternationalString;
import org.opengis.metadata.Identifier;
import org.apache.sis.internal.feature.Resources;
import org.apache.sis.internal.feature.AttributeConvention;
-import org.apache.sis.util.Debug;
import static org.apache.sis.util.ArgumentChecks.*;
@@ -524,7 +523,6 @@ public class DefaultAssociationRole extends FieldType implements FeatureAssociat
*
* @return a string representation of this association role for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return toString(deprecated, "FeatureAssociationRole", getName(), valueType.getName()).toString();
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
index d369031..cdb8258 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAttributeType.java
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.io.InvalidObjectException;
import org.opengis.util.GenericName;
import org.opengis.util.InternationalString;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.internal.util.Numerics;
@@ -366,7 +365,6 @@ public class DefaultAttributeType<V> extends FieldType implements AttributeType<
*
* @return a string representation of this attribute type for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return toString(deprecated, "AttributeType", getName(), Classes.getShortName(valueClass)).toString();
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java b/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
index 0c2ab30..c8e414b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/PropertyView.java
@@ -25,7 +25,6 @@ import java.io.Serializable;
import org.apache.sis.util.collection.CheckedContainer;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
import org.apache.sis.internal.feature.Resources;
// Branch-dependent imports
@@ -207,7 +206,6 @@ abstract class PropertyView<V> extends Field<V> implements Property, Serializabl
/**
* Returns a string representation of this property for debugging purposes.
*/
- @Debug
@Override
public final String toString() {
return FieldType.toString(false, getClass().getSimpleName(), getName(),
diff --git a/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java b/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
index 51089f6..3dffc1b 100644
--- a/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
+++ b/core/sis-feature/src/main/java/org/apache/sis/feature/builder/TypeBuilder.java
@@ -32,7 +32,6 @@ import org.apache.sis.util.NullArgumentException;
import org.apache.sis.util.Deprecable;
import org.apache.sis.util.Localized;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
// Branch-dependent imports
import org.opengis.feature.IdentifiedType;
@@ -539,7 +538,6 @@ public abstract class TypeBuilder implements Localized {
*
* @return a string representation of this object for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return appendStringTo(new StringBuilder(Classes.getShortClassName(this))).toString();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
index d467665..5436045 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/IdentifierMapAdapter.java
@@ -29,7 +29,6 @@ import java.util.Objects;
import java.io.Serializable;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
-import org.apache.sis.util.Debug;
import org.apache.sis.xml.XLink;
import org.apache.sis.xml.IdentifierMap;
import org.apache.sis.xml.IdentifierSpace;
@@ -525,7 +524,6 @@ public class IdentifierMapAdapter extends AbstractMap<Citation,String> implement
/**
* Returns the next value to be returned, for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
return Utilities.toString(Iter.class, "next", next);
@@ -546,7 +544,6 @@ public class IdentifierMapAdapter extends AbstractMap<Citation,String> implement
*
* @see SpecializedIdentifier#toString()
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(50).append('{');
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
index 0f8c157..593275a 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/SpecializedIdentifier.java
@@ -27,7 +27,6 @@ import org.apache.sis.xml.XLink;
import org.apache.sis.xml.IdentifierMap;
import org.apache.sis.xml.IdentifierSpace;
import org.apache.sis.xml.ValueConverter;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.resources.Messages;
import org.apache.sis.metadata.iso.citation.Citations;
@@ -267,7 +266,6 @@ public final class SpecializedIdentifier<T> implements Identifier, Cloneable, Se
*
* @see IdentifierMapAdapter#toString()
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(60).append("Identifier[");
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
index 413fbf9..476015d 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/LocalisedCharacterString.java
@@ -21,7 +21,6 @@ import java.util.Objects;
import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.XmlAttribute;
import org.apache.sis.internal.jaxb.Context;
-import org.apache.sis.util.Debug;
/**
@@ -135,7 +134,6 @@ final class LocalisedCharacterString {
*
* @see TextGroup#toString()
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(80)
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
index 5c1b65c..9f0eb80 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/jaxb/lan/TextGroup.java
@@ -18,7 +18,6 @@ package org.apache.sis.internal.jaxb.lan;
import java.util.Locale;
import javax.xml.bind.annotation.XmlElement;
-import org.apache.sis.util.Debug;
/**
@@ -123,7 +122,6 @@ final class TextGroup {
*
* @see LocalisedCharacterString#toString()
*/
- @Debug
@Override
public String toString() {
final String lineSeparator = System.lineSeparator();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
index f8a1dce..654c2fc 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/CitationConstant.java
@@ -28,7 +28,6 @@ import org.opengis.metadata.citation.Responsibility;
import org.opengis.metadata.citation.Series;
import org.opengis.metadata.identification.BrowseGraphic;
import org.opengis.util.InternationalString;
-import org.apache.sis.util.Debug;
import org.apache.sis.xml.IdentifierSpace;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.internal.metadata.ServicesForUtility;
@@ -92,7 +91,6 @@ public class CitationConstant extends SimpleCitation {
/**
* Returns a string representation of this identifier space.
*/
- @Debug
@Override
public final String toString() {
return "IdentifierSpace[" + title + ']';
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleCitation.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleCitation.java
index 266a03f..565b4ca 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleCitation.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleCitation.java
@@ -31,7 +31,6 @@ import org.opengis.metadata.citation.Series;
import org.opengis.metadata.identification.BrowseGraphic;
import org.opengis.util.InternationalString;
import org.apache.sis.util.iso.SimpleInternationalString;
-import org.apache.sis.util.Debug;
/**
@@ -125,7 +124,6 @@ public class SimpleCitation implements Citation, Serializable {
/**
* Returns a string representation of this citation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return "Citation[“" + title + "”]";
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleFormat.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleFormat.java
index 9472198..3e68625 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleFormat.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleFormat.java
@@ -18,7 +18,6 @@ package org.apache.sis.internal.simple;
import java.util.Collection;
import java.util.Collections;
-import org.apache.sis.util.Debug;
import org.opengis.util.InternationalString;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.distribution.Distributor;
@@ -157,7 +156,6 @@ public class SimpleFormat extends SimpleCitation implements Format {
/**
* Returns a string representation of this format for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return "Format[“" + title + "”]";
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
index 881dd36..d08bb5f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/simple/SimpleIdentifier.java
@@ -24,7 +24,6 @@ import org.opengis.metadata.citation.Citation;
import org.apache.sis.internal.util.Citations;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Deprecable;
import static org.apache.sis.util.iso.DefaultNameSpace.DEFAULT_SEPARATOR;
@@ -203,7 +202,6 @@ public class SimpleIdentifier implements Identifier, Deprecable, Serializable {
/**
* Returns a string representation of this identifier.
*/
- @Debug
@Override
public String toString() {
final String classname = Classes.getShortClassName(this);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Element.java b/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Element.java
index 3b6d419..e00c386 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Element.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Element.java
@@ -767,7 +767,6 @@ final class Element implements Serializable {
* Formats this {@code Element} as a tree.
* This method is used for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java b/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
index 0d7c085..202b4b0 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/io/wkt/Formatter.java
@@ -58,7 +58,6 @@ import org.opengis.referencing.operation.MathTransform;
import org.apache.sis.measure.Units;
import org.apache.sis.math.DecimalFunctions;
import org.apache.sis.util.iso.Types;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.Numbers;
import org.apache.sis.util.Localized;
@@ -1811,7 +1810,6 @@ public class Formatter implements Localized {
*
* @return a string representation of this formatter.
*/
- @Debug
@Override
public String toString() {
final StringBuilder b = new StringBuilder(Classes.getShortClassName(this));
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/CacheKey.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/CacheKey.java
index 47457d7..2d722cf 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/CacheKey.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/CacheKey.java
@@ -17,7 +17,6 @@
package org.apache.sis.metadata;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.resources.Errors;
@@ -94,7 +93,6 @@ final class CacheKey {
/**
* Returns a string representation for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
String name = Classes.getShortName(type);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
index 4027406..1e2af45 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
@@ -30,7 +30,6 @@ import java.lang.reflect.Field;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.ExtendedElementInformation;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.util.collection.TreeTable;
@@ -1050,7 +1049,6 @@ public class MetadataStandard implements Serializable {
* Returns a string representation of this metadata standard.
* This is for debugging purpose only and may change in any future version.
*/
- @Debug
@Override
public String toString() {
return Classes.getShortClassName(this) + '[' + citation.getTitle() + ']';
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/ObjectPair.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/ObjectPair.java
index 5fc45f0..5afc2e2 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/ObjectPair.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/ObjectPair.java
@@ -18,7 +18,6 @@ package org.apache.sis.metadata;
import java.util.Set;
import java.util.HashSet;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
@@ -78,7 +77,6 @@ final class ObjectPair {
/**
* Returns a string representation of the object pair for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
return '(' + Classes.getShortClassName(o1) + ", " + Classes.getShortClassName(o2) + ')';
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
index 442062f..4c4c4cb 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
@@ -31,7 +31,6 @@ import org.opengis.metadata.ExtendedElementInformation;
import org.apache.sis.internal.util.Citations;
import org.apache.sis.internal.util.Numerics;
import org.apache.sis.measure.ValueRange;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.Numbers;
import org.apache.sis.util.ArraysExt;
@@ -1287,7 +1286,6 @@ class PropertyAccessor {
* PropertyAccessor[13 getters & 13 setters in DefaultCitation:Citation from “ISO 19115”]
* }
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(60);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNode.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNode.java
index 591f70c..735e484 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNode.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNode.java
@@ -23,7 +23,6 @@ import java.util.Collections;
import java.util.Objects;
import java.util.NoSuchElementException;
import java.util.ConcurrentModificationException;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.iso.Types;
import org.apache.sis.util.CharSequences;
@@ -893,7 +892,6 @@ class TreeNode implements Node {
/**
* Returns a string representation of this node for debugging purpose.
*/
- @Debug
@Override
public final String toString() {
final StringBuilder buffer = new StringBuilder(60);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNodeChildren.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNodeChildren.java
index f567e2e..7e82ef2 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNodeChildren.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/TreeNodeChildren.java
@@ -25,7 +25,6 @@ import org.apache.sis.util.collection.BackingStoreException;
import org.apache.sis.util.collection.TableColumn;
import org.apache.sis.util.collection.TreeTable;
import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.Debug;
/**
@@ -609,7 +608,6 @@ final class TreeNodeChildren extends AbstractCollection<TreeTable.Node> {
* This string representation uses one line per element instead of formatting
* everything on a single line.
*/
- @Debug
@Override
public String toString() {
final String lineSeparator = System.lineSeparator();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameSpace.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameSpace.java
index c384c42..7d8cd60 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameSpace.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultNameSpace.java
@@ -28,7 +28,6 @@ import org.opengis.util.LocalName;
import org.opengis.util.ScopedName;
import org.opengis.util.GenericName;
import org.opengis.util.InternationalString;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.collection.WeakValueHashMap;
import org.apache.sis.internal.util.UnmodifiableArrayList;
@@ -491,7 +490,6 @@ public class DefaultNameSpace implements NameSpace, Serializable {
*
* @see Names#toExpandedString(GenericName)
*/
- @Debug
@Override
public String toString() {
return new StringBuilder(name.length() + 2).append('{').append(name).append('}').toString();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
index 3d5ad4c..7fdbbd5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecord.java
@@ -30,7 +30,6 @@ import javax.xml.bind.annotation.XmlValue;
import org.opengis.util.MemberName;
import org.opengis.util.Record;
import org.opengis.util.RecordType;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Utilities;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
@@ -390,7 +389,6 @@ public class DefaultRecord implements Record, Serializable {
*
* @return a string representation of this record.
*/
- @Debug
@Override
public String toString() {
return definition.toString("Record", values);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
index 533ae52..694008c 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/DefaultRecordSchema.java
@@ -30,7 +30,6 @@ import org.opengis.util.NameSpace;
import org.opengis.util.RecordSchema;
import org.opengis.util.RecordType;
import org.opengis.feature.AttributeType;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.ObjectConverter;
import org.apache.sis.util.ObjectConverters;
@@ -252,7 +251,6 @@ public class DefaultRecordSchema implements RecordSchema {
/**
* Returns a string representation of this schema for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
return "RecordSchema[“" + getSchemaName() + "”]";
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
index b8e3bb9..2efa1f8 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/util/iso/RecordDefinition.java
@@ -27,7 +27,6 @@ import org.opengis.util.Type;
import org.opengis.util.RecordType;
import org.opengis.util.MemberName;
import org.opengis.feature.AttributeType;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.Numbers;
import org.apache.sis.util.CharSequences;
@@ -224,7 +223,6 @@ abstract class RecordDefinition { // Inten
*
* @return a string representation of this record type.
*/
- @Debug
@Override
public String toString() {
return toString("RecordType", null);
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
index bd338a3..ca8fc28 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
@@ -17,7 +17,6 @@
package org.apache.sis.coverage.grid;
import java.util.Arrays;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
@@ -90,7 +89,6 @@ final class GridCoordinatesView implements GridCoordinates {
/**
* Returns a string representation of this grid coordinates for debugging purpose.
*/
- @Debug
@Override
public final String toString() {
return "GridCoordinates".concat(Arrays.toString(getCoordinateValues()));
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 7810f74..25a7db0 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -18,7 +18,6 @@ package org.apache.sis.coverage.grid;
import java.util.Arrays;
import java.io.Serializable;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.internal.raster.Resources;
@@ -310,7 +309,6 @@ public class GridExtent implements GridEnvelope, Serializable {
* Returns a string representation of this grid envelope. The returned string
* is implementation dependent and is provided for debugging purposes only.
*/
- @Debug
@Override
public String toString() {
final int dimension = getDimension();
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index d719a23..d0cb418 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -34,7 +34,6 @@ import org.apache.sis.geometry.GeneralDirectPosition;
import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.transform.PassThroughTransform;
import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.Debug;
// Branch-dependent imports
import org.opengis.coverage.grid.GridEnvelope;
@@ -585,7 +584,6 @@ public class GridGeometry implements Serializable {
* Returns a string representation of this grid geometry. The returned string
* is implementation dependent. It is provided for debugging purposes only.
*/
- @Debug
@Override
public String toString() {
return getClass().getSimpleName() + '[' + extent + ", " + gridToCRS + ']';
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index 4be0985..10a97e7 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -26,7 +26,6 @@ import org.opengis.referencing.datum.PixelInCell;
import org.opengis.metadata.spatial.PixelOrientation;
import static org.opengis.metadata.spatial.PixelOrientation.*;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Static;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.referencing.operation.matrix.Matrices;
@@ -363,7 +362,6 @@ public final class PixelTranslation extends Static implements Serializable {
/**
* Returns a string representation of this pixel translation.
*/
- @Debug
@Override
public String toString() {
return String.valueOf(orientation) + '[' + dx + ", " + dy + ']';
diff --git a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/AbstractLocation.java b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/AbstractLocation.java
index 1061d98..e8d02c7 100644
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/AbstractLocation.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/AbstractLocation.java
@@ -27,7 +27,6 @@ import org.opengis.util.InternationalString;
import org.apache.sis.util.iso.Types;
import org.apache.sis.geometry.Envelope2D;
import org.apache.sis.geometry.GeneralDirectPosition;
-import org.apache.sis.util.Debug;
// Branch-dependent imports
import org.opengis.metadata.citation.Party;
@@ -264,7 +263,6 @@ public abstract class AbstractLocation implements Location {
*
* @return a string representation of this location for debugging purpose.
*/
- @Debug
@Override
public String toString() {
synchronized (LocationFormat.INSTANCE) {
diff --git a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
index a1225e0..23bb329 100644
--- a/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
+++ b/core/sis-referencing-by-identifiers/src/main/java/org/apache/sis/referencing/gazetteer/MilitaryGridReferenceSystem.java
@@ -58,7 +58,6 @@ import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.StringBuilders;
import org.apache.sis.util.Utilities;
import org.apache.sis.util.Workaround;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.logging.Logging;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.resources.Vocabulary;
@@ -1279,7 +1278,6 @@ public class MilitaryGridReferenceSystem extends ReferencingByIdentifiers {
/**
* Returns a string representation of this iterator for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return org.apache.sis.internal.util.Utilities.toString(getClass(), "zone", encoder.crsZone,
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
index aa7f6a7..7cc2603 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/provider/DatumShiftGridFile.java
@@ -28,7 +28,6 @@ import org.opengis.referencing.operation.Matrix;
import org.opengis.referencing.operation.NoninvertibleTransformException;
import org.apache.sis.math.DecimalFunctions;
import org.apache.sis.util.collection.Cache;
-import org.apache.sis.util.Debug;
import org.apache.sis.parameter.Parameters;
import org.apache.sis.referencing.datum.DatumShiftGrid;
import org.apache.sis.referencing.operation.transform.LinearTransform;
@@ -313,7 +312,6 @@ public abstract class DatumShiftGridFile<C extends Quantity<C>, T extends Quanti
*
* @return a string representation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return Utilities.toString(getClass(), "file", (files.length != 0) ? files[0] : null);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/AbstractParameterDescriptor.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/AbstractParameterDescriptor.java
index 8efffa2..e9cef0e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/AbstractParameterDescriptor.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/AbstractParameterDescriptor.java
@@ -290,7 +290,6 @@ public abstract class AbstractParameterDescriptor extends AbstractIdentifiedObje
*
* <p>This method is for information purpose only and may change in future SIS version.</p>
*/
- @Debug
@Override
public String toString() {
if (this instanceof ParameterDescriptorGroup) {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
index e99649b..495fddd 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/Parameters.java
@@ -869,7 +869,6 @@ public abstract class Parameters implements ParameterValueGroup, Cloneable {
*
* @since 0.7
*/
- @Debug
@Override
public String toString() {
return ParameterFormat.sharedFormat(this);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/AuthorityFactoryIdentifier.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/AuthorityFactoryIdentifier.java
index bd6ef00..7c7ee5e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/AuthorityFactoryIdentifier.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/AuthorityFactoryIdentifier.java
@@ -26,7 +26,6 @@ import org.opengis.referencing.cs.CSAuthorityFactory;
import org.opengis.referencing.crs.CRSAuthorityFactory;
import org.opengis.referencing.datum.DatumAuthorityFactory;
import org.opengis.referencing.operation.CoordinateOperationAuthorityFactory;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.iso.DefaultNameSpace;
import org.apache.sis.util.resources.Vocabulary;
@@ -290,7 +289,6 @@ final class AuthorityFactoryIdentifier {
/**
* Returns a string representation of this identifier for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder();
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
index 1bcd8d5..bc02211 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/ConcurrentAuthorityFactory.java
@@ -188,7 +188,6 @@ public abstract class ConcurrentAuthorityFactory<DAO extends GeodeticAuthorityFa
/**
* Returns a string representation for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
final String text;
@@ -1632,7 +1631,7 @@ public abstract class ConcurrentAuthorityFactory<DAO extends GeodeticAuthorityFa
}
/** String representation used by {@link CacheRecord}. */
- @Override @Debug public String toString() {
+ @Override public String toString() {
final StringBuilder buffer = new StringBuilder();
if (type instanceof Class<?>) {
buffer.append("Code[“").append(code);
@@ -2135,7 +2134,6 @@ public abstract class ConcurrentAuthorityFactory<DAO extends GeodeticAuthorityFa
*
* @see #printCacheContent(PrintWriter)
*/
- @Debug
@Override
public String toString() {
final String s = super.toString();
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
index ebcc7a9..67ac1d2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/GeodeticAuthorityFactory.java
@@ -38,7 +38,6 @@ import org.apache.sis.util.iso.AbstractFactory;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
/**
@@ -1307,7 +1306,6 @@ public abstract class GeodeticAuthorityFactory extends AbstractFactory implement
*
* @return a string representation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(Classes.getShortClassName(this))
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AuthorityCodes.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AuthorityCodes.java
index f44a167..971cf83 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AuthorityCodes.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AuthorityCodes.java
@@ -28,7 +28,6 @@ import org.opengis.referencing.operation.Projection;
import org.apache.sis.util.collection.BackingStoreException;
import org.apache.sis.internal.util.AbstractMap;
import org.apache.sis.util.collection.IntegerList;
-import org.apache.sis.util.Debug;
/**
@@ -337,7 +336,6 @@ final class AuthorityCodes extends AbstractMap<String,String> implements Seriali
* Returns a string representation of this map for debugging purpose.
* This method does not let the default implementation format all entry, since it would be a costly operation.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder("AuthorityCodes[").append(type.getSimpleName());
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AxisName.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AxisName.java
index 9abc890..3d33956 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AxisName.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/factory/sql/AxisName.java
@@ -17,7 +17,6 @@
package org.apache.sis.referencing.factory.sql;
import java.util.Objects;
-import org.apache.sis.util.Debug;
/**
@@ -70,7 +69,6 @@ final class AxisName {
/**
* Returns a string representation of this object, for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
return name;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
index 8d10754..1665fb2 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/builder/LinearTransformBuilder.java
@@ -42,7 +42,6 @@ import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
/**
@@ -713,7 +712,6 @@ search: for (int j=0; j<numPoints; j++) {
*
* @return a string representation of this builder.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(Classes.getShortClassName(this)).append('[');
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
index 0c440e6..372b375 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/TransferFunction.java
@@ -24,7 +24,6 @@ import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.StringBuilders;
import org.apache.sis.util.Characters;
-import org.apache.sis.util.Debug;
/**
@@ -314,7 +313,6 @@ public class TransferFunction implements Cloneable, Serializable {
*
* @return a string representation of this transfer function.
*/
- @Debug
@Override
public String toString() {
final StringBuilder b = new StringBuilder("y = ");
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ClassPair.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ClassPair.java
index efbe1be..50defc1 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ClassPair.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ClassPair.java
@@ -18,7 +18,6 @@ package org.apache.sis.internal.converter;
import java.io.Serializable;
import org.apache.sis.util.ObjectConverter;
-import org.apache.sis.util.Debug;
/**
@@ -161,7 +160,6 @@ class ClassPair<S,T> implements Serializable {
* Returns a string representation for this entry.
* Used for formatting error messages.
*/
- @Debug
@Override
public String toString() {
return targetClass.getSimpleName() + " ← " + sourceClass.getSimpleName();
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
index 0eaa37c..ed31186 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/ConverterRegistry.java
@@ -18,7 +18,6 @@ package org.apache.sis.internal.converter;
import java.util.Map;
import java.util.LinkedHashMap;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.Numbers;
import org.apache.sis.util.ArgumentChecks;
@@ -561,7 +560,6 @@ public class ConverterRegistry {
*
* @return a string representation of registered converters.
*/
- @Debug
@Override
public String toString() {
final TreeTable table = Column.createTable();
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
index 8681f63..29f16d2 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/FallbackConverter.java
@@ -26,7 +26,6 @@ import org.apache.sis.util.ObjectConverter;
import org.apache.sis.util.UnconvertibleObjectException;
import org.apache.sis.util.collection.TreeTable;
import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.util.Debug;
/**
@@ -365,7 +364,6 @@ final class FallbackConverter<S,T> extends SystemConverter<S,T> {
* Returns a tree representation of this converter.
* The tree leaves represent the backing converters.
*/
- @Debug
@Override
public String toString() {
final TreeTable table = Column.createTable();
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/SurjectiveConverter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/SurjectiveConverter.java
index c507fea..e9326be 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/converter/SurjectiveConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/converter/SurjectiveConverter.java
@@ -20,7 +20,6 @@ import java.util.Set;
import java.util.EnumSet;
import org.apache.sis.util.ObjectConverter;
import org.apache.sis.math.FunctionProperty;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Classes;
import org.apache.sis.util.resources.Errors;
@@ -73,7 +72,6 @@ public abstract class SurjectiveConverter<S,T> implements ObjectConverter<S,T> {
/**
* Returns a string representation of this converter for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return Classes.getShortClassName(this) + '[' +
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMapEntry.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMapEntry.java
index a8b7f25..407276c 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMapEntry.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/AbstractMapEntry.java
@@ -18,7 +18,6 @@ package org.apache.sis.internal.util;
import java.util.Map;
import java.util.Objects;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.resources.Errors;
@@ -87,7 +86,6 @@ public abstract class AbstractMapEntry<K,V> implements Map.Entry<K,V> {
* of the value uses more than one line, then only the first line is shown.
* This method is mostly for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return String.valueOf(getKey()) + '=' + firstLine(getValue());
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/AngleFormat.java b/core/sis-utility/src/main/java/org/apache/sis/measure/AngleFormat.java
index 572dc9d..fbaaa78 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/AngleFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/AngleFormat.java
@@ -27,7 +27,6 @@ import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.AttributedCharacterIterator;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Localized;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
@@ -1867,7 +1866,6 @@ BigBoss: switch (skipSuffix(source, pos, DEGREES_FIELD)) {
/**
* Returns a string representation of this object for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return getClass().getSimpleName() + '[' + toPattern() + ']';
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java b/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
index d6e263e..f089e4c 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
@@ -22,7 +22,6 @@ import java.util.Collections;
import java.math.BigDecimal;
import java.math.BigInteger;
import javax.measure.UnitConverter;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.StringBuilders;
import org.apache.sis.util.ComparisonMode;
@@ -469,7 +468,6 @@ final class LinearConverter extends AbstractConverter implements LenientComparab
* This string representation may change in any future SIS release.
* Current format is of the form "y = scale⋅x + offset".
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder().append("y = ");
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/Debug.java b/core/sis-utility/src/main/java/org/apache/sis/util/Debug.java
index 7df3e82..5b7d903 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/Debug.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/Debug.java
@@ -24,20 +24,18 @@ import java.lang.annotation.RetentionPolicy;
/**
- * Annotates classes or methods that are provided mostly for debugging purpose. This annotation
- * is defined in order to make easier to find which debugging tools are available in case of
- * problem. See the <cite>"Use"</cite> javadoc link for a list of annotated classes and methods.
+ * Annotates classes or methods that are provided mostly for debugging purpose.
+ * This annotation is defined in order to make easier to find which debugging tools are available in case of problem.
+ * See the <cite>"Use"</cite> javadoc link for a list of annotated classes and methods.
*
- * <div class="section">{@code Object.toString()} policy</div>
- * Subclasses override the {@link Object#toString()} method for various purposes, sometime providing
- * content targeted to the end user (e.g. {@link java.lang.CharSequence}) and sometime providing
- * debugging information for developers only. In the Apache SIS library, {@code toString()}
- * methods without {@code @Debug} annotation shall be understandable by the end users,
- * while {@code toString()} methods with {@code @Debug} annotation is targeted to
- * developers and may change in any future version.
+ * <p>Unless specified otherwise in javadoc, {@link Object#toString()} method implementations in Apache SIS
+ * are implicitly for debugging purpose. Those methods are usually <em>not</em> annotated with {@code @Debug}
+ * in order to avoid polluting {@code @Debug} usage searches with long lists of {@code toString()} methods.
+ * As an exception to this convention, a {@code toString()} method may be annotated with {@code @Debug}
+ * in a few cases where we want to put emphasis on the method purpose as a debugging tools.</p>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.3
+ * @version 1.0
* @since 0.3
* @module
*/
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/IndexedResourceBundle.java b/core/sis-utility/src/main/java/org/apache/sis/util/resources/IndexedResourceBundle.java
index e13da1d..7890295 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/IndexedResourceBundle.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/IndexedResourceBundle.java
@@ -742,7 +742,6 @@ public class IndexedResourceBundle extends ResourceBundle implements Localized {
*
* @return a string representation of this resources bundle.
*/
- @Debug
@Override
public synchronized String toString() {
return getClass().getSimpleName() + '[' + getLocale() + ']';
diff --git a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CitationMock.java b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CitationMock.java
index e91116a..5632c55 100644
--- a/core/sis-utility/src/test/java/org/apache/sis/internal/util/CitationMock.java
+++ b/core/sis-utility/src/test/java/org/apache/sis/internal/util/CitationMock.java
@@ -30,7 +30,6 @@ import org.opengis.metadata.citation.Series;
import org.opengis.metadata.identification.BrowseGraphic;
import org.opengis.util.InternationalString;
import org.apache.sis.util.iso.SimpleInternationalString;
-import org.apache.sis.util.Debug;
/**
@@ -99,7 +98,6 @@ final strictfp class CitationMock implements Citation, Identifier {
/**
* Returns a string representation of this citation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return "Citation[“" + title + "”]";
diff --git a/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java b/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
index bf2ce98..00b20e2 100644
--- a/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
+++ b/storage/sis-earth-observation/src/main/java/org/apache/sis/storage/earthobservation/LandsatStore.java
@@ -33,7 +33,6 @@ import org.apache.sis.storage.event.ChangeEvent;
import org.apache.sis.storage.event.ChangeListener;
import org.apache.sis.internal.storage.URIDataStore;
import org.apache.sis.setup.OptionKey;
-import org.apache.sis.util.Debug;
/**
@@ -184,7 +183,6 @@ public class LandsatStore extends DataStore {
*
* @return a string representation of this datastore for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return getClass().getSimpleName() + '[' + getDisplayName() + ']';
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
index 53691bd..34c739e 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
@@ -85,7 +85,6 @@ import org.apache.sis.util.iso.DefaultNameSpace;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.Characters;
-import org.apache.sis.util.Debug;
import static org.apache.sis.util.Utilities.equalsIgnoreMetadata;
@@ -1705,7 +1704,6 @@ final class CRSBuilder {
/**
* Returns a string representation of the keys and associated values in this {@code CRSBuilder}.
*/
- @Debug
@Override
public final String toString() {
final StringBuilder buffer = new StringBuilder("GeoTIFF keys ").append(majorRevision).append('.')
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridGeometry.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridGeometry.java
index 1e7ff82..4e01b20 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridGeometry.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/GridGeometry.java
@@ -24,8 +24,11 @@ import org.apache.sis.storage.DataStoreException;
* Information about the grid geometry and the conversion from grid coordinates to geodetic coordinates.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.3
+ * @version 1.0
+ *
+ * @see Decoder#getGridGeometries()
+ *
+ * @since 0.3
* @module
*/
public abstract class GridGeometry {
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
index 702916d..3a5d650 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/Variable.java
@@ -21,7 +21,6 @@ import java.io.IOException;
import java.awt.image.DataBuffer;
import org.apache.sis.math.Vector;
import org.apache.sis.storage.DataStoreException;
-import org.apache.sis.util.Debug;
/**
@@ -232,7 +231,6 @@ public abstract class Variable extends NamedElement {
*
* @return a string representation of this variable.
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder(getName()).append(" : ").append(getDataType());
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java
index dc2f356..b393bd3 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/ChannelDecoder.java
@@ -57,7 +57,6 @@ import org.apache.sis.util.iso.DefaultNameSpace;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.resources.Vocabulary;
import org.apache.sis.util.logging.WarningListeners;
-import org.apache.sis.util.Debug;
import org.apache.sis.setup.GeometryLibrary;
import org.apache.sis.measure.Units;
import ucar.nc2.constants.CF;
@@ -860,7 +859,6 @@ nextVar: for (final VariableInfo variable : variables) {
*
* @return {@inheritDoc}
*/
- @Debug
@Override
public String toString() {
final StringBuilder buffer = new StringBuilder();
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/Dimension.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/Dimension.java
index 0191840..2851128 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/Dimension.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/impl/Dimension.java
@@ -17,7 +17,6 @@
package org.apache.sis.internal.netcdf.impl;
import org.apache.sis.internal.netcdf.NamedElement;
-import org.apache.sis.util.Debug;
/**
@@ -71,7 +70,6 @@ final class Dimension extends NamedElement {
/**
* A string representation of this dimension for debugging purpose only.
*/
- @Debug
@Override
public String toString() {
return name + '[' + length() + ']';
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
index 7b36f92..62486b5 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/internal/netcdf/ucar/DecoderWrapper.java
@@ -38,7 +38,6 @@ import ucar.nc2.ft.FeatureDataset;
import ucar.nc2.ft.FeatureDatasetPoint;
import ucar.nc2.ft.FeatureDatasetFactoryManager;
import ucar.nc2.ft.FeatureCollection;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.ArraysExt;
import org.apache.sis.util.logging.WarningListeners;
import org.apache.sis.internal.netcdf.Decoder;
@@ -465,7 +464,6 @@ public final class DecoderWrapper extends Decoder implements CancelTask {
* Returns a string representation to be inserted in {@link org.apache.sis.storage.netcdf.NetcdfStore#toString()}
* result. This is for debugging purpose only any may change in any future SIS version.
*/
- @Debug
@Override
public String toString() {
return "UCAR driver: “" + getFilename() + '”';
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 0158a85..8d1937d 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -630,10 +630,6 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
final Responsibility r = createResponsibleParty(PUBLISHER, false);
if (r != null) {
addDistributor(r);
- /*
- * TODO: There is some transfert option, etc. that we could set there.
- * See UnidataDD2MI.xsl for options for OPeNDAP, THREDDS, etc.
- */
for (final Party party : r.getParties()) {
publisher = addIfNonNull(publisher, party.getName());
}
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStore.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStore.java
index 6127c49..6de3431 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStore.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/NetcdfStore.java
@@ -22,7 +22,6 @@ import java.util.List;
import java.util.Collection;
import org.opengis.metadata.Metadata;
import org.opengis.parameter.ParameterValueGroup;
-import org.apache.sis.util.Debug;
import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.UnsupportedStorageException;
@@ -221,7 +220,6 @@ public class NetcdfStore extends DataStore implements Aggregate {
*
* @return a string representation of this data store for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return getClass().getSimpleName() + '[' + decoder + ']';
diff --git a/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java b/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java
index ed90ccd..f53866a 100644
--- a/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java
+++ b/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/SchemaMetaModel.java
@@ -19,7 +19,6 @@ package org.apache.sis.internal.sql.reverse;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
-import org.apache.sis.util.Debug;
/**
@@ -62,7 +61,6 @@ final class SchemaMetaModel extends MetaModel {
/**
* Returns a string representation of this schema for debugging purposes.
*/
- @Debug
@Override
public String toString() {
final StringBuilder sb = new StringBuilder(100);
diff --git a/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java b/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java
index 97254d1..e80bf45 100644
--- a/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java
+++ b/storage/sis-sql/src/main/java/org/apache/sis/internal/sql/reverse/TableMetaModel.java
@@ -19,7 +19,6 @@ package org.apache.sis.internal.sql.reverse;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.sis.feature.builder.FeatureTypeBuilder;
-import org.apache.sis.util.Debug;
/**
@@ -100,7 +99,6 @@ final class TableMetaModel extends MetaModel {
/**
* Returns a string representation of this schema for debugging purposes.
*/
- @Debug
@Override
public String toString() {
final String lineSeparator = System.lineSeparator();
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/ChannelData.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/ChannelData.java
index dc20bca..72d69b4 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/ChannelData.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/io/ChannelData.java
@@ -22,7 +22,6 @@ import java.nio.InvalidMarkException;
import java.nio.channels.Channel;
import java.nio.channels.SeekableByteChannel;
import org.apache.sis.util.resources.Errors;
-import org.apache.sis.util.Debug;
import static org.apache.sis.util.ArgumentChecks.ensureBetween;
@@ -326,7 +325,6 @@ public abstract class ChannelData implements Markable {
*
* @return a string representation of this object.
*/
- @Debug
@Override
public String toString() {
final StringBuilder b = new StringBuilder().append(getClass().getSimpleName()).append("[“").append(filename).append('”');
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SimpleQuery.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SimpleQuery.java
index 1fe6b63..b4eaa62 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SimpleQuery.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/query/SimpleQuery.java
@@ -27,7 +27,6 @@ import org.apache.sis.storage.FeatureSet;
import org.apache.sis.storage.Query;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.Classes;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.iso.Names;
import org.apache.sis.util.resources.Errors;
@@ -348,7 +347,6 @@ public class SimpleQuery extends Query {
*
* @return a string representation of this column.
*/
- @Debug
@Override
public String toString() {
final StringBuilder b = new StringBuilder(getClass().getSimpleName()).append('[');
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeResult.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeResult.java
index ce4db5a..c3e6e4b 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeResult.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/ProbeResult.java
@@ -19,7 +19,6 @@ package org.apache.sis.storage;
import java.util.Objects;
import java.io.Serializable;
import java.io.ObjectStreamException;
-import org.apache.sis.util.Debug;
import org.apache.sis.util.Version;
import org.apache.sis.internal.util.Utilities;
@@ -250,7 +249,6 @@ public class ProbeResult implements Serializable {
/**
* Returns a string representation of this {@code ProbeResult} for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return Utilities.toString(getClass(), "isSupported", isSupported, "mimeType", mimeType, "version", version);
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
index 1461665..7566008 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/StorageConnector.java
@@ -503,7 +503,6 @@ public class StorageConnector implements Serializable {
/**
* Returns a string representation for debugging purpose.
*/
- @Debug
@Override
public String toString() {
return Utilities.toString(getClass(),
@@ -1361,7 +1360,6 @@ public class StorageConnector implements Serializable {
*
* @return a string representation of this {@code StorageConnector} for debugging purpose.
*/
- @Debug
@Override
public String toString() {
final TreeTable table = new DefaultTreeTable(TableColumn.NAME, TableColumn.VALUE);
diff --git a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxDataStore.java b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxDataStore.java
index 55eeaa2..4ec33e1 100644
--- a/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxDataStore.java
+++ b/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/xml/stream/StaxDataStore.java
@@ -53,7 +53,6 @@ import org.apache.sis.storage.DataStoreClosedException;
import org.apache.sis.storage.ForwardOnlyStorageException;
import org.apache.sis.storage.UnsupportedStorageException;
import org.apache.sis.util.logging.WarningListener;
-import org.apache.sis.util.Debug;
/**
@@ -364,7 +363,6 @@ public abstract class StaxDataStore extends URIDataStore {
/**
* Do not format all properties for avoiding a never-ending loop.
*/
- @Debug
@Override
public String toString() {
return Utilities.toString(getClass(), "locale", locale, "timezone", timezone);
diff --git a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
index 6287931..4b39b7d 100644
--- a/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
+++ b/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
@@ -27,7 +27,6 @@ import org.apache.sis.storage.gps.Fix;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.StorageConnector;
import org.apache.sis.util.Version;
-import org.apache.sis.util.Debug;
import org.apache.sis.test.DependsOn;
import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.TestUtilities;
@@ -94,7 +93,6 @@ public final strictfp class WriterTest extends TestCase {
*
* @return the XML document written by the test case.
*/
- @Debug
@Override
public String toString() {
try {
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 27/31: Take in account the change in number of dimensions
when creating GeoTIFF GridGeometry. Fill more metadata using GridGeometry
information.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 64c22fb1a1e56650cdd8737b5effc4dcd5e51176
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Fri Jun 8 13:07:55 2018 +0000
Take in account the change in number of dimensions when creating GeoTIFF GridGeometry.
Fill more metadata using GridGeometry information.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833166 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/coverage/grid/GridExtent.java | 182 ++++++++++++++++++---
.../org/apache/sis/coverage/grid/GridGeometry.java | 98 ++++++++++-
.../apache/sis/coverage/grid/GridGeometryTest.java | 13 +-
.../java/org/apache/sis/util/resources/Errors.java | 5 +
.../apache/sis/util/resources/Errors.properties | 1 +
.../apache/sis/util/resources/Errors_fr.properties | 1 +
.../org/apache/sis/internal/geotiff/Resources.java | 2 +-
.../sis/internal/geotiff/Resources.properties | 2 +-
.../sis/internal/geotiff/Resources_fr.properties | 2 +-
.../org/apache/sis/storage/geotiff/CRSBuilder.java | 17 +-
.../sis/storage/geotiff/GridGeometryBuilder.java | 85 ++++++----
.../sis/storage/geotiff/ImageFileDirectory.java | 11 +-
.../apache/sis/storage/geotiff/Localization.java | 5 +-
.../apache/sis/storage/netcdf/MetadataReader.java | 34 ++--
.../sis/internal/storage/MetadataBuilder.java | 92 ++++++++++-
15 files changed, 456 insertions(+), 94 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 6c5604c..9d972de 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -17,16 +17,21 @@
package org.apache.sis.coverage.grid;
import java.util.Arrays;
+import java.util.Optional;
import java.io.Serializable;
import org.opengis.geometry.DirectPosition;
+import org.opengis.metadata.spatial.DimensionNameType;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.collection.WeakValueHashMap;
import org.apache.sis.internal.raster.Resources;
import org.apache.sis.geometry.GeneralEnvelope;
import org.apache.sis.geometry.Envelopes;
import org.apache.sis.geometry.GeneralDirectPosition;
+import org.apache.sis.io.TableAppender;
+import org.apache.sis.util.iso.Types;
// Branch-dependent imports
import org.opengis.coverage.grid.GridEnvelope;
@@ -61,6 +66,30 @@ public class GridExtent implements Serializable {
private static final long serialVersionUID = -4717353677844056017L;
/**
+ * Default axis types for the two-dimensional cases.
+ */
+ private static final DimensionNameType[] DEFAULT_TYPES = new DimensionNameType[] {
+ DimensionNameType.COLUMN,
+ DimensionNameType.ROW
+ };
+
+ /**
+ * A pool of shared {@link DimensionNameType} arrays. We use a pool
+ * because a small amount of arrays is shared by most grid extent.
+ */
+ private static final WeakValueHashMap<DimensionNameType[],DimensionNameType[]> POOL = new WeakValueHashMap<>(DimensionNameType[].class);
+
+ /**
+ * Type of each axis (vertical, temporal, …) or {@code null} if unspecified.
+ * If non-null, the array length shall be equal to {@link #getDimension()}.
+ * Any array element may be null if unspecified for that particular axis.
+ * The same array may be shared by many {@code GridExtent} instances.
+ *
+ * @see #getAxisType(int)
+ */
+ private final DimensionNameType[] types;
+
+ /**
* Minimum and maximum grid ordinates. The first half contains minimum ordinates (inclusive),
* while the last half contains maximum ordinates (<strong>inclusive</strong>). Note that the
* later is the opposite of Java2D usage but conform to ISO specification.
@@ -99,14 +128,72 @@ public class GridExtent implements Serializable {
}
/**
+ * Verifies that the given array (if non-null) contains no duplicated values, then returns a copy of that array.
+ * The returned copy may be shared by many {@code GridExtent} instances. Consequently it shall not be modified.
+ */
+ @SuppressWarnings("ReturnOfCollectionOrArrayField")
+ private static DimensionNameType[] validateAxisTypes(DimensionNameType[] types) {
+ if (types == null) {
+ return null;
+ }
+ if (Arrays.equals(DEFAULT_TYPES, types)) { // Common case verified before POOL synchronized lock.
+ return DEFAULT_TYPES;
+ }
+ DimensionNameType[] shared = POOL.get(types);
+ if (shared == null) {
+ /*
+ * Verify the array only if it was not found in the pool. Arrays in the pool were already validated,
+ * so do not need to be verified again. The check performed here is inefficient (nested loop), but it
+ * should be okay since the arrays are usually small (less than 5 elements) and the checks should not
+ * be done often (because of the pool).
+ */
+ types = types.clone();
+ for (int i=1; i<types.length; i++) {
+ final DimensionNameType t = types[i];
+ if (t != null) {
+ for (int j=i; --j >= 0;) {
+ if (t.equals(types[j])) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.DuplicatedElement_1, t));
+ }
+ }
+ }
+ }
+ shared = POOL.putIfAbsent(types, types);
+ if (shared == null) {
+ return types;
+ }
+ }
+ return shared;
+ }
+
+ /**
* Creates an initially empty grid envelope with the given number of dimensions.
* All grid coordinate values are initialized to zero. This constructor is private
* since {@code GridExtent} coordinate values can not be modified by public API.
*
* @param dimension number of dimensions.
+ * @param axisTypes the axis types, or {@code null} if unspecified.
*/
- private GridExtent(final int dimension) {
+ private GridExtent(final int dimension, final DimensionNameType[] axisTypes) {
ordinates = allocate(dimension);
+ types = validateAxisTypes(axisTypes);
+ }
+
+ /**
+ * Creates a new grid extent for an image or matrix of the given size.
+ * The {@linkplain #getLow() low} grid coordinates are zeros and the axis types are
+ * {@link DimensionNameType#COLUMN} and {@link DimensionNameType#ROW ROW} in that order.
+ *
+ * @param width number of pixels in each row.
+ * @param height number of pixels in each column.
+ */
+ public GridExtent(final long width, final long height) {
+ ArgumentChecks.ensureStrictlyPositive("width", width);
+ ArgumentChecks.ensureStrictlyPositive("height", height);
+ ordinates = new long[4];
+ ordinates[2] = width - 1;
+ ordinates[3] = height - 1;
+ types = DEFAULT_TYPES;
}
/**
@@ -115,8 +202,21 @@ public class GridExtent implements Serializable {
* The lowest valid grid coordinates are often zero, but this is not mandatory.
* As a convenience for this common case, a null {@code low} array means that all low coordinates are zero.
*
- * @param low the valid minimum grid coordinate (always inclusive), or {@code null} for all zeros.
- * @param high the valid maximum grid coordinate, inclusive or exclusive depending on the next argument.
+ * <p>An optional (nullable) {@code axisTypes} argument can be used for attaching a label to each grid axis.
+ * For example if this {@code GridExtent} is four-dimensional, then the axis types may be
+ * {{@linkplain DimensionNameType#COLUMN column} (<var>x</var>),
+ * {@linkplain DimensionNameType#ROW row} (<var>y</var>),
+ * {@linkplain DimensionNameType#VERTICAL vertical (<var>z</var>),
+ * {@linkplain DimensionNameType#TIME time} (<var>t</var>)},
+ * which means that the last axis is for the temporal dimension, the third axis is for the vertical dimension, <i>etc.</i>
+ * This information is related to the "real world" coordinate reference system axes, but not necessarily in the same order;
+ * it is caller responsibility to ensure that the grid axes are consistent with the CRS axes.
+ * The {@code axisTypes} array shall not contain duplicated elements,
+ * but may contain {@code null} elements if the type of some axes are unknown.</p>
+ *
+ * @param axisTypes the type of each grid axis, or {@code null} if unspecified.
+ * @param low the valid minimum grid coordinate (always inclusive), or {@code null} for all zeros.
+ * @param high the valid maximum grid coordinate, inclusive or exclusive depending on the next argument.
* @param isHighIncluded {@code true} if the {@code high} values are inclusive (as in ISO 19123 specification),
* or {@code false} if they are exclusive (as in Java2D usage).
* This argument does not apply to {@code low} values, which are always inclusive.
@@ -126,12 +226,15 @@ public class GridExtent implements Serializable {
* @see #getLow()
* @see #getHigh()
*/
- public GridExtent(final long[] low, final long[] high, final boolean isHighIncluded) {
+ public GridExtent(final DimensionNameType[] axisTypes, final long[] low, final long[] high, final boolean isHighIncluded) {
ArgumentChecks.ensureNonNull("high", high);
final int dimension = high.length;
if (low != null && low.length != dimension) {
throw new IllegalArgumentException(Errors.format(Errors.Keys.MismatchedDimension_2, low.length, dimension));
}
+ if (axisTypes != null && axisTypes.length != dimension) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.MismatchedArrayLengths));
+ }
ordinates = allocate(dimension);
if (low != null) {
System.arraycopy(low, 0, ordinates, 0, dimension);
@@ -143,6 +246,7 @@ public class GridExtent implements Serializable {
}
}
checkCoherence(ordinates);
+ types = validateAxisTypes(axisTypes);
}
/**
@@ -161,6 +265,7 @@ public class GridExtent implements Serializable {
ordinates[i + dimension] = extent.getHigh(i);
}
checkCoherence(ordinates);
+ types = (extent instanceof GridExtent) ? ((GridExtent) extent).types : null;
}
/**
@@ -251,16 +356,16 @@ public class GridExtent implements Serializable {
* Returns the number of integer grid coordinates along the specified dimension.
* This is equal to {@code getHigh(dimension) - getLow(dimension) + 1}.
*
- * @param index the dimension for which to obtain the span.
- * @return the span at the given dimension.
+ * @param index the dimension for which to obtain the size.
+ * @return the number of integer grid coordinates along the given dimension.
* @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
* than the {@linkplain #getDimension() grid dimension}.
- * @throws ArithmeticException if the span is too large for the {@code long} primitive type.
+ * @throws ArithmeticException if the size is too large for the {@code long} primitive type.
*
* @see #getLow(int)
* @see #getHigh(int)
*/
- public long getSpan(final int index) {
+ public long getSize(final int index) {
final int dimension = getDimension();
ArgumentChecks.ensureValidIndex(dimension, index);
return Math.incrementExact(Math.subtractExact(ordinates[dimension + index], ordinates[index]));
@@ -284,6 +389,33 @@ public class GridExtent implements Serializable {
}
/**
+ * Returns the type (vertical, temporal, …) of grid axis at given dimension.
+ * This information is provided because the grid axis type can not always be inferred from the context.
+ * Some examples are:
+ *
+ * <ul>
+ * <li>{@code getAxisType(0)} may return {@link DimensionNameType#COLUMN},
+ * {@link DimensionNameType#TRACK TRACK} or {@link DimensionNameType#LINE LINE}.</li>
+ * <li>{@code getAxisType(1)} may return {@link DimensionNameType#ROW},
+ * {@link DimensionNameType#CROSS_TRACK CROSS_TRACK} or {@link DimensionNameType#SAMPLE SAMPLE}.</li>
+ * <li>{@code getAxisType(2)} may return {@link DimensionNameType#VERTICAL}.</li>
+ * <li>{@code getAxisType(3)} may return {@link DimensionNameType#TIME}.</li>
+ * </ul>
+ *
+ * Above are only examples; there is no constraint on axis order. In particular grid axes do not need to be in the same
+ * order than the corresponding {@linkplain GridGeometry#getCoordinateReferenceSystem() coordinate reference system} axes.
+ *
+ * @param index the dimension for which to obtain the axis type.
+ * @return the axis type at the given dimension. May be absent if the type is unknown.
+ * @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
+ * than the {@linkplain #getDimension() grid dimension}.
+ */
+ public Optional<DimensionNameType> getAxisType(final int index) {
+ ArgumentChecks.ensureValidIndex(getDimension(), index);
+ return Optional.ofNullable((types != null) ? types[index] : null);
+ }
+
+ /**
* Transforms this grid extent to a "real world" envelope using the given transform.
* The transform shall map <em>pixel corner</em> to real world coordinates.
*
@@ -307,18 +439,21 @@ public class GridExtent implements Serializable {
*
* @param lower the first dimension to copy, inclusive.
* @param upper the last dimension to copy, exclusive.
- * @return the sub grid envelope.
+ * @return the sub-envelope, or {@code this} if [{@code lower} … {@code upper}] is [0 … {@link #getDimension() dimension}].
* @throws IndexOutOfBoundsException if an index is out of bounds.
*/
public GridExtent subExtent(final int lower, final int upper) {
final int dimension = getDimension();
- if (lower == 0 && upper == dimension) return this;
ArgumentChecks.ensureValidIndexRange(dimension, lower, upper);
final int newDim = upper - lower;
- if (newDim == dimension && getClass() == GridExtent.class) {
+ if (newDim == dimension) {
return this;
}
- final GridExtent sub = new GridExtent(newDim);
+ DimensionNameType[] axisTypes = types;
+ if (axisTypes != null) {
+ axisTypes = Arrays.copyOfRange(axisTypes, lower, upper);
+ }
+ final GridExtent sub = new GridExtent(newDim, axisTypes);
System.arraycopy(ordinates, lower, sub.ordinates, 0, newDim);
System.arraycopy(ordinates, lower+dimension, sub.ordinates, newDim, newDim);
return sub;
@@ -332,7 +467,7 @@ public class GridExtent implements Serializable {
*/
@Override
public int hashCode() {
- return Arrays.hashCode(ordinates) ^ (int) serialVersionUID;
+ return Arrays.hashCode(ordinates) + Arrays.hashCode(types) ^ (int) serialVersionUID;
}
/**
@@ -343,8 +478,9 @@ public class GridExtent implements Serializable {
*/
@Override
public boolean equals(final Object object) {
- if (object instanceof GridExtent) {
- return Arrays.equals(ordinates, ((GridExtent) object).ordinates);
+ if (object != null && object.getClass() == GridExtent.class) {
+ final GridExtent other = (GridExtent) object;
+ return Arrays.equals(ordinates, other.ordinates) && Arrays.equals(types, other.types);
}
return false;
}
@@ -355,12 +491,20 @@ public class GridExtent implements Serializable {
*/
@Override
public String toString() {
+ final TableAppender table = new TableAppender(" ");
final int dimension = getDimension();
- final StringBuilder buffer = new StringBuilder("GridEnvelope").append('[');
for (int i=0; i<dimension; i++) {
- if (i != 0) buffer.append(", ");
- buffer.append(ordinates[i]).append('…').append(ordinates[i + dimension]);
+ String name;
+ if ((types == null) || (name = Types.getCodeLabel(types[i])) == null) {
+ name = Integer.toString(i);
+ }
+ table.append(name).append(':').nextColumn();
+ table.setCellAlignment(TableAppender.ALIGN_RIGHT);
+ table.append(Long.toString(ordinates[i])).nextColumn();
+ table.append("to").nextColumn();
+ table.append(Long.toString(ordinates[i + dimension])).nextLine();
+ table.setCellAlignment(TableAppender.ALIGN_LEFT);
}
- return buffer.append(']').toString();
+ return table.toString();
}
}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index de064a0..7804e5d 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -27,6 +27,7 @@ import org.opengis.referencing.operation.Matrix;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.cs.CoordinateSystem;
import org.apache.sis.math.MathFunctions;
import org.apache.sis.geometry.GeneralEnvelope;
import org.apache.sis.geometry.ImmutableEnvelope;
@@ -35,6 +36,8 @@ import org.apache.sis.referencing.operation.transform.PassThroughTransform;
import org.apache.sis.internal.raster.Resources;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.CharSequences;
+import org.apache.sis.util.Debug;
/**
@@ -711,9 +714,102 @@ public class GridGeometry implements Serializable {
/**
* Returns a string representation of this grid geometry. The returned string
* is implementation dependent. It is provided for debugging purposes only.
+ * Current implementation is equivalent to the following:
+ *
+ * {@preformat java
+ * return toString(EXTENT | CRS | GRID_TO_CRS | RESOLUTION);
+ * }
*/
@Override
public String toString() {
- return getClass().getSimpleName() + '[' + extent + ", " + gridToCRS + ']';
+ return toString(EXTENT | CRS | GRID_TO_CRS | RESOLUTION);
+ }
+
+ /**
+ * Returns a string representation of some elements of this grid geometry.
+ * The string representation is for debugging purpose only and may change
+ * in any future SIS version.
+ *
+ * @param bitmask any combination of {@link #EXTENT}, {@link #CRS},
+ * {@link #GRID_TO_CRS} and {@link #RESOLUTION}.
+ * @return a string representation of the given elements.
+ */
+ @Debug
+ public String toString(final int bitmask) {
+ if ((bitmask & ~(EXTENT | CRS | GRID_TO_CRS | RESOLUTION)) != 0) {
+ throw new IllegalArgumentException(Errors.format(
+ Errors.Keys.IllegalArgumentValue_2, "bitmask", bitmask));
+ }
+ final boolean visible = Integer.bitCount(bitmask) >= 2;
+ final int dimension = (extent != null) ? extent.getDimension() : 0;
+ final StringBuilder buffer = new StringBuilder();
+ if ((bitmask & EXTENT) != 0) {
+ appendLabel(buffer, "Grid size", visible);
+ if (dimension == 0) {
+ buffer.append("unspecified");
+ } else for (int i=0; i<dimension; i++) {
+ if (i != 0) buffer.append(" × ");
+ buffer.append(extent.getSize(i));
+ }
+ appendLabel(buffer, "Grid low", visible);
+ if (dimension == 0) {
+ buffer.append("unspecified");
+ } else for (int i=0; i<dimension; i++) {
+ if (i != 0) buffer.append(", ");
+ buffer.append(extent.getLow(i));
+ }
+ }
+ CoordinateSystem cs = null;
+ if ((bitmask & CRS) != 0) {
+ appendLabel(buffer, "CRS", visible);
+ CoordinateReferenceSystem crs;
+ if (envelope == null || (crs = envelope.getCoordinateReferenceSystem()) == null) {
+ buffer.append("unspecified");
+ } else {
+ buffer.append(crs.getName());
+ cs = crs.getCoordinateSystem();
+ }
+ }
+ if ((bitmask & GRID_TO_CRS) != 0) {
+ appendLabel(buffer, "Conversion", visible);
+ if (gridToCRS == null) {
+ buffer.append("unspecified");
+ } else {
+ buffer.append(gridToCRS.getSourceDimensions()).append("D → ")
+ .append(gridToCRS.getTargetDimensions()).append('D');
+ long nonLinearDimensions = nonLinears;
+ String separator = " non linear in ";
+ while (nonLinearDimensions != 0) {
+ final int i = Long.numberOfTrailingZeros(nonLinearDimensions);
+ nonLinearDimensions &= ~(1L << i);
+ buffer.append(separator).append(cs != null ? cs.getAxis(i).getName() : String.valueOf(i));
+ separator = ", ";
+ }
+ }
+ }
+ if ((bitmask & RESOLUTION) != 0) {
+ appendLabel(buffer, "Resolution", visible);
+ if (resolution == null) {
+ buffer.append("unspecified");
+ } for (int i=0; i<resolution.length; i++) {
+ if (i != 0) buffer.append(" × ");
+ buffer.append((float) resolution[i]);
+ if (cs != null) {
+ buffer.append(' ').append(cs.getAxis(i).getUnit());
+ }
+ }
+ }
+ return buffer.append(System.lineSeparator()).toString();
+ }
+
+ /**
+ * Appends the given text to the given buffer, followed by colon and spaces.
+ * Adjusted for the specific needs of {@link #toString()} implementation.
+ */
+ private static void appendLabel(final StringBuilder appendTo, final String label, final boolean visible) {
+ if (appendTo.length() != 0) appendTo.append(System.lineSeparator());
+ if (visible) {
+ appendTo.append(label).append(':').append(CharSequences.spaces(12 - label.length()));
+ }
}
}
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
index 164907e..f660f76 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.sis.coverage.grid;
+import org.opengis.metadata.spatial.DimensionNameType;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
@@ -56,7 +57,7 @@ public final strictfp class GridGeometryTest extends TestCase {
public void testFromPixelCorner() throws TransformException {
final long[] low = new long[] {100, 300, 3, 6};
final long[] high = new long[] {200, 400, 4, 7};
- final GridExtent extent = new GridExtent(low, high, true);
+ final GridExtent extent = new GridExtent(null, low, high, true);
final MathTransform identity = MathTransforms.identity(4);
final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CORNER, identity, null);
/*
@@ -102,7 +103,7 @@ public final strictfp class GridGeometryTest extends TestCase {
public void testFromPixelCenter() throws TransformException {
final long[] low = new long[] { 0, 0, 2};
final long[] high = new long[] {99, 199, 4};
- final GridExtent extent = new GridExtent(low, high, true);
+ final GridExtent extent = new GridExtent(null, low, high, true);
final MathTransform identity = MathTransforms.identity(3);
final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, identity, null);
/*
@@ -148,7 +149,7 @@ public final strictfp class GridGeometryTest extends TestCase {
public void testShifted() throws TransformException {
final long[] low = new long[] {100, 300};
final long[] high = new long[] {200, 400};
- final GridExtent extent = new GridExtent(low, high, true);
+ final GridExtent extent = new GridExtent(null, low, high, true);
final MathTransform identity = MathTransforms.linear(new Matrix3(
1, 0, 0.5,
0, 1, 0.5,
@@ -165,6 +166,12 @@ public final strictfp class GridGeometryTest extends TestCase {
@Test
public void testNonLinear() throws TransformException {
final GridExtent extent = new GridExtent(
+ new DimensionNameType[] {
+ DimensionNameType.COLUMN,
+ DimensionNameType.ROW,
+ DimensionNameType.VERTICAL,
+ DimensionNameType.TIME
+ },
new long[] {0, 0, 2, 6},
new long[] {100, 200, 3, 9}, false);
final MathTransform horizontal = MathTransforms.linear(Matrices.create(3, 3, new double[] {
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
index 6dce9dc..2b15ca1 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.java
@@ -86,6 +86,11 @@ public final class Errors extends IndexedResourceBundle {
public static final short CanNotAssignUnitToDimension_2 = 3;
/**
+ * Can not assign units “{1}” to variable “{0}”.
+ */
+ public static final short CanNotAssignUnitToVariable_2 = 183;
+
+ /**
* Can not assign “{1}” to “{0}”.
*/
public static final short CanNotAssign_2 = 4;
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
index 3a4e67a..864ce7c 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors.properties
@@ -29,6 +29,7 @@ CanIterateOnlyOnce = This object can iterate only once.
CanNotAddToExclusiveSet_2 = No element can be added to this set because properties \u2018{0}\u2019 and \u2018{1}\u2019 are mutually exclusive.
CanNotAssign_2 = Can not assign \u201c{1}\u201d to \u201c{0}\u201d.
CanNotAssignUnitToDimension_2 = Can not assign units \u201c{1}\u201d to dimension \u201c{0}\u201d.
+CanNotAssignUnitToVariable_2 = Can not assign units \u201c{1}\u201d to variable \u201c{0}\u201d.
CanNotConnectTo_1 = Can not connect to \u201c{0}\u201d.
CanNotConvertFromType_2 = Can not convert from type \u2018{0}\u2019 to type \u2018{1}\u2019.
CanNotConvertValue_2 = Can not convert value \u201c{0}\u201d to type \u2018{1}\u2019.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
index e4cbcef..15f2d1d 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/resources/Errors_fr.properties
@@ -26,6 +26,7 @@ CanIterateOnlyOnce = Cet objet ne peut it\u00e9rer qu\u2019une se
CanNotAddToExclusiveSet_2 = Aucun \u00e9l\u00e9ment ne peut \u00eatre ajout\u00e9 \u00e0 cet ensemble car les propri\u00e9t\u00e9s \u2018{0}\u2019 et \u2018{1}\u2019 sont mutuellement exclusives.
CanNotAssign_2 = Ne peut pas assigner \u00ab\u202f{1}\u202f\u00bb \u00e0 \u00ab\u202f{0}\u202f\u00bb.
CanNotAssignUnitToDimension_2 = Ne peut pas assigner les unit\u00e9s \u00ab\u202f{1}\u202f\u00bb \u00e0 la dimension \u00ab\u202f{0}\u202f\u00bb.
+CanNotAssignUnitToVariable_2 = Ne peut pas assigner les unit\u00e9s \u00ab\u202f{1}\u202f\u00bb \u00e0 la variable \u00ab\u202f{0}\u202f\u00bb.
CanNotConnectTo_1 = Ne peut pas se connecter \u00e0 \u00ab\u202f{0}\u202f\u00bb.
CanNotConvertFromType_2 = Ne peut pas convertir du type \u2018{0}\u2019 vers le type \u2018{1}\u2019.
CanNotConvertValue_2 = La valeur \u00ab\u202f{0}\u202f\u00bb ne peut pas \u00eatre convertie vers le type \u2018{1}\u2019.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
index 278ed2d..800f153 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
@@ -61,7 +61,7 @@ public final class Resources extends IndexedResourceBundle {
}
/**
- * Can not compute the grid geometry of “{0}” TIFF file.
+ * Can not compute the grid geometry of “{0}” GeoTIFF file.
*/
public static final short CanNotComputeGridGeometry_1 = 26;
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
index 219bc40..b88f5aa 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
@@ -19,7 +19,7 @@
# Resources in this file are for "sis-geotiff" usage only and should not be used by any other module.
# For resources shared by all modules in the Apache SIS project, see "org.apache.sis.util.resources" package.
#
-CanNotComputeGridGeometry_1 = Can not compute the grid geometry of \u201c{0}\u201d TIFF file.
+CanNotComputeGridGeometry_1 = Can not compute the grid geometry of \u201c{0}\u201d GeoTIFF file.
CircularImageReference_1 = TIFF file \u201c{0}\u201d has circular references in its chain of images.
ConstantValueRequired_3 = Apache SIS implementation requires that all \u201c{0}\u201d elements have the same value, but the element found in \u201c{1}\u201d are {2}.
ComputedValueForAttribute_2 = No value specified for the \u201c{0}\u201d TIFF tag. Computed the {1} value from other tags.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
index b778c54..dd94cf9 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
@@ -24,7 +24,7 @@
# U+202F NARROW NO-BREAK SPACE before ; ! and ?
# U+00A0 NO-BREAK SPACE before :
#
-CanNotComputeGridGeometry_1 = Ne peut pas calculer la g\u00e9om\u00e9trie de la grille du fichier TIFF \u00ab\u202f{0}\u202f\u00bb.
+CanNotComputeGridGeometry_1 = Ne peut pas calculer la g\u00e9om\u00e9trie de la grille du fichier GeoTIFF \u00ab\u202f{0}\u202f\u00bb.
CircularImageReference_1 = Le fichier TIFF \u00ab\u202f{0}\u202f\u00bb a des r\u00e9f\u00e9rences circulaires dans sa cha\u00eene d\u2019images.
ConstantValueRequired_3 = L\u2019impl\u00e9mentation de Apache SIS requiert que tous les \u00e9l\u00e9ments de \u00ab\u202f{0}\u202f\u00bb aient la m\u00eame valeur, mais les \u00e9l\u00e9ments trouv\u00e9s dans \u00ab\u202f{1}\u202f\u00bb sont {2}.
ComputedValueForAttribute_2 = Aucune valeur n\u2019a \u00e9t\u00e9 sp\u00e9cifi\u00e9e pour le tag TIFF \u00ab\u202f{0}\u202f\u00bb. La valeur {1} a \u00e9t\u00e9 calcul\u00e9e \u00e0 partir des autres tags.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
index 237fa2d..6a2061d 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
@@ -271,7 +271,7 @@ final class CRSBuilder {
*/
CRSBuilder(final Reader reader) {
this.reader = reader;
- geoKeys = new HashMap<>();
+ geoKeys = new HashMap<>(32);
}
/**
@@ -292,6 +292,7 @@ final class CRSBuilder {
* The factory is fetched when first needed.
*
* @return the EPSG factory (never {@code null}).
+ * @see <a href="https://issues.apache.org/jira/browse/SIS-102">SIS-102</a>
*/
private GeodeticAuthorityFactory epsgFactory() throws FactoryException {
if (epsgFactory == null) {
@@ -305,6 +306,7 @@ final class CRSBuilder {
* The factory is fetched when first needed.
*
* @return the object factory (never {@code null}).
+ * @see <a href="https://issues.apache.org/jira/browse/SIS-102">SIS-102</a>
*/
private GeodeticObjectFactory objectFactory() {
if (objectFactory == null) {
@@ -318,6 +320,7 @@ final class CRSBuilder {
* The factory is fetched when first needed.
*
* @return the operation factory (never {@code null}).
+ * @see <a href="https://issues.apache.org/jira/browse/SIS-102">SIS-102</a>
*/
private CoordinateOperationFactory operationFactory() {
if (operationFactory == null) {
@@ -572,7 +575,7 @@ final class CRSBuilder {
* @param keyDirectory the GeoTIFF keys to be associated to values. Can not be null.
* @param numericParameters a vector of {@code double} parameters, or {@code null} if none.
* @param asciiParameters the sequence of characters from which to build strings, or {@code null} if none.
- * @return the coordinate reference system created from the given GeoTIFF keys.
+ * @return the coordinate reference system created from the given GeoTIFF keys, or {@code null} if undefined.
*
* @throws NoSuchElementException if a mandatory value is missing.
* @throws NumberFormatException if a numeric value was stored as a string and can not be parsed.
@@ -746,10 +749,12 @@ final class CRSBuilder {
}
if (crsType != GeoCodes.ModelTypeGeocentric) {
final VerticalCRS vertical = createVerticalCRS();
- if (crs == null) {
- crs = vertical;
- } else if (vertical != null) {
- crs = objectFactory().createCompoundCRS(Collections.singletonMap(IdentifiedObject.NAME_KEY, crs.getName()), crs, vertical);
+ if (vertical != null) {
+ if (crs == null) {
+ missingValue(GeoKeys.GeographicType);
+ } else {
+ crs = objectFactory().createCompoundCRS(Collections.singletonMap(IdentifiedObject.NAME_KEY, crs.getName()), crs, vertical);
+ }
}
}
/*
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
index 498424d..24cff6a 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
@@ -21,16 +21,18 @@ import org.opengis.util.FactoryException;
import org.opengis.util.NoSuchIdentifierException;
import org.opengis.metadata.spatial.CellGeometry;
import org.opengis.metadata.spatial.PixelOrientation;
+import org.opengis.metadata.spatial.DimensionNameType;
import org.opengis.parameter.ParameterNotFoundException;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.MathTransformFactory;
import org.opengis.referencing.operation.TransformException;
import org.opengis.referencing.NoSuchAuthorityCodeException;
-import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.matrix.MatrixSIS;
import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.internal.storage.MetadataBuilder;
+import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.internal.geotiff.Resources;
import org.apache.sis.internal.util.DoubleDouble;
import org.apache.sis.coverage.grid.GridGeometry;
@@ -177,20 +179,20 @@ final class GridGeometryBuilder {
////////////////////////////////////////////////////////////////////////////////////////
/**
- * The grid geometry to be created by {@link #build(GridExtent)}.
+ * The grid geometry to be created by {@link #build(long, long)}.
*/
public GridGeometry gridGeometry;
/**
* Suggested value for a general description of the transformation form grid coordinates to "real world" coordinates.
- * This information is obtained as a side-effect of {@link #build(GridExtent)} call.
+ * This information is obtained as a side-effect of {@link #build(long, long)} call.
*/
private String description;
/**
* {@code POINT} if {@link GeoKeys#RasterType} is {@link GeoCodes#RasterPixelIsPoint},
* {@code AREA} if it is {@link GeoCodes#RasterPixelIsArea}, or null if unspecified.
- * This information is obtained as a side-effect of {@link #build(GridExtent)} call.
+ * This information is obtained as a side-effect of {@link #build(long, long)} call.
*/
private CellGeometry cellGeometry;
@@ -272,11 +274,13 @@ final class GridGeometryBuilder {
* After this method call (if successful), {@link #gridGeometry} is guaranteed non-null
* and can be used as a flag for determining that the build has been completed.
*
- * @param extent the image width and height in pixels. Must be two-dimensional.
+ * @param width the image width in pixels.
+ * @param height the image height in pixels.
* @return {@link #gridGeometry}, guaranteed non-null.
* @throws FactoryException if an error occurred while creating a CRS or a transform.
*/
- public GridGeometry build(final GridExtent extent) throws FactoryException {
+ @SuppressWarnings("fallthrough")
+ public GridGeometry build(final long width, final long height) throws FactoryException {
CoordinateReferenceSystem crs = null;
if (keyDirectory != null) {
final CRSBuilder helper = new CRSBuilder(reader);
@@ -296,14 +300,31 @@ final class GridGeometryBuilder {
}
}
}
+ /*
+ * If the CRS is non-null, then it is either two- or three-dimensional.
+ * The 'affine' matrix may be for a greater number of dimensions, so it
+ * may need to be reduced.
+ */
+ int n = (crs != null) ? crs.getCoordinateSystem().getDimension() : 2;
+ final DimensionNameType[] axisTypes = new DimensionNameType[n];
+ final long[] high = new long[n];
+ switch (n) {
+ default: axisTypes[2] = DimensionNameType.VERTICAL; // Fallthrough everywhere.
+ case 2: axisTypes[1] = DimensionNameType.ROW; high[1] = height - 1;
+ case 1: axisTypes[0] = DimensionNameType.COLUMN; high[0] = width - 1;
+ case 0: break;
+ }
+ final GridExtent extent = new GridExtent(axisTypes, null, high, true);
boolean pixelIsPoint = CellGeometry.POINT.equals(cellGeometry);
+ final MathTransformFactory factory = DefaultFactories.forBuildin(MathTransformFactory.class);
try {
- final MathTransform gridToCRS;
+ MathTransform gridToCRS;
if (affine != null) {
- gridToCRS = MathTransforms.linear(affine);
+ gridToCRS = factory.createAffineTransform(Matrices.resizeAffine(affine, ++n, n));
} else {
- gridToCRS = Localization.nonLinear(modelTiePoints);
pixelIsPoint = true;
+ gridToCRS = Localization.nonLinear(modelTiePoints);
+ gridToCRS = factory.createPassThroughTransform(0, gridToCRS, n - 2);
}
gridGeometry = new GridGeometry(extent, pixelIsPoint ? PixelInCell.CELL_CENTER : PixelInCell.CELL_CORNER, gridToCRS, crs);
} catch (TransformException e) {
@@ -327,7 +348,7 @@ final class GridGeometryBuilder {
*
* <p><b>Pre-requite:</b></p>
* <ul>
- * <li>{@link #build(GridExtent)} must have been invoked successfully before this method.</li>
+ * <li>{@link #build(long, long)} must have been invoked successfully before this method.</li>
* <li>{@link ImageFileDirectory} must have filled its part of metadata before to invoke this method.</li>
* </ul>
*
@@ -338,32 +359,26 @@ final class GridGeometryBuilder {
* @throws NumberFormatException if a numeric value was stored as a string and can not be parsed.
*/
public void completeMetadata(final MetadataBuilder metadata) {
- final boolean isGeorectified = (modelTiePoints == null) || (affine != null);
- metadata.newGridRepresentation(isGeorectified ? MetadataBuilder.GridType.GEORECTIFIED
- : MetadataBuilder.GridType.GEOREFERENCEABLE);
- metadata.setGeoreferencingAvailability(affine != null, false, false);
- if (gridGeometry != null && gridGeometry.isDefined(GridGeometry.CRS)) {
- metadata.addReferenceSystem(gridGeometry.getCoordinateReferenceSystem());
- }
- metadata.setGridToCRS(description);
- /*
- * Whether the pixel value is thought of as filling the cell area or is considered as point measurements at
- * the vertices of the grid (not in the interior of a cell). This is determined by the value associated to
- * GeoKeys.RasterType, which can be GeoCodes.RasterPixelIsArea or GeoCodes.RasterPixelIsPoint.
- *
- * Note: the pixel orientation (UPPER_LEFT versus CENTER) should be kept consistent with the discussion in
- * GridGeometryBuilder class javadoc.
- */
- metadata.setCellGeometry(cellGeometry);
- final PixelOrientation po;
- if (CellGeometry.POINT.equals(cellGeometry)) {
- po = PixelOrientation.CENTER;
- } else if (CellGeometry.AREA.equals(cellGeometry)) {
- po = PixelOrientation.UPPER_LEFT;
- } else {
- return;
+ if (metadata.addSpatialRepresentation(description, gridGeometry, true)) {
+ /*
+ * Whether the pixel value is thought of as filling the cell area or is considered as point measurements at
+ * the vertices of the grid (not in the interior of a cell). This is determined by the value associated to
+ * GeoKeys.RasterType, which can be GeoCodes.RasterPixelIsArea or GeoCodes.RasterPixelIsPoint.
+ *
+ * Note: the pixel orientation (UPPER_LEFT versus CENTER) should be kept consistent with the discussion in
+ * GridGeometryBuilder class javadoc.
+ */
+ metadata.setCellGeometry(cellGeometry);
+ final PixelOrientation po;
+ if (CellGeometry.POINT.equals(cellGeometry)) {
+ po = PixelOrientation.CENTER;
+ } else if (CellGeometry.AREA.equals(cellGeometry)) {
+ po = PixelOrientation.UPPER_LEFT;
+ } else {
+ return;
+ }
+ metadata.setPointInPixel(po);
}
- metadata.setPointInPixel(po);
}
/**
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index 2fc880a..5b6bd49 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -1205,13 +1205,6 @@ final class ImageFileDirectory extends AbstractResource implements GridCoverageR
}
/**
- * Returns the grid envelope for this image.
- */
- private GridExtent extent() {
- return new GridExtent(null, new long[] {imageWidth, imageHeight}, false);
- }
-
- /**
* Returns the grid geometry for this image.
*/
@Override
@@ -1219,13 +1212,13 @@ final class ImageFileDirectory extends AbstractResource implements GridCoverageR
if (referencing != null) {
GridGeometry gridGeometry = referencing.gridGeometry;
if (gridGeometry == null) try {
- gridGeometry = referencing.build(extent());
+ gridGeometry = referencing.build(imageWidth, imageHeight);
} catch (FactoryException e) {
throw new DataStoreContentException(reader.resources().getString(Resources.Keys.CanNotComputeGridGeometry_1, filename()), e);
}
return gridGeometry;
} else {
- return new GridGeometry(extent(), null);
+ return new GridGeometry(new GridExtent(imageWidth, imageHeight), null);
}
}
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
index dcd1d79..988db1e 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
@@ -63,6 +63,7 @@ final class Localization {
/**
* Creates a new localization grid from the information found by {@link ImageFileDirectory}.
+ * Current implementation creates two-dimensional transforms only.
*
* @param modelTiePoints the tie points to use for computing {@code gridToCRS}.
* @return the grid geometry created from above properties. Never null.
@@ -96,8 +97,8 @@ final class Localization {
sourceToGrid.transform(ordinates, 0, ordinates, 0, 1);
grid.setControlPoint(Math.toIntExact(Math.round(ordinates[0])),
Math.toIntExact(Math.round(ordinates[1])),
- modelTiePoints.doubleValue(i+3),
- modelTiePoints.doubleValue(i+4));
+ modelTiePoints.doubleValue(i + (RECORD_LENGTH/2)),
+ modelTiePoints.doubleValue(i + (RECORD_LENGTH/2 + 1)));
}
grid.setDesiredPrecision(PRECISION);
final MathTransform tr = grid.create(null);
diff --git a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
index 8d1937d..4f0a4e2 100644
--- a/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
+++ b/storage/sis-netcdf/src/main/java/org/apache/sis/storage/netcdf/MetadataReader.java
@@ -50,6 +50,8 @@ import org.opengis.referencing.crs.VerticalCRS;
import org.apache.sis.util.iso.Types;
import org.apache.sis.util.iso.SimpleInternationalString;
+import org.apache.sis.util.logging.WarningListeners;
+import org.apache.sis.storage.DataStore;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.metadata.iso.citation.*;
@@ -211,13 +213,14 @@ final class MetadataReader extends MetadataBuilder {
}
/**
- * Returns the localized error resource bundle for the locale given by
- * {@link org.apache.sis.util.logging.WarningListeners#getLocale()}.
+ * Logs a warning using the localized error resource bundle for the locale given by
+ * {@link WarningListeners#getLocale()}.
*
- * @return the localized error resource bundle.
+ * @param key one of {@link Errors.Keys} values.
*/
- private Errors errors() {
- return Errors.getResources(decoder.listeners.getLocale());
+ private void warning(final short key, final Object p1, final Object p2, final Exception e) {
+ final WarningListeners<DataStore> listeners = decoder.listeners;
+ listeners.warning(Errors.getResources(listeners.getLocale()).getString(key, p1, p2), e);
}
/**
@@ -296,7 +299,7 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
private <T extends Enum<T>> T forEnumName(final Class<T> enumType, final String name) {
final T code = Types.forEnumName(enumType, name);
if (code == null && name != null) {
- decoder.listeners.warning(errors().getString(Errors.Keys.UnknownEnumValue_2, enumType, name), null);
+ warning(Errors.Keys.UnknownEnumValue_2, enumType, name, null);
}
return code;
}
@@ -312,7 +315,7 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
* CodeLists are not enums, but using the error message for enums is not completly wrong since
* if we did not allowed CodeList to create new elements, then we are using it like an enum.
*/
- decoder.listeners.warning(errors().getString(Errors.Keys.UnknownEnumValue_2, codeType, name), null);
+ warning(Errors.Keys.UnknownEnumValue_2, codeType, name, null);
}
return code;
}
@@ -715,7 +718,8 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
}
final AttributeNames.Dimension attributeNames = axis.attributeNames;
if (attributeNames != null) {
- setAxisName(dim, attributeNames.DEFAULT_NAME_TYPE);
+ final DimensionNameType name = attributeNames.DEFAULT_NAME_TYPE;
+ setAxisName(dim, name);
final String res = stringValue(attributeNames.RESOLUTION);
if (res != null) try {
/*
@@ -724,13 +728,19 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
*/
final int s = res.indexOf(' ');
final double value;
+ Unit<?> units = null;
if (s < 0) {
value = numericValue(attributeNames.RESOLUTION);
} else {
- value = Double.parseDouble(res.substring(0, s));
- // TODO: parse units and build a Quantity object.
+ value = Double.parseDouble(res.substring(0, s).trim());
+ final String symbol = res.substring(s+1).trim();
+ if (!symbol.isEmpty()) try {
+ units = Units.valueOf(symbol);
+ } catch (ParserException e) {
+ warning(Errors.Keys.CanNotAssignUnitToDimension_2, name, units, e);
+ }
}
- setAxisResolution(dim, value);
+ setAxisResolution(dim, value, units);
} catch (NumberFormatException e) {
warning(e);
}
@@ -940,7 +950,7 @@ split: while ((start = CharSequences.skipLeadingWhitespaces(value, start, lengt
if (units != null) try {
setSampleUnits(Units.valueOf(units));
} catch (ParserException e) {
- decoder.listeners.warning(errors().getString(Errors.Keys.CanNotAssignUnitToDimension_2, name, units), e);
+ warning(Errors.Keys.CanNotAssignUnitToVariable_2, name, units, e);
}
double scale = Double.NaN;
double offset = Double.NaN;
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
index 12f9f1e..f61006b 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/internal/storage/MetadataBuilder.java
@@ -19,6 +19,7 @@ package org.apache.sis.internal.storage;
import java.time.LocalDate;
import java.util.Date;
import java.util.Locale;
+import java.util.Optional;
import java.util.Iterator;
import java.util.Collection;
import java.util.Collections;
@@ -28,6 +29,7 @@ import java.util.Map;
import java.net.URI;
import java.nio.charset.Charset;
import javax.measure.Unit;
+import javax.measure.quantity.Length;
import org.opengis.util.MemberName;
import org.opengis.util.GenericName;
import org.opengis.util.InternationalString;
@@ -58,7 +60,9 @@ import org.opengis.metadata.distribution.Format;
import org.opengis.metadata.quality.Element;
import org.opengis.geometry.DirectPosition;
import org.opengis.referencing.ReferenceSystem;
+import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.crs.VerticalCRS;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.operation.TransformException;
import org.apache.sis.geometry.AbstractEnvelope;
import org.apache.sis.metadata.iso.DefaultMetadata;
@@ -108,10 +112,13 @@ import org.apache.sis.metadata.iso.lineage.DefaultProcessStep;
import org.apache.sis.metadata.iso.lineage.DefaultProcessing;
import org.apache.sis.metadata.sql.MetadataStoreException;
import org.apache.sis.metadata.sql.MetadataSource;
+import org.apache.sis.coverage.grid.GridGeometry;
+import org.apache.sis.coverage.grid.GridExtent;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.CharSequences;
import org.apache.sis.util.iso.Names;
import org.apache.sis.util.iso.Types;
+import org.apache.sis.measure.Units;
import static java.util.Collections.singleton;
import static org.apache.sis.internal.util.StandardDateFormat.MILLISECONDS_PER_DAY;
@@ -129,7 +136,7 @@ import org.opengis.metadata.citation.Responsibility;
*
* @author Martin Desruisseaux (Geomatys)
* @author Rémi Maréchal (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
@@ -1865,6 +1872,73 @@ parse: for (int i = 0; i < length;) {
}
/**
+ * Adds and populates a "spatial representation info" node using the given grid geometry.
+ * If this method invokes implicitly {@link #newGridRepresentation(GridType)}, unless this
+ * method returns {@code false} in which case nothing has been done.
+ * Storage location is:
+ *
+ * <ul>
+ * <li>{@code metadata/spatialRepresentationInfo/transformationDimensionDescription}</li>
+ * <li>{@code metadata/spatialRepresentationInfo/transformationParameterAvailability}</li>
+ * <li>{@code metadata/spatialRepresentationInfo/axisDimensionProperties/dimensionName}</li>
+ * <li>{@code metadata/spatialRepresentationInfo/axisDimensionProperties/dimensionSize}</li>
+ * <li>{@code metadata/spatialRepresentationInfo/axisDimensionProperties/resolution}</li>
+ * <li>{@code metadata/identificationInfo/spatialRepresentationType}</li>
+ * <li>{@code metadata/referenceSystemInfo}</li>
+ * </ul>
+ *
+ * @param description a general description of the "grid to CRS" transformation, or {@code null} if none.
+ * @param grid the grid extent, "grid to CRS" transform and target CRS, or {@code null} if none.
+ * @param addResolution whether to declare the resolutions. Callers should set this argument to {@code false} if they intend
+ * to provide the resolution themselves, or if grid axes are not in the same order than CRS axes.
+ * @return whether a "spatial representation info" node has been added.
+ */
+ public final boolean addSpatialRepresentation(final String description, final GridGeometry grid, final boolean addResolution) {
+ final GridType type;
+ if (grid == null) {
+ if (description == null) {
+ return false;
+ }
+ type = GridType.UNSPECIFIED;
+ } else {
+ type = grid.isConversionLinear(0, 1) ? GridType.GEORECTIFIED : GridType.GEOREFERENCEABLE;
+ }
+ addSpatialRepresentation(SpatialRepresentationType.GRID);
+ newGridRepresentation(type);
+ setGridToCRS(description);
+ if (grid != null) {
+ setGeoreferencingAvailability(grid.isDefined(GridGeometry.GRID_TO_CRS), false, false);
+ CoordinateSystem cs = null;
+ if (grid.isDefined(GridGeometry.CRS)) {
+ final CoordinateReferenceSystem crs = grid.getCoordinateReferenceSystem();
+ cs = crs.getCoordinateSystem();
+ addReferenceSystem(crs);
+ }
+ if (grid.isDefined(GridGeometry.EXTENT)) {
+ final GridExtent extent = grid.getExtent();
+ final int dimension = extent.getDimension();
+ for (int i=0; i<dimension; i++) {
+ final Optional<DimensionNameType> axisType = extent.getAxisType(i);
+ if (axisType.isPresent()) {
+ setAxisName(i, axisType.get());
+ }
+ final long size = extent.getSize(i);
+ if (size >= 0 && size <= Integer.MAX_VALUE) {
+ setAxisLength(i, (int) size);
+ }
+ }
+ }
+ if (addResolution && grid.isDefined(GridGeometry.RESOLUTION)) {
+ final double[] resolution = grid.getResolution(false);
+ for (int i=0; i<resolution.length; i++) {
+ setAxisResolution(i, resolution[i], (cs != null) ? cs.getAxis(i).getUnit() : null);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
* Adds a linear resolution in metres.
* Storage location is:
*
@@ -2006,7 +2080,7 @@ parse: for (int i = 0; i < length;) {
}
/**
- * Sets a general description of the transformation form grid coordinates to "real world" coordinates.
+ * Sets a general description of the transformation from grid coordinates to "real world" coordinates.
* Storage location is:
*
* <ul>
@@ -2071,6 +2145,7 @@ parse: for (int i = 0; i < length;) {
/**
* Sets the degree of detail in the given dimension.
+ * This method does nothing if the given resolution if NaN or infinite.
* Storage location is:
*
* <ul>
@@ -2079,9 +2154,18 @@ parse: for (int i = 0; i < length;) {
*
* @param dimension the axis dimension.
* @param resolution the degree of detail in the grid dataset, or NaN for no-operation.
+ * @param unit the resolution unit, of {@code null} if unknown.
*/
- public final void setAxisResolution(final int dimension, final double resolution) {
- if (!Double.isNaN(resolution)) {
+ public final void setAxisResolution(final int dimension, double resolution, final Unit<?> unit) {
+ if (Double.isFinite(resolution)) {
+ /*
+ * Value should be a Quantity<?>. Since GeoAPI does not yet allow that,
+ * we convert to metres for now. Future version should store the value
+ * as-is with its unit of measurement (TODO).
+ */
+ if (Units.isLinear(unit)) {
+ resolution = unit.asType(Length.class).getConverterTo(Units.METRE).convert(resolution);
+ }
axis(dimension).setResolution(shared(resolution));
}
}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 15/31: More robust parsing of GeoTIFF tags: when expecting a
single value,
accept an array if all values are the same. Also accept -1 as a code for
"missing units" but verify if the unit is really missing.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 09ef87a79a047b29282b5b3d9a045b965a30abe0
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat Jun 2 11:31:17 2018 +0000
More robust parsing of GeoTIFF tags: when expecting a single value, accept an array if all values are the same. Also accept -1 as a code for "missing units" but verify if the unit is really missing.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832731 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/storage/geotiff/CRSBuilder.java | 13 +-
.../org/apache/sis/storage/geotiff/GeoCodes.java | 8 +-
.../sis/storage/geotiff/ImageFileDirectory.java | 14 +-
.../java/org/apache/sis/storage/geotiff/Type.java | 259 ++++++++++++---------
.../org/apache/sis/storage/geotiff/TypeTest.java | 23 +-
5 files changed, 194 insertions(+), 123 deletions(-)
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
index 34c739e..5cffea1 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
@@ -132,7 +132,7 @@ import static org.apache.sis.util.Utilities.equalsIgnoreMetadata;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @see GeoKeys
*
@@ -457,7 +457,7 @@ final class CRSBuilder {
*/
private double getMandatoryDouble(final short key) {
final double value = getAsDouble(key);
- if (!Double.isNaN(value)) {
+ if (Double.isFinite(value)) {
return value;
}
alreadyReported = true;
@@ -869,6 +869,15 @@ final class CRSBuilder {
if (scaleKey == 0) return defaultValue;
return defaultValue.getSystemUnit().multiply(getMandatoryDouble(scaleKey));
}
+ case GeoCodes.missing & 0xFFFF: {
+ if (scaleKey != 0) {
+ final double scale = getAsDouble(scaleKey);
+ if (Double.isFinite(scale)) {
+ return defaultValue.getSystemUnit().multiply(scale);
+ }
+ }
+ return defaultValue;
+ }
default: {
/*
* Unit defined by an EPSG code. In principle we should just use the EPSG code.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java
index 7f23aed..c2d0fcb 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GeoCodes.java
@@ -23,7 +23,7 @@ package org.apache.sis.storage.geotiff;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
@@ -44,6 +44,12 @@ final class GeoCodes {
*/
public static final short userDefined = 32767;
+ /**
+ * An alternative code for {@link #undefined} found in some GeoTIFF file.
+ * This is not a standard value. This is used only in some methods implemented defensively.
+ */
+ static final short missing = -1;
+
/*
* 6.3.1.1 Model Type Codes
*
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index 25245d2..be28f26 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -52,7 +52,7 @@ import org.apache.sis.measure.Units;
* @author Johann Sorel (Geomatys)
* @author Thi Phuong Hao Nguyen (VNSC)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @see <a href="http://www.awaresystems.be/imaging/tiff/tifftags.html">TIFF Tag Reference</a>
*
@@ -288,6 +288,12 @@ final class ImageFileDirectory {
private Vector minValues, maxValues;
/**
+ * {@code true} if {@link #minValues} and {@link #maxValues} have been explicitly specified
+ * in the TIFF file, or {@code false} if they have been inferred from {@link #bitsPerSample}.
+ */
+ private boolean isMinSpecified, isMaxSpecified;
+
+ /**
* The number of pixels per {@link #resolutionUnit} in the {@link #imageWidth} and the {@link #imageHeight}
* directions, or {@link Double#NaN} is unspecified. Since ISO 19115 does not have separated resolution fields
* for image width and height, Apache SIS stores only the maximal value.
@@ -634,6 +640,7 @@ final class ImageFileDirectory {
case Tags.MinSampleValue:
case Tags.SMinSampleValue: {
minValues = extremum(minValues, type.readVector(input(), count), false);
+ isMinSpecified = true;
break;
}
/*
@@ -644,6 +651,7 @@ final class ImageFileDirectory {
case Tags.MaxSampleValue:
case Tags.SMaxSampleValue: {
maxValues = extremum(maxValues, type.readVector(input(), count), true);
+ isMaxSpecified = true;
break;
}
@@ -1180,8 +1188,8 @@ final class ImageFileDirectory {
for (int band = 0; band < samplesPerPixel;) {
metadata.newSampleDimension();
metadata.setBitPerSample(bitsPerSample);
- if (minValues != null) metadata.addMinimumSampleValue(minValues.doubleValue(Math.min(band, minValues.size()-1)));
- if (maxValues != null) metadata.addMaximumSampleValue(maxValues.doubleValue(Math.min(band, maxValues.size()-1)));
+ if (isMinSpecified) metadata.addMinimumSampleValue(minValues.doubleValue(Math.min(band, minValues.size()-1)));
+ if (isMaxSpecified) metadata.addMaximumSampleValue(maxValues.doubleValue(Math.min(band, maxValues.size()-1)));
metadata.setBandIdentifier(++band);
}
/*
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Type.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Type.java
index 64dce2e..ef59ee0 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Type.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Type.java
@@ -36,7 +36,7 @@ import org.apache.sis.util.resources.Errors;
* This enumeration rather match the Java primitive type names.</p>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
@@ -48,7 +48,11 @@ enum Type {
* <li>TIFF code: 7</li>
* </ul>
*/
- UNDEFINED(7, Byte.BYTES, false),
+ UNDEFINED(7, Byte.BYTES, false) {
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ throw new UnsupportedOperationException(name());
+ }
+ },
/**
* An 8-bits signed (twos-complement) integer.
@@ -58,12 +62,15 @@ enum Type {
* </ul>
*/
BYTE(6, Byte.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readByte();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readByte();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readByte(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readBytes(count);
}
},
@@ -76,12 +83,15 @@ enum Type {
* </ul>
*/
UBYTE(1, Byte.BYTES, true) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readUnsignedByte();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readUnsignedByte();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readUnsignedByte(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readBytes(count);
}
},
@@ -94,12 +104,15 @@ enum Type {
* </ul>
*/
SHORT(8, Short.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readShort();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readShort();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readShort(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readShorts(count);
}
},
@@ -112,12 +125,15 @@ enum Type {
* </ul>
*/
USHORT(3, Short.BYTES, true) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readUnsignedShort();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readUnsignedShort();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readUnsignedShort(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readShorts(count);
}
},
@@ -130,12 +146,15 @@ enum Type {
* </ul>
*/
INT(9, Integer.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readInt();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readInt();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readInt(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readInts(count);
}
},
@@ -148,12 +167,15 @@ enum Type {
* </ul>
*/
UINT(4, Integer.BYTES, true) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readUnsignedInt();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readUnsignedInt();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readUnsignedInt(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readInts(count);
}
},
@@ -165,12 +187,15 @@ enum Type {
* </ul>
*/
LONG(17, Long.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readLong();
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final long value = input.readLong();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readLong(), count);
+ }
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readLongs(count);
}
},
@@ -182,21 +207,22 @@ enum Type {
* </ul>
*/
ULONG(16, Long.BYTES, true) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
final long value = input.readLong();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readLong(), count);
+ }
if (value >= 0) {
return value;
}
throw new ArithmeticException(canNotConvert(Long.toUnsignedString(value)));
}
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return Numerics.toUnsignedDouble(input.readLong());
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
+ return Numerics.toUnsignedDouble(readLong(input, count));
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readLongs(count);
}
},
@@ -209,9 +235,16 @@ enum Type {
* </ul>
*/
FLOAT(11, Float.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
+ private float readFloat(final ChannelDataInput input, final long count) throws IOException {
final float value = input.readFloat();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readFloat(), count);
+ }
+ return value;
+ }
+
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ final float value = readFloat(input, count);
final long r = (long) value;
if (r == value) {
return r;
@@ -219,12 +252,11 @@ enum Type {
throw new ArithmeticException(canNotConvert(Float.toString(value)));
}
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return DecimalFunctions.floatToDouble(input.readFloat());
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
+ return DecimalFunctions.floatToDouble(readFloat(input, count));
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readFloats(count);
}
},
@@ -237,22 +269,15 @@ enum Type {
* </ul>
*/
DOUBLE(12, Double.BYTES, false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
final double value = input.readDouble();
- final long r = (long) value;
- if (r == value) {
- return r;
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readDouble(), count);
}
- throw new ArithmeticException(canNotConvert(Double.toString(value)));
- }
-
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readDouble();
+ return value;
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return input.readDoubles(count);
}
},
@@ -265,26 +290,12 @@ enum Type {
* </ul>
*/
RATIONAL(10, (2*Integer.BYTES), false) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- final int numerator = input.readInt();
- final int denominator = input.readInt();
- if ((numerator % denominator) == 0) {
- return numerator / denominator;
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
+ final double value = input.readInt() / (double) input.readInt();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readInt() / (double) input.readInt(), count);
}
- throw new ArithmeticException(canNotConvert(toString(numerator, denominator)));
- }
-
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readInt() / (double) input.readInt();
- }
-
- @Override String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
- ensureSingleton(length);
- return new String[] {
- toString(input.readInt(), input.readInt())
- };
+ return value;
}
},
@@ -296,26 +307,12 @@ enum Type {
* </ul>
*/
URATIONAL(5, (2*Integer.BYTES), true) {
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- final long numerator = input.readUnsignedInt();
- final long denominator = input.readUnsignedInt();
- if ((numerator % denominator) == 0) {
- return numerator / denominator;
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
+ final double value = input.readUnsignedInt() / (double) input.readUnsignedInt();
+ for (long i=1; i<count; i++) {
+ ensureSingleton(value, input.readUnsignedInt() / (double) input.readUnsignedInt(), count);
}
- throw new ArithmeticException(canNotConvert(toString(numerator, denominator)));
- }
-
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- ensureSingleton(count);
- return input.readUnsignedInt() / (double) input.readUnsignedInt();
- }
-
- @Override String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
- ensureSingleton(length);
- return new String[] {
- toString(input.readUnsignedInt(), input.readUnsignedInt())
- };
+ return value;
}
},
@@ -329,7 +326,7 @@ enum Type {
* </ul>
*/
ASCII(2, Byte.BYTES, false) {
- @Override String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
+ @Override public String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
final byte[] chars = input.readBytes(Math.toIntExact(length));
String[] lines = new String[1]; // We will usually have exactly one string.
int count = 0, lower = 0;
@@ -344,19 +341,26 @@ enum Type {
return ArraysExt.resize(lines, count);
}
- @Override long readLong(final ChannelDataInput input, final long count) throws IOException {
+ private String readString(final ChannelDataInput input, final long count) throws IOException {
final String[] lines = readString(input, count, StandardCharsets.US_ASCII);
- ensureSingleton(lines.length);
- return Long.parseLong(lines[0]);
+ final String value = lines[0];
+ for (int i=1; i<lines.length; i++) {
+ if (!value.equals(lines[i])) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.UnexpectedArrayLength_2, 1, count));
+ }
+ }
+ return value;
}
- @Override double readDouble(final ChannelDataInput input, final long count) throws IOException {
- final String[] lines = readString(input, count, StandardCharsets.US_ASCII);
- ensureSingleton(lines.length);
- return Double.parseDouble(lines[0]);
+ @Override public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ return Long.parseLong(readString(input, count));
+ }
+
+ @Override public double readDouble(final ChannelDataInput input, final long count) throws IOException {
+ return Double.parseDouble(readString(input, count));
}
- @Override Object readArray(final ChannelDataInput input, final int count) throws IOException {
+ @Override public Object readArray(final ChannelDataInput input, final int count) throws IOException {
return readString(input, count, StandardCharsets.US_ASCII);
}
};
@@ -416,20 +420,34 @@ enum Type {
/**
* Invoked by {@code read(…)} method implementations for verifying that the {@code count} argument value is 1.
- * All read methods expect exactly one value, except the methods of the {@link #ASCII} enumeration value which
- * are treated differently.
+ * All read methods other than {@code readArray(…)} expect exactly one value, except methods in {@link #ASCII}
+ * enumeration value which are treated differently.
*
- * @param count the number of values to read.
+ * <p>While exactly one value is expected, we are tolerant to longer arrays provided that all values are the
+ * same. This is seen in practice where a value expected to apply to the image is repeated for each band.</p>
+ *
+ * @param previous the previous value.
+ * @param actual the actual value.
+ * @param count the number of values to read.
* @throws IllegalArgumentException if {@code count} does not have the expected value.
*/
- static void ensureSingleton(final long count) {
- if (count != 1) {
+ static void ensureSingleton(final long previous, final long actual, final long count) {
+ if (previous != actual) {
// Even if the methods did not expected an array in argument, we are conceptually reading an array.
throw new IllegalArgumentException(Errors.format(Errors.Keys.UnexpectedArrayLength_2, 1, count));
}
}
/**
+ * Same as {@link #ensureSingleton(long, long, long)} but with floating-point values.
+ */
+ static void ensureSingleton(final double previous, final double actual, final long count) {
+ if (Double.doubleToLongBits(previous) != Double.doubleToLongBits(actual)) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.UnexpectedArrayLength_2, 1, count));
+ }
+ }
+
+ /**
* Formats an error message for a value that can not be converted.
*/
final String canNotConvert(final String value) {
@@ -449,7 +467,7 @@ enum Type {
* @throws IllegalArgumentException if the value is not a singleton.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- final short readShort(final ChannelDataInput input, final long count) throws IOException {
+ public final short readShort(final ChannelDataInput input, final long count) throws IOException {
final long value = readLong(input, count);
if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE) {
return (short) value;
@@ -470,7 +488,7 @@ enum Type {
* @throws IllegalArgumentException if the value is not a singleton.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- final int readInt(final ChannelDataInput input, final long count) throws IOException {
+ public final int readInt(final ChannelDataInput input, final long count) throws IOException {
final long value = readLong(input, count);
if (value >= Integer.MIN_VALUE && value <= Integer.MAX_VALUE) {
return (int) value;
@@ -488,7 +506,7 @@ enum Type {
* @throws IllegalArgumentException if the value is not a singleton.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- final long readUnsignedLong(final ChannelDataInput input, final long count) throws IOException {
+ public final long readUnsignedLong(final ChannelDataInput input, final long count) throws IOException {
final long value = readLong(input, count);
if (value >= 0) {
return value;
@@ -513,8 +531,14 @@ enum Type {
* @throws IllegalArgumentException if the value is not a singleton.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- long readLong(ChannelDataInput input, long count) throws IOException {
- throw new UnsupportedOperationException(name());
+ public long readLong(final ChannelDataInput input, final long count) throws IOException {
+ // All enum MUST override one of 'readLong' or 'readDouble' methods.
+ final double value = readDouble(input, count);
+ final long r = (long) value;
+ if (r == value) {
+ return r;
+ }
+ throw new ArithmeticException(canNotConvert(Double.toString(value)));
}
/**
@@ -533,7 +557,8 @@ enum Type {
* @throws IllegalArgumentException if the value is not a singleton.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- double readDouble(ChannelDataInput input, long count) throws IOException {
+ public double readDouble(ChannelDataInput input, long count) throws IOException {
+ // All enum MUST override one of 'readLong' or 'readDouble' methods.
return readLong(input, count);
}
@@ -548,10 +573,12 @@ enum Type {
* @throws ArithmeticException if the given length is too large.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
+ public String[] readString(final ChannelDataInput input, final long length, final Charset charset) throws IOException {
final String[] s = new String[Math.toIntExact(length)];
for (int i=0; i<s.length; i++) {
- s[i] = String.valueOf(readLong(input, 1));
+ final double value = readDouble(input, 1);
+ final long r = (long) value;
+ s[i] = (r == value) ? String.valueOf(r) : String.valueOf(value);
}
return s;
}
@@ -565,7 +592,7 @@ enum Type {
* @throws IOException if an error occurred while reading the stream.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- Object readArray(ChannelDataInput input, int count) throws IOException {
+ public Object readArray(ChannelDataInput input, int count) throws IOException {
throw new UnsupportedOperationException(name());
}
@@ -582,7 +609,7 @@ enum Type {
* @throws NumberFormatException if the value was stored in ASCII and can not be parsed.
* @throws UnsupportedOperationException if this type is {@link #UNDEFINED}.
*/
- final Vector readVector(final ChannelDataInput input, final long count) throws IOException {
+ public final Vector readVector(final ChannelDataInput input, final long count) throws IOException {
return Vector.create(readArray(input, Math.toIntExact(count)), isUnsigned);
}
}
diff --git a/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/TypeTest.java b/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/TypeTest.java
index afe345f..320169d 100644
--- a/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/TypeTest.java
+++ b/storage/sis-geotiff/src/test/java/org/apache/sis/storage/geotiff/TypeTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.sis.storage.geotiff;
+import org.apache.sis.internal.storage.io.ChannelDataInput;
import org.apache.sis.test.TestCase;
import org.junit.Test;
@@ -26,12 +27,32 @@ import static org.junit.Assert.*;
* Tests the {@link Type} enumeration.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
public final strictfp class TypeTest extends TestCase {
/**
+ * Verifies that all enumeration values override either {@link Type#readLong(ChannelDataInput, long)}
+ * or {@link Type#readDouble(ChannelDataInput, long)}.Failing to do so may cause stack overflow.
+ *
+ * @throws NoSuchMethodException if a reflective operation failed.
+ */
+ @Test
+ public void testOverride() throws NoSuchMethodException {
+ final Class<?>[] parameters = {
+ ChannelDataInput.class,
+ Long.TYPE
+ };
+ for (final Type type : Type.values()) {
+ final Class<?> c = type.getClass();
+ final boolean readLong = c.getMethod("readLong", parameters).getDeclaringClass() == Type.class;
+ final boolean readDouble = c.getMethod("readDouble", parameters).getDeclaringClass() == Type.class;
+ assertFalse(type.name(), readLong & readDouble);
+ }
+ }
+
+ /**
* Tests {@link Type#valueOf(int)}.
*/
@Test
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 22/31: Remove Numerics.hashCode(long),
replaced by Long.hashCode(long).
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 870d121046dd53b2c4d12dd5b9ec28a9c9b95cdb
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon Jun 4 10:51:00 2018 +0000
Remove Numerics.hashCode(long), replaced by Long.hashCode(long).
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832816 13f79535-47bb-0310-9956-ffa450edef68
---
.../java/org/apache/sis/geometry/AbstractDirectPosition.java | 3 +--
.../main/java/org/apache/sis/geometry/AbstractEnvelope.java | 3 +--
.../main/java/org/apache/sis/geometry/DirectPosition1D.java | 3 +--
.../main/java/org/apache/sis/geometry/DirectPosition2D.java | 4 ++--
.../org/apache/sis/referencing/AbstractIdentifiedObject.java | 5 ++---
.../org/apache/sis/referencing/cs/DirectionAlongMeridian.java | 2 +-
.../org/apache/sis/referencing/datum/TimeDependentBWP.java | 3 +--
.../org/apache/sis/referencing/operation/matrix/Matrix1.java | 2 +-
.../org/apache/sis/referencing/operation/matrix/Matrix2.java | 2 +-
.../referencing/operation/projection/NormalizedProjection.java | 2 +-
.../sis/referencing/operation/projection/ZonedGridSystem.java | 2 +-
.../operation/transform/EllipsoidToCentricTransform.java | 2 +-
.../operation/transform/ExponentialTransform1D.java | 2 +-
.../sis/referencing/operation/transform/LinearTransform1D.java | 3 +--
.../operation/transform/LogarithmicTransform1D.java | 2 +-
.../sis/referencing/operation/transform/MolodenskyFormula.java | 2 +-
.../sis/referencing/operation/transform/PowerTransform1D.java | 2 +-
.../main/java/org/apache/sis/internal/util/DoubleDouble.java | 2 +-
.../src/main/java/org/apache/sis/internal/util/Numerics.java | 10 ----------
core/sis-utility/src/main/java/org/apache/sis/math/Line.java | 2 +-
core/sis-utility/src/main/java/org/apache/sis/math/Plane.java | 2 +-
.../src/main/java/org/apache/sis/measure/LinearConverter.java | 6 +++---
22 files changed, 25 insertions(+), 41 deletions(-)
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractDirectPosition.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractDirectPosition.java
index 0362ae2..2136a8e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractDirectPosition.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractDirectPosition.java
@@ -40,7 +40,6 @@ import org.apache.sis.internal.referencing.WKTUtilities;
import org.apache.sis.io.wkt.FormattableObject;
import org.apache.sis.io.wkt.Formatter;
-import static java.lang.Double.doubleToLongBits;
import static org.apache.sis.util.StringBuilders.trimFractionalPart;
import static org.apache.sis.util.ArgumentChecks.ensureDimensionMatches;
@@ -392,7 +391,7 @@ parse: while (i < length) {
final int dimension = getDimension();
int code = 1;
for (int i=0; i<dimension; i++) {
- code = code*31 + Numerics.hashCode(doubleToLongBits(getOrdinate(i)));
+ code = code*31 + Double.hashCode(getOrdinate(i));
}
return code + Objects.hashCode(getCoordinateReferenceSystem());
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
index 08b28ba..abdcf54 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/AbstractEnvelope.java
@@ -35,7 +35,6 @@ import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.cs.CoordinateSystemAxis;
import org.opengis.referencing.cs.CoordinateSystem;
import org.opengis.referencing.cs.RangeMeaning;
-import org.apache.sis.internal.util.Numerics;
import org.apache.sis.util.Emptiable;
import org.apache.sis.util.Utilities;
import org.apache.sis.util.ComparisonMode;
@@ -1113,7 +1112,7 @@ public abstract class AbstractEnvelope extends FormattableObject implements Enve
boolean p = true;
do {
for (int i=0; i<dimension; i++) {
- code = code*31 + Numerics.hashCode(doubleToLongBits(p ? getLower(i) : getUpper(i)));
+ code = code*31 + Double.hashCode(p ? getLower(i) : getUpper(i));
}
} while ((p = !p) == false);
return code + Objects.hashCode(getCoordinateReferenceSystem());
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
index 9c5117a..8a7d41e 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition1D.java
@@ -26,7 +26,6 @@ import java.io.Serializable;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.geometry.DirectPosition;
import org.opengis.geometry.MismatchedDimensionException;
-import org.apache.sis.internal.util.Numerics;
import org.apache.sis.util.resources.Errors;
import static org.apache.sis.util.ArgumentChecks.ensureDimensionMatches;
@@ -245,7 +244,7 @@ public class DirectPosition1D extends AbstractDirectPosition implements Serializ
*/
@Override
public int hashCode() {
- final int code = 31 + Numerics.hashCode(Double.doubleToLongBits(ordinate)) + Objects.hashCode(crs);
+ final int code = 31 + Double.hashCode(ordinate) + Objects.hashCode(crs);
assert code == super.hashCode();
return code;
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
index fec0426..8926f70 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/DirectPosition2D.java
@@ -303,8 +303,8 @@ public class DirectPosition2D extends Point2D.Double implements DirectPosition,
*/
@Override
public int hashCode() {
- int code = 31 + Numerics.hashCode(doubleToLongBits(x));
- code = code*31 + Numerics.hashCode(doubleToLongBits(y));
+ int code = 31 + java.lang.Double.hashCode(x);
+ code = code*31 + java.lang.Double.hashCode(y);
return code + Objects.hashCode(crs);
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
index 877bc4b..11f378f 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/AbstractIdentifiedObject.java
@@ -44,7 +44,6 @@ import org.opengis.referencing.IdentifiedObject;
import org.apache.sis.internal.jaxb.Context;
import org.apache.sis.internal.jaxb.UseLegacyMetadata;
import org.apache.sis.internal.jaxb.referencing.Code;
-import org.apache.sis.internal.util.Numerics;
import org.apache.sis.internal.util.UnmodifiableArrayList;
import org.apache.sis.internal.metadata.NameToIdentifier;
import org.apache.sis.internal.referencing.WKTUtilities;
@@ -792,13 +791,13 @@ public class AbstractIdentifiedObject extends FormattableObject implements Ident
public final int hashCode() { // No need to synchronize; ok if invoked twice.
int hash = hashCode;
if (hash == 0) {
- hash = Numerics.hashCode(computeHashCode());
+ hash = Long.hashCode(computeHashCode());
if (hash == 0) {
hash = -1;
}
hashCode = hash;
}
- assert hash == -1 || hash == Numerics.hashCode(computeHashCode()) : hash;
+ assert hash == -1 || hash == Long.hashCode(computeHashCode()) : hash;
return hash;
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DirectionAlongMeridian.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DirectionAlongMeridian.java
index 01ccec7..b4889c6 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DirectionAlongMeridian.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/cs/DirectionAlongMeridian.java
@@ -248,7 +248,7 @@ final class DirectionAlongMeridian extends FormattableObject implements Comparab
*/
@Override
public int hashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(meridian) + baseDirection.hashCode());
+ return Double.hashCode(meridian) + baseDirection.hashCode();
}
/**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/TimeDependentBWP.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/TimeDependentBWP.java
index 8e1e5cf..92e20e0 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/TimeDependentBWP.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/TimeDependentBWP.java
@@ -20,7 +20,6 @@ import java.util.Date;
import org.opengis.metadata.extent.Extent;
import org.opengis.referencing.datum.GeodeticDatum;
import org.opengis.referencing.datum.PrimeMeridian;
-import org.apache.sis.internal.util.Numerics;
import org.apache.sis.internal.util.DoubleDouble;
import static org.apache.sis.util.ArgumentChecks.*;
@@ -294,6 +293,6 @@ public class TimeDependentBWP extends BursaWolfParameters {
*/
@Override
public int hashCode() {
- return super.hashCode() ^ Numerics.hashCode(timeReference);
+ return super.hashCode() ^ Long.hashCode(timeReference);
}
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix1.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix1.java
index a98ad6a..8504238 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix1.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix1.java
@@ -282,6 +282,6 @@ public final class Matrix1 extends MatrixSIS {
*/
@Override
public int hashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(m00) ^ serialVersionUID);
+ return Long.hashCode(Double.doubleToLongBits(m00) ^ serialVersionUID);
}
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix2.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix2.java
index 3312b84..04e0f51 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix2.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/matrix/Matrix2.java
@@ -309,7 +309,7 @@ public final class Matrix2 extends MatrixSIS {
*/
@Override
public int hashCode() {
- return Numerics.hashCode(serialVersionUID ^
+ return Long.hashCode(serialVersionUID ^
(((Double.doubleToLongBits(m00) +
31 * Double.doubleToLongBits(m01)) +
31 * Double.doubleToLongBits(m10)) +
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
index f9c279e..c76c036 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/NormalizedProjection.java
@@ -911,7 +911,7 @@ public abstract class NormalizedProjection extends AbstractMathTransform2D imple
c = c*31 + Double.doubleToLongBits(parameters[i]);
}
}
- return super.computeHashCode() ^ Numerics.hashCode(c);
+ return super.computeHashCode() ^ Long.hashCode(c);
}
/**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
index 85fd72e..91b8401 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/projection/ZonedGridSystem.java
@@ -255,7 +255,7 @@ public class ZonedGridSystem extends AbstractMathTransform2D implements Serializ
@Override
protected int computeHashCode() {
final long c = Double.doubleToLongBits(initialLongitude) + 31*Double.doubleToLongBits(zoneWidth);
- return (super.computeHashCode() ^ Numerics.hashCode(c)) + 37 * projection.hashCode();
+ return (super.computeHashCode() ^ Long.hashCode(c)) + 37 * projection.hashCode();
}
/**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
index 87bf23c..19ca548 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/EllipsoidToCentricTransform.java
@@ -748,7 +748,7 @@ next: while (--numPts >= 0) {
*/
@Override
protected int computeHashCode() {
- int code = super.computeHashCode() + Numerics.hashCode(Double.doubleToLongBits(axisRatio));
+ int code = super.computeHashCode() + Double.hashCode(axisRatio);
if (withHeight) code += 37;
return code;
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
index 728b15e..7ef09b1 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ExponentialTransform1D.java
@@ -283,7 +283,7 @@ final class ExponentialTransform1D extends AbstractMathTransform1D implements Se
*/
@Override
protected int computeHashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(base)
+ return Long.hashCode(Double.doubleToLongBits(base)
+ 31 * Double.doubleToLongBits(scale)) ^ super.computeHashCode();
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearTransform1D.java
index bdd5395..f48965a 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LinearTransform1D.java
@@ -28,7 +28,6 @@ import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.referencing.operation.matrix.Matrix1;
import org.apache.sis.referencing.operation.matrix.Matrix2;
import org.apache.sis.internal.referencing.provider.Affine;
-import org.apache.sis.internal.util.Numerics;
import org.apache.sis.util.ComparisonMode;
/*
* We really want to use doubleToRawLongBits, not doubleToLongBits, because the
@@ -350,7 +349,7 @@ class LinearTransform1D extends AbstractMathTransform1D implements LinearTransfo
*/
@Override
protected int computeHashCode() {
- return Numerics.hashCode(doubleToRawLongBits(offset) + 31*doubleToRawLongBits(scale)) ^ super.computeHashCode();
+ return Long.hashCode(doubleToRawLongBits(offset) + 31*doubleToRawLongBits(scale)) ^ super.computeHashCode();
}
/**
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
index bdc5e9a..0be0bb5 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/LogarithmicTransform1D.java
@@ -406,7 +406,7 @@ class LogarithmicTransform1D extends AbstractMathTransform1D implements Serializ
/** {@inheritDoc} */
@Override
protected int computeHashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(offset)) ^ super.computeHashCode();
+ return Double.hashCode(offset) ^ super.computeHashCode();
}
/** Compares the specified object with this math transform for equality. */
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MolodenskyFormula.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MolodenskyFormula.java
index 80920c4..6386fc3 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MolodenskyFormula.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MolodenskyFormula.java
@@ -453,7 +453,7 @@ abstract class MolodenskyFormula extends DatumShiftTransform {
*/
@Override
protected int computeHashCode() {
- int code = super.computeHashCode() + Numerics.hashCode(
+ int code = super.computeHashCode() + Long.hashCode(
Double.doubleToLongBits(Δa)
+ Double.doubleToLongBits(Δfmod)
+ 31 * (Double.doubleToLongBits(tX)
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PowerTransform1D.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PowerTransform1D.java
index b05de03..1c0f6cf 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PowerTransform1D.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PowerTransform1D.java
@@ -194,7 +194,7 @@ final class PowerTransform1D extends AbstractMathTransform1D implements Serializ
*/
@Override
protected int computeHashCode() {
- return super.computeHashCode() + Numerics.hashCode(Double.doubleToLongBits(power));
+ return super.computeHashCode() + Double.hashCode(power);
}
/**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/DoubleDouble.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/DoubleDouble.java
index 3cefe5a..473d0cb 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/DoubleDouble.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/DoubleDouble.java
@@ -1077,7 +1077,7 @@ public final class DoubleDouble extends Number {
*/
@Override
public int hashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(value) ^ Double.doubleToLongBits(error));
+ return Long.hashCode(Double.doubleToLongBits(value) ^ Double.doubleToLongBits(error));
}
/**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java
index 219d76f..2540dd6 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Numerics.java
@@ -308,16 +308,6 @@ public final class Numerics extends Static {
}
/**
- * Returns a hash code value for the given long.
- *
- * @param c the value to hash.
- * @return hash code value for the given long.
- */
- public static int hashCode(final long c) {
- return ((int) c) ^ (int) (c >>> Integer.SIZE);
- }
-
- /**
* Converts an unsigned {@code long} to a {@code float} value.
*
* @param value the unsigned {@code long} value.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/Line.java b/core/sis-utility/src/main/java/org/apache/sis/math/Line.java
index 5cc8b9a..6c0fae9 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/Line.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/Line.java
@@ -412,7 +412,7 @@ public class Line implements Cloneable, Serializable {
*/
@Override
public int hashCode() {
- return Numerics.hashCode(serialVersionUID ^ (doubleToLongBits(slope) + 31*doubleToLongBits(y0)));
+ return Long.hashCode(serialVersionUID ^ (doubleToLongBits(slope) + 31*doubleToLongBits(y0)));
}
/**
diff --git a/core/sis-utility/src/main/java/org/apache/sis/math/Plane.java b/core/sis-utility/src/main/java/org/apache/sis/math/Plane.java
index 13b8867..1b959f0 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/math/Plane.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/math/Plane.java
@@ -590,7 +590,7 @@ public class Plane implements Cloneable, Serializable {
*/
@Override
public int hashCode() {
- return Numerics.hashCode(serialVersionUID
+ return Long.hashCode(serialVersionUID
^ (Double.doubleToLongBits(z0)
+ 31 * (Double.doubleToLongBits(sx)
+ 31 * (Double.doubleToLongBits(sy)))));
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java b/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
index f089e4c..03cf2e0 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/LinearConverter.java
@@ -423,9 +423,9 @@ final class LinearConverter extends AbstractConverter implements LenientComparab
*/
@Override
public int hashCode() {
- return Numerics.hashCode(Double.doubleToLongBits(scale)
- + 31 * (Double.doubleToLongBits(offset)
- + 37 * Double.doubleToLongBits(divisor)));
+ return Long.hashCode(Double.doubleToLongBits(scale)
+ + 31 * (Double.doubleToLongBits(offset)
+ + 37 * Double.doubleToLongBits(divisor)));
}
/**
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 23/31: Renamed GridGeometry as Localization for avoiding
confusion with GridGeometry in sis-raster.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit ce75bda86b6835ae4835ee6f4fa4a42fa615e08d
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Tue Jun 5 08:46:28 2018 +0000
Renamed GridGeometry as Localization for avoiding confusion with GridGeometry in sis-raster.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832917 13f79535-47bb-0310-9956-ffa450edef68
---
.../main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java | 4 ++--
.../sis/storage/geotiff/{GridGeometry.java => Localization.java} | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index be28f26..c34c892 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -1162,7 +1162,7 @@ final class ImageFileDirectory {
* the translation terms now.
*/
if (gridToCRS != null && !completeMatrixSpecified) {
- if (!GridGeometry.setTranslationTerms(gridToCRS, modelTiePoints)) {
+ if (!Localization.setTranslationTerms(gridToCRS, modelTiePoints)) {
throw missingTag(Tags.ModelTiePoints);
}
}
@@ -1254,7 +1254,7 @@ final class ImageFileDirectory {
}
try {
if (!isGeorectified) {
- metadata.addGeolocation(new GridGeometry(filename(), crs, modelTiePoints));
+ metadata.addGeolocation(new Localization(filename(), crs, modelTiePoints));
}
} catch (TransformException e) {
reader.owner.warning(null, e);
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometry.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
similarity index 99%
rename from storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometry.java
rename to storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
index 0b7a02e..581e30d 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometry.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
@@ -79,7 +79,7 @@ import org.apache.sis.math.Vector;
* @module
*/
@SuppressWarnings("serial")
-final class GridGeometry extends AbstractCoordinateOperation implements GeolocationInformation {
+final class Localization extends AbstractCoordinateOperation implements GeolocationInformation {
/**
* Number of floating point values in each (I,J,K,X,Y,Z) record.
*/
@@ -94,7 +94,7 @@ final class GridGeometry extends AbstractCoordinateOperation implements Geolocat
/**
* Creates a new transformation from the information found by {@link ImageFileDirectory}.
*/
- GridGeometry(final String name, final CoordinateReferenceSystem crs, final Vector modelTiePoints)
+ Localization(final String name, final CoordinateReferenceSystem crs, final Vector modelTiePoints)
throws FactoryException, TransformException
{
super(Collections.singletonMap(NAME_KEY, name), null, crs, null, localizationGrid(modelTiePoints, null));
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 12/31: Improve GridGeometry documentation and add a
isConversionLinear method.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 6ba6b9b26f254ae6cc5b1aa9a3523a82d0a98420
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Thu May 31 11:07:16 2018 +0000
Improve GridGeometry documentation and add a isConversionLinear method.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832598 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/coverage/grid/GridGeometry.java | 179 +++++++++++++++------
1 file changed, 128 insertions(+), 51 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 8dedd89..246a71c 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -19,7 +19,6 @@ package org.apache.sis.coverage.grid;
import java.util.Objects;
import java.io.Serializable;
import java.awt.image.RenderedImage; // For javadoc only.
-import org.opengis.geometry.Envelope;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.operation.Matrix;
@@ -40,18 +39,22 @@ import org.opengis.coverage.grid.GridEnvelope;
/**
- * Describes the valid extent of grid coordinates and the transform from those grid coordinates
- * to real world coordinates. Grid geometries contains:
+ * Valid extent of grid coordinates together with the transform from those grid coordinates
+ * to real world coordinates. {@code GridGeometry} contains:
*
* <ul>
- * <li>A <cite>grid envelope</cite> (a.k.a. <cite>"grid extent"</cite>),
+ * <li>A {@linkplain #getExtent() grid extent} (a.k.a. <cite>grid envelope</cite>),
* often inferred from the {@link RenderedImage} size.</li>
- * <li>A <cite>grid to CRS</cite> {@link MathTransform},
- * which can be inferred from the grid envelope and the georeferenced envelope.</li>
- * <li>A georeferenced {@link Envelope}, which can be inferred from the grid envelope
- * and the <cite>grid to CRS</cite> transform.</li>
- * <li>An optional {@link CoordinateReferenceSystem} (CRS) specified as part of the georeferenced envelope.
+ * <li>A {@linkplain #getGridToCRS grid to CRS} transform,
+ * which may be inferred from the grid extent and the georeferenced envelope.</li>
+ * <li>A {@linkplain #getEnvelope() georeferenced envelope}, which can be inferred
+ * from the grid extent and the <cite>grid to CRS</cite> transform.</li>
+ * <li>An optional {@linkplain #getCoordinateReferenceSystem() Coordinate Reference System} (CRS)
+ * specified as part of the georeferenced envelope.
* This CRS is the target of the <cite>grid to CRS</cite> transform.</li>
+ * <li>An <em>estimation</em> of {@linkplain #resolution(boolean) grid resolution} along each CRS axes,
+ * computed from the <cite>grid to CRS</cite> transform and eventually from the grid extent.</li>
+ * <li>An {@linkplain #isConversionLinear indication of whether conversion for an axis is linear or not}.</li>
* </ul>
*
* All above properties except the CRS should be mandatory, but are allowed to be temporarily absent during
@@ -109,7 +112,7 @@ public class GridGeometry implements Serializable {
* A bitmask to specify the validity of the grid resolution.
*
* @see #isDefined(int)
- * @see #resolution()
+ * @see #resolution(boolean)
*/
public static final int RESOLUTION = 16;
@@ -135,16 +138,12 @@ public class GridGeometry implements Serializable {
/**
* The conversion from grid indices to "real world" coordinates, or {@code null} if unknown.
- * This conversion is usually affine. It maps {@linkplain PixelInCell#CELL_CENTER pixel center}
- * to "real world" coordinate, for example using the following lines:
- *
- * {@preformat java
- * DirectPosition indicesOfCell = new GeneralDirectPosition(2, 3, 4):
- * DirectPosition aPixelCenter = gridToCRS.transform(indicesOfCell, null);
- * }
+ * If non-null, the conversion shall map {@linkplain PixelInCell#CELL_CENTER pixel center}.
+ * This conversion is usually, but not necessarily, affine.
*
* @see #CRS
* @see #getGridToCRS(PixelInCell)
+ * @see PixelInCell#CELL_CENTER
*/
protected final MathTransform gridToCRS;
@@ -161,11 +160,23 @@ public class GridGeometry implements Serializable {
* An <em>estimation</em> of the grid resolution, in units of the CRS axes.
* Computed from {@link #gridToCRS}, eventually together with {@link #extent}.
*
- * @see #resolution()
+ * @see #RESOLUTION
+ * @see #resolution(boolean)
*/
protected final double[] resolution;
/**
+ * Whether the conversions from grid coordinates to the CRS are linear, for each target axis.
+ * The bit located at {@code 1L << dimension} is set to 1 when the conversion at that dimension is non-linear.
+ * The dimension indices are those of the CRS, not the grid. The use of {@code long} type limits the capacity
+ * to 64 dimensions. But actually {@code GridGeometry} can contain more dimensions provided that index of the
+ * last non-linear dimension is not greater than 64.
+ *
+ * @see #isConversionLinear(int...)
+ */
+ private final long nonLinears;
+
+ /**
* Creates a new grid geometry with the same values than the given grid geometry.
* This is a copy constructor for subclasses.
*
@@ -177,6 +188,7 @@ public class GridGeometry implements Serializable {
cornerToCRS = other.cornerToCRS;
envelope = other.envelope;
resolution = other.resolution;
+ nonLinears = other.nonLinears;
}
/*
@@ -189,6 +201,15 @@ public class GridGeometry implements Serializable {
/**
* Creates a new grid geometry from a grid envelope and a mapping from pixel coordinates to "real world" coordinates.
* At least one of {@code extent}, {@code gridToCRS} or {@code crs} arguments shall be non-null.
+ * If {@code gridToCRS} is non-null, than {@code anchor} shall be non-null too with one of the following values:
+ *
+ * <ul>
+ * <li>{@link PixelInCell#CELL_CENTER} if conversions of cell indices by {@code gridToCRS} give "real world"
+ * coordinates close to the center of each cell.</li>
+ * <li>{@link PixelInCell#CELL_CORNER} if conversions of cell indices by {@code gridToCRS} give "real world"
+ * coordinates at the corner of each cell. The cell corner is the one for which all grid indices have the
+ * smallest values (closest to negative infinity).</li>
+ * </ul>
*
* @param extent the valid extent of grid coordinates, or {@code null} if unknown.
* @param anchor {@linkplain PixelInCell#CELL_CENTER Cell center} for OGC conventions or
@@ -239,6 +260,7 @@ public class GridGeometry implements Serializable {
} else {
resolution = null;
}
+ nonLinears = findNonLinearTargets(gridToCRS);
}
/**
@@ -281,6 +303,24 @@ public class GridGeometry implements Serializable {
}
/**
+ * Returns the number of dimensions of the <em>CRS</em>. This is typically the same than the
+ * number of {@linkplain #getDimension() grid dimensions}, but not necessarily.
+ */
+ private int getTargetDimension() {
+ if (gridToCRS != null) {
+ return gridToCRS.getTargetDimensions();
+ } else if (envelope != null) {
+ return envelope.getDimension();
+ } else {
+ /*
+ * Last resort only since we have no guarantee that the grid dimension is the same
+ * then the CRS dimension (converse of the rational in getDimension() method).
+ */
+ return extent.getDimension();
+ }
+ }
+
+ /**
* Returns the "real world" coordinate reference system.
*
* @return the coordinate reference system (never {@code null}).
@@ -345,11 +385,13 @@ public class GridGeometry implements Serializable {
* }
*
* Callers must specify whether they want the "real world" coordinates of pixel center or pixel corner.
+ * The cell corner is the one for which all grid indices have the smallest values (closest to negative infinity).
* As a rule of thumb:
*
* <ul>
* <li>Use {@link PixelInCell#CELL_CENTER} for transforming <em>points</em>.</li>
- * <li>Use {@link PixelInCell#CELL_CORNER} for transforming <em>envelopes</em>.</li>
+ * <li>Use {@link PixelInCell#CELL_CORNER} for transforming <em>envelopes</em>
+ * with inclusive lower coordinates and <strong>exclusive</strong> upper coordinates.</li>
* </ul>
*
* @param anchor the pixel part to map.
@@ -374,24 +416,63 @@ public class GridGeometry implements Serializable {
}
/**
+ * Indicates whether the <cite>grid to CRS</cite> conversion is linear for all the specified CRS axes.
+ * The conversion from grid coordinates to real world coordinates is often linear for some dimensions,
+ * typically the horizontal ones at indices 0 and 1. But the vertical dimension (usually at index 3)
+ * is often non-linear, for example with data at 0, 5, 10, 100 and 1000 metres.
+ *
+ * @param targets indices of the CRS axes. This is not necessarily the same than indices of grid axes.
+ * @return {@code true} if the conversion from grid coordinates to "real world" coordinates is linear
+ * for all the given CRS dimension.
+ */
+ public boolean isConversionLinear(final int... targets) {
+ final int dimension = getTargetDimension();
+ long mask = 0;
+ for (final int d : targets) {
+ ArgumentChecks.ensureValidIndex(dimension, d);
+ if (d < Long.SIZE) mask |= (1L << d);
+ }
+ return (nonLinears & mask) == 0;
+ }
+
+ /**
* Returns an <em>estimation</em> of the grid resolution, in units of the coordinate reference system axes.
* If non-null, the length of the returned array is the number of CRS dimensions, with {@code resolution[0]}
* being the resolution along the first CRS axis, {@code resolution[1]} the resolution along the second CRS
* axis, <i>etc</i>. Note that this axis order is not necessarily the same than grid axis order.
*
* <p>If some resolutions are not constant factors (i.e. the {@code gridToCRS} transform for the corresponding
- * dimension is non-linear), then the resolution is set to an arbitrary representative resolution (currently
- * the resolution in the grid center, but this arbitrary choice may change in any future Apache SIS version).</p>
+ * dimension is non-linear), then the resolution is set to one of the following values:</p>
*
+ * <ul>
+ * <li>{@link Double#NaN} if {@code allowEstimates} is {@code false}.</li>
+ * <li>An arbitrary representative resolution otherwise. This is currently the resolution in the grid center,
+ * but this arbitrary choice may change in any future Apache SIS version.</li>
+ * </ul>
+ *
+ * <div class="note"><b>API note:</b>
+ * this method name does not have the {@code "get"} prefix because it does not return a supplied value.
+ * The resolution is computed and may be representative of only a part of the grid.</div>
+ *
+ * @param allowEstimates whether to provide some values even for resolutions that are not constant factors.
* @return an <em>estimation</em> of the grid resolution.
* @throws IncompleteGridGeometryException if this grid geometry has no resolution —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #RESOLUTION})</code> returned {@code false}.
*/
- public double[] resolution() {
+ public double[] resolution(final boolean allowEstimates) {
if (resolution != null) {
- resolution.clone();
+ final double[] res = resolution.clone();
+ if (!allowEstimates) {
+ long nonLinearDimensions = nonLinears;
+ while (nonLinearDimensions != 0) {
+ final int i = Long.numberOfTrailingZeros(nonLinearDimensions);
+ nonLinearDimensions &= ~(1L << i);
+ res[i] = Double.NaN;
+ }
+ }
+ return res;
}
- throw incomplete(ENVELOPE, (gridToCRS == null) ? Resources.Keys.UnspecifiedTransform : Resources.Keys.UnspecifiedGridExtent);
+ throw incomplete(RESOLUTION, (gridToCRS == null) ? Resources.Keys.UnspecifiedTransform : Resources.Keys.UnspecifiedGridExtent);
}
/**
@@ -403,7 +484,7 @@ public class GridGeometry implements Serializable {
*/
private static double[] resolution(final Matrix gridToCRS, final int numToIgnore) {
final double[] resolution = new double[gridToCRS.getNumRow() - numToIgnore];
- final double[] buffer = new double[gridToCRS.getNumCol() - numToIgnore];
+ final double[] buffer = new double[gridToCRS.getNumCol() - numToIgnore];
for (int j=0; j<resolution.length; j++) {
for (int i=0; i<buffer.length; i++) {
buffer[i] = gridToCRS.getElement(j,i);
@@ -418,14 +499,13 @@ public class GridGeometry implements Serializable {
* Current implementation assumes that everything else than {@code LinearTransform} and pass-through dimensions are non-linear.
* This is not always true (e.g. in a Mercator projection, the "longitude → easting" part is linear too), but should be okay
* for {@code GridGeometry} purposes.
+ *
+ * <p>We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
+ * This limit us to 64 dimensions, which is assumed more than enough. Note that {@code GridGeometry} can
+ * contain more dimensions provided that index of the last non-linear dimension is not greater than 64.</p>
*/
- private static int[] findNonLinearTargets(final MathTransform gridToCRS) {
- /*
- * We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
- * This limit us to 64 dimensions, which is assumed more than enough.
- */
+ private static long findNonLinearTargets(final MathTransform gridToCRS) {
long nonLinearDimensions = 0;
- final int dimension = gridToCRS.getTargetDimensions();
for (final MathTransform step : MathTransforms.getSteps(gridToCRS)) {
final Matrix mat = MathTransforms.getMatrix(step);
if (mat != null) {
@@ -441,12 +521,12 @@ public class GridGeometry implements Serializable {
for (int j = mat.getNumRow() - 1; --j >= 0;) { // Possible target dimensions
if (mat.getElement(j, i) != 0) {
if (j >= Long.SIZE) {
- throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
+ throw excessiveDimension(gridToCRS);
}
- nonLinearDimensions |= (1 << j);
+ nonLinearDimensions |= (1L << j);
}
}
- mask &= ~(1 << i);
+ mask &= ~(1L << i);
}
} else if (step instanceof PassThroughTransform) {
/*
@@ -460,9 +540,9 @@ public class GridGeometry implements Serializable {
final int maxBits = Long.SIZE - Math.max(dimIncrease, 0);
for (final int i : ((PassThroughTransform) step).getModifiedCoordinates()) {
if (i >= maxBits) {
- throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
+ throw excessiveDimension(gridToCRS);
}
- mask |= (1 << i);
+ mask |= (1L << i);
}
/*
* The mask we just computed identifies non-linear source dimensions, but we need target
@@ -500,24 +580,21 @@ public class GridGeometry implements Serializable {
/*
* Not a known transform. Assume all dimensions may become non-linear.
*/
- final int[] indices = new int[dimension];
- for (int i=0; i<dimension; i++) {
- indices[i] = i;
+ final int dimension = gridToCRS.getTargetDimensions();
+ if (dimension > Long.SIZE) {
+ throw excessiveDimension(gridToCRS);
}
- return indices;
+ return (dimension >= Long.SIZE) ? -1 : (1L << dimension) - 1;
}
}
- /*
- * Expand the bitmasks to an array.
- */
- int i = 0;
- final int[] indices = new int[Long.bitCount(nonLinearDimensions)];
- while (nonLinearDimensions != 0) {
- final int p = Long.numberOfTrailingZeros(nonLinearDimensions);
- nonLinearDimensions &= ~(1 << p);
- indices[i++] = p;
- }
- return indices;
+ return nonLinearDimensions;
+ }
+
+ /**
+ * Invoked when the number of non-linear dimensions exceeds the {@code GridGeometry} capacity.
+ */
+ private static ArithmeticException excessiveDimension(final MathTransform gridToCRS) {
+ return new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, gridToCRS.getTargetDimensions()));
}
/**
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 09/31: Documentation clarification in GridExtent.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 70215bca8dd5d289f4395b96033fde0d08b6551b
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed May 30 10:25:29 2018 +0000
Documentation clarification in GridExtent.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832531 13f79535-47bb-0310-9956-ffa450edef68
---
.../java/org/apache/sis/coverage/grid/GridExtent.java | 16 +++++++++-------
.../java/org/apache/sis/coverage/grid/GridGeometry.java | 11 +++++++++++
2 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 816a62f..7810f74 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -30,14 +30,16 @@ import org.opengis.coverage.grid.GridCoordinates;
/**
* A range of grid coverage coordinates, also known as "grid envelope".
- * {@code GridExtent} instances are unmodifiable,
- * so they can be shared between different {@link GridGeometry} instances.
+ * {@code GridExtent} are defined by {@linkplain #getLow() low} coordinates (often all zeros)
+ * and {@linkplain #getHigh() high} coordinates, <strong>inclusive</strong>.
+ * For example a grid with a width of 512 cells can have a low coordinate of 0 and high coordinate of 511.
*
- * <p><b>CAUTION:</b>
- * ISO 19123 defines {@linkplain #getHigh high} coordinates as <strong>inclusive</strong>.
- * We follow this specification for all getters methods, but developer should keep in mind
- * that this is the opposite of Java2D usage where {@link java.awt.Rectangle} maximal values are exclusive.
- * When the context is ambiguous, an explicit {@code isHighIncluded} argument is required.</p>
+ * <div class="note"><b>Note:</b>
+ * The inclusiveness of {@linkplain #getHigh() high} coordinates come from ISO 19123.
+ * We follow this specification for all getters methods, but developers should keep in mind
+ * that this is the opposite of Java2D usage where {@link java.awt.Rectangle} maximal values are exclusive.</div>
+ *
+ * {@code GridExtent} instances are unmodifiable, so they can be shared between different {@link GridGeometry} instances.
*
* @author Martin Desruisseaux (IRD, Geomatys)
* @version 1.0
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 79ac7cc..d719a23 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -110,6 +110,9 @@ public class GridGeometry implements Serializable {
* The valid domain of a grid coverage, or {@code null} if unknown. The lowest valid grid coordinate is zero
* for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
* A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
+ *
+ * @see #EXTENT
+ * @see #getExtent()
*/
protected final GridExtent extent;
@@ -117,6 +120,9 @@ public class GridGeometry implements Serializable {
* The geodetic envelope, or {@code null} if unknown. If non-null, this envelope is usually the grid {@link #extent}
* {@linkplain #gridToCRS transformed} to real world coordinates. The Coordinate Reference System} (CRS) of this
* envelope defines the "real world" CRS of this grid geometry.
+ *
+ * @see #ENVELOPE
+ * @see #getEnvelope()
*/
protected final ImmutableEnvelope envelope;
@@ -129,6 +135,9 @@ public class GridGeometry implements Serializable {
* DirectPosition aCellIndices = ...:
* DirectPosition aPixelCenter = gridToCRS.transform(pixels, aCellIndices);
* }
+ *
+ * @see #CRS
+ * @see #getGridToCRS()
*/
protected final MathTransform gridToCRS;
@@ -144,6 +153,8 @@ public class GridGeometry implements Serializable {
/**
* The resolution in units of the CRS axes.
* Computed only when first needed.
+ *
+ * @see #resolution(boolean)
*/
private transient double[] resolution;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 11/31: Computes resolution at GridGeometry construction time.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 034287d8b6307a9c083b50204eeba65e62876164
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed May 30 14:55:43 2018 +0000
Computes resolution at GridGeometry construction time.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832551 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/coverage/grid/GridExtent.java | 43 +-
.../org/apache/sis/coverage/grid/GridGeometry.java | 488 +++++++++++----------
.../apache/sis/coverage/grid/PixelTranslation.java | 21 +-
.../org/apache/sis/internal/raster/Resources.java | 15 +
.../sis/internal/raster/Resources.properties | 3 +
.../sis/internal/raster/Resources_fr.properties | 3 +
.../org/apache/sis/geometry/GeneralEnvelope.java | 12 +-
7 files changed, 326 insertions(+), 259 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 25a7db0..8cef725 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -18,9 +18,15 @@ package org.apache.sis.coverage.grid;
import java.util.Arrays;
import java.io.Serializable;
+import org.opengis.geometry.DirectPosition;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.internal.raster.Resources;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.geometry.Envelopes;
+import org.apache.sis.geometry.GeneralDirectPosition;
// Branch-dependent imports
import org.opengis.coverage.grid.GridEnvelope;
@@ -130,7 +136,7 @@ public class GridExtent implements GridEnvelope, Serializable {
System.arraycopy(high, 0, ordinates, dimension, dimension);
if (!isHighIncluded) {
for (int i=dimension; i < ordinates.length; i++) {
- ordinates[i]--;
+ ordinates[i] = Math.decrementExact(ordinates[i]);
}
}
checkCoherence(ordinates);
@@ -245,6 +251,7 @@ public class GridExtent implements GridEnvelope, Serializable {
* @return the span at the given dimension.
* @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
* than the {@linkplain #getDimension() grid dimension}.
+ * @throws ArithmeticException if the span is too large for the {@code int} primitive type.
*
* @see #getLow(int)
* @see #getHigh(int)
@@ -253,7 +260,37 @@ public class GridExtent implements GridEnvelope, Serializable {
public int getSpan(final int index) {
final int dimension = getDimension();
ArgumentChecks.ensureValidIndex(dimension, index);
- return ordinates[dimension + index] - ordinates[index] + 1;
+ return Math.toIntExact(ordinates[dimension + index] - (ordinates[index] - 1L));
+ }
+
+ /**
+ * Returns the median (or center) coordinates of this grid extent.
+ *
+ * @return the coordinates of the grid center.
+ */
+ public DirectPosition getMedian() {
+ final int dimension = getDimension();
+ final GeneralDirectPosition center = new GeneralDirectPosition(dimension);
+ for (int i=0; i<dimension; i++) {
+ center.setOrdinate(i, ((double) ordinates[i] + (double) ordinates[i + dimension] + 1.0) * 0.5);
+ }
+ return center;
+ }
+
+ /**
+ * Transforms this grid extent to a "real world" envelope using the given transform.
+ * The transform shall map <em>pixel corner</em> to real world coordinates.
+ *
+ * @param gridToCRS a transform from <em>pixel corner</em> to real world coordinates
+ * @return this grid extent in real world coordinates.
+ */
+ final GeneralEnvelope toCRS(final MathTransform gridToCRS) throws TransformException {
+ final int dimension = getDimension();
+ final GeneralEnvelope envope = new GeneralEnvelope(dimension);
+ for (int i=0; i<dimension; i++) {
+ envope.setRange(i, ordinates[i], ordinates[i + dimension] + 1.0);
+ }
+ return Envelopes.transform(gridToCRS, envope);
}
/**
@@ -267,7 +304,7 @@ public class GridExtent implements GridEnvelope, Serializable {
* @return the sub grid envelope.
* @throws IndexOutOfBoundsException if an index is out of bounds.
*/
- public GridExtent subEnvelope(final int lower, final int upper) {
+ public GridExtent subExtent(final int lower, final int upper) {
final int dimension = getDimension();
ArgumentChecks.ensureValidIndexRange(dimension, lower, upper);
final int newDim = upper - lower;
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index d0cb418..8dedd89 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -27,13 +27,13 @@ import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.apache.sis.math.MathFunctions;
-import org.apache.sis.geometry.Envelopes;
import org.apache.sis.geometry.GeneralEnvelope;
import org.apache.sis.geometry.ImmutableEnvelope;
-import org.apache.sis.geometry.GeneralDirectPosition;
import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.transform.PassThroughTransform;
+import org.apache.sis.internal.raster.Resources;
import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.ArgumentChecks;
// Branch-dependent imports
import org.opengis.coverage.grid.GridEnvelope;
@@ -101,11 +101,19 @@ public class GridGeometry implements Serializable {
* A bitmask to specify the validity of the <cite>"grid to CRS"</cite> transform.
*
* @see #isDefined(int)
- * @see #getGridToCRS()
+ * @see #getGridToCRS(PixelInCell)
*/
public static final int GRID_TO_CRS = 8;
/**
+ * A bitmask to specify the validity of the grid resolution.
+ *
+ * @see #isDefined(int)
+ * @see #resolution()
+ */
+ public static final int RESOLUTION = 16;
+
+ /**
* The valid domain of a grid coverage, or {@code null} if unknown. The lowest valid grid coordinate is zero
* for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
* A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
@@ -126,22 +134,22 @@ public class GridGeometry implements Serializable {
protected final ImmutableEnvelope envelope;
/**
- * The math transform from grid indices to "real world" coordinates, or {@code null} if unknown.
- * This math transform is usually affine. It maps {@linkplain PixelInCell#CELL_CENTER pixel center}
- * to "real world" coordinate using the following line:
+ * The conversion from grid indices to "real world" coordinates, or {@code null} if unknown.
+ * This conversion is usually affine. It maps {@linkplain PixelInCell#CELL_CENTER pixel center}
+ * to "real world" coordinate, for example using the following lines:
*
* {@preformat java
- * DirectPosition aCellIndices = ...:
- * DirectPosition aPixelCenter = gridToCRS.transform(pixels, aCellIndices);
+ * DirectPosition indicesOfCell = new GeneralDirectPosition(2, 3, 4):
+ * DirectPosition aPixelCenter = gridToCRS.transform(indicesOfCell, null);
* }
*
* @see #CRS
- * @see #getGridToCRS()
+ * @see #getGridToCRS(PixelInCell)
*/
protected final MathTransform gridToCRS;
/**
- * Same transform than {@link #gridToCRS} but from {@linkplain PixelInCell#CELL_CORNER pixel corner}
+ * Same conversion than {@link #gridToCRS} but from {@linkplain PixelInCell#CELL_CORNER pixel corner}
* instead than center. This transform is preferable to {@code gridToCRS} for transforming envelopes.
*
* @serial This field is serialized because it may be a value specified explicitly at construction time,
@@ -150,12 +158,12 @@ public class GridGeometry implements Serializable {
private final MathTransform cornerToCRS;
/**
- * The resolution in units of the CRS axes.
- * Computed only when first needed.
+ * An <em>estimation</em> of the grid resolution, in units of the CRS axes.
+ * Computed from {@link #gridToCRS}, eventually together with {@link #extent}.
*
- * @see #resolution(boolean)
+ * @see #resolution()
*/
- private transient double[] resolution;
+ protected final double[] resolution;
/**
* Creates a new grid geometry with the same values than the given grid geometry.
@@ -171,39 +179,26 @@ public class GridGeometry implements Serializable {
resolution = other.resolution;
}
- /**
- * Creates a new grid geometry from a grid envelope and a math transform mapping pixel <em>center</em>.
- *
- * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
- * @param gridToCRS the math transform which allows for the transformations from grid coordinates
- * ({@linkplain PixelInCell#CELL_CENTER pixel center}) to real world earth coordinates.
- * May be {@code null} if unknown.
- * @param crs the coordinate reference system for the "real world" coordinates, or {@code null} if unknown.
- * This CRS is given to the {@linkplain #getEnvelope() envelope}.
- *
- * @throws MismatchedDimensionException if the math transform and the CRS do not have consistent dimensions.
- * @throws TransformException if the math transform can not compute the geospatial envelope from the grid envelope.
+ /*
+ * Do not provide convenience constructor without PixelInCell or PixelOrientation argument.
+ * Experience shows that 0.5 pixel offsets in image georeferencing is a recurrent problem.
+ * We really want to force developers to think about whether their 'gridToCRS' transform
+ * locates pixel corner or pixel center.
*/
- public GridGeometry(final GridEnvelope extent, final MathTransform gridToCRS, final CoordinateReferenceSystem crs)
- throws TransformException
- {
- this(extent, PixelInCell.CELL_CENTER, gridToCRS, crs);
- }
/**
- * Creates a new grid geometry from a grid envelope and a math transform mapping pixel center or corner.
- * This is the most general constructor, the one that gives the maximal control over the grid geometry
- * to be created.
+ * Creates a new grid geometry from a grid envelope and a mapping from pixel coordinates to "real world" coordinates.
+ * At least one of {@code extent}, {@code gridToCRS} or {@code crs} arguments shall be non-null.
*
- * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
- * @param anchor {@link PixelInCell#CELL_CENTER} for OGC conventions or
- * {@link PixelInCell#CELL_CORNER} for Java2D/JAI conventions.
- * @param gridToCRS the math transform which allows for the transformations from grid coordinates
- * to real world earth coordinates. May be {@code null} if unknown.
- * @param crs the coordinate reference system for the "real world" coordinates, or {@code null} if unknown.
- * This CRS is given to the {@linkplain #getEnvelope() envelope}.
+ * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
+ * @param anchor {@linkplain PixelInCell#CELL_CENTER Cell center} for OGC conventions or
+ * {@linkplain PixelInCell#CELL_CORNER cell corner} for Java2D/JAI conventions.
+ * @param gridToCRS the mapping from grid coordinates to "real world" coordinates, or {@code null} if unknown.
+ * @param crs the coordinate reference system of the "real world" coordinates, or {@code null} if unknown.
+ * @throws NullPointerException if {@code extent}, {@code gridToCRS} and {@code crs} arguments are all null.
* @throws MismatchedDimensionException if the math transform and the CRS do not have consistent dimensions.
- * @throws TransformException if the math transform can not compute the geospatial envelope from the grid envelope.
+ * @throws TransformException if the math transform can not compute the geospatial envelope or the resolution
+ * from the grid envelope.
*/
public GridGeometry(final GridEnvelope extent, final PixelInCell anchor, final MathTransform gridToCRS,
final CoordinateReferenceSystem crs) throws TransformException
@@ -215,26 +210,35 @@ public class GridGeometry implements Serializable {
if (crs != null) {
ensureDimensionMatches("crs", crs.getCoordinateSystem().getDimension(), gridToCRS.getTargetDimensions());
}
+ } else if (crs == null) {
+ ArgumentChecks.ensureNonNull("extent", extent);
}
this.extent = GridExtent.castOrCopy(extent);
this.gridToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CENTER);
this.cornerToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CORNER);
GeneralEnvelope env = null;
if (extent != null && gridToCRS != null) {
- final int dimension = extent.getDimension();
- env = new GeneralEnvelope(dimension);
- for (int i=0; i<dimension; i++) {
- env.setRange(i, extent.getLow(i), extent.getHigh(i) + 1);
- }
- env = Envelopes.transform(cornerToCRS, env);
- if (crs != null) {
- env.setCoordinateReferenceSystem(crs);
- }
+ env = this.extent.toCRS(cornerToCRS);
+ env.setCoordinateReferenceSystem(crs);
} else if (crs != null) {
env = new GeneralEnvelope(crs);
env.setToNaN();
}
envelope = (env != null) ? new ImmutableEnvelope(env) : null;
+ /*
+ * If the gridToCRS transform is linear, we do not even need to check the grid extent;
+ * it can be null. Otherwise (if the transform is non-linear) the extent is mandatory.
+ * The easiest way to estimate a resolution is then to ask for the derivative at some
+ * arbitrary point. For this constructor, we take the grid center.
+ */
+ final Matrix mat = MathTransforms.getMatrix(gridToCRS);
+ if (mat != null) {
+ resolution = resolution(mat, 1);
+ } else if (extent != null && gridToCRS != null) {
+ resolution = resolution(gridToCRS.derivative(this.extent.getMedian()), 0);
+ } else {
+ resolution = null;
+ }
}
/**
@@ -255,53 +259,56 @@ public class GridGeometry implements Serializable {
/**
* Returns the number of dimensions of the <em>grid</em>. This is typically the same
- * than the number of dimension of the envelope or the CRS, but not necessarily.
+ * than the number of {@linkplain #getEnvelope() envelope} dimensions or the number of
+ * {@linkplain #getCoordinateReferenceSystem() coordinate reference system} dimensions,
+ * but not necessarily.
*
* @return the number of grid dimensions.
*/
public int getDimension() {
if (gridToCRS != null) {
return gridToCRS.getSourceDimensions();
+ } else if (extent != null) {
+ return extent.getDimension();
+ } else {
+ /*
+ * Last resort only since we have no guarantee that the envelope dimension is the same
+ * than the grid dimension (see above javadoc). The envelope should never be null at
+ * this point since the constructor verified that at least one argument was non-null.
+ */
+ return envelope.getDimension();
}
- return extent.getDimension();
}
/**
* Returns the "real world" coordinate reference system.
*
* @return the coordinate reference system (never {@code null}).
- * @throws IncompleteGridGeometryException if this grid geometry has no CRS
- * (i.e. <code>{@linkplain #isDefined isDefined}({@linkplain #CRS})</code> returned {@code false}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no CRS —
+ * i.e. <code>{@linkplain #isDefined isDefined}({@linkplain #CRS})</code> returned {@code false}.
*/
public CoordinateReferenceSystem getCoordinateReferenceSystem() throws IncompleteGridGeometryException {
if (envelope != null) {
final CoordinateReferenceSystem crs = envelope.getCoordinateReferenceSystem();
- if (crs != null) {
- assert isDefined(CRS);
- return crs;
- }
+ if (crs != null) return crs;
}
- assert !isDefined(CRS);
- throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedCrs */);
+ throw incomplete(CRS, Resources.Keys.UnspecifiedCRS);
}
/**
- * Returns the bounding box of "real world" coordinates for this grid geometry. This envelope is the
- * {@linkplain #getExtent() grid extent} {@linkplain #getGridToCRS() transformed} to the "real world"
- * coordinate system.
+ * Returns the bounding box of "real world" coordinates for this grid geometry.
+ * This envelope is computed from the {@linkplain #getExtent() grid extent}, which is
+ * {@linkplain #getGridToCRS(PixelInCell) transformed} to the "real world" coordinate system.
*
* @return the bounding box in "real world" coordinates (never {@code null}).
- * @throws IncompleteGridGeometryException if this grid geometry has no envelope
- * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #ENVELOPE})</code> returned {@code false}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no envelope —
+ * i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #ENVELOPE})</code> returned {@code false}.
*/
- public Envelope getEnvelope() throws IncompleteGridGeometryException {
+ public ImmutableEnvelope getEnvelope() throws IncompleteGridGeometryException {
if (envelope != null && !envelope.isAllNaN()) {
- assert isDefined(ENVELOPE);
return envelope;
}
- assert !isDefined(ENVELOPE);
- throw new IncompleteGridGeometryException(/* gridToCRS == null ?
- Errors.Keys.UnspecifiedTransform : Errors.Keys.UnspecifiedGridExtent */);
+ throw incomplete(ENVELOPE, (extent == null) ? Resources.Keys.UnspecifiedGridExtent : Resources.Keys.UnspecifiedTransform);
}
/**
@@ -310,49 +317,46 @@ public class GridGeometry implements Serializable {
* A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
*
* @return the grid envelope (never {@code null}).
- * @throws IncompleteGridGeometryException if this grid geometry has no extent
- * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #EXTENT})</code> returned {@code false}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no extent —
+ * i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #EXTENT})</code> returned {@code false}.
*/
public GridEnvelope getExtent() throws IncompleteGridGeometryException {
if (extent != null) {
- assert isDefined(EXTENT);
return extent;
}
- assert !isDefined(EXTENT);
- throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedImageSize */);
+ throw incomplete(EXTENT, Resources.Keys.UnspecifiedGridExtent);
}
- /**
- * Returns the transform from grid coordinates to "real world" coordinates in pixel centers.
- * The transform is often an affine transform.
- * The coordinate reference system of the real world coordinates is given by
- * {@link org.opengis.coverage.Coverage#getCoordinateReferenceSystem()}.
- *
- * <p><strong>Note:</strong> OGC 01-004 requires that the transform maps <em>pixel centers</em> to real
- * world coordinates. This is different from some other systems that map pixel's upper left corner.</p>
- *
- * @return the transform (never {@code null}).
- * @throws IncompleteGridGeometryException if this grid geometry has no transform
- * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}).
+ /*
+ * Do not provide a convenience 'getGridToCRS()' method without PixelInCell or PixelOrientation argument.
+ * Experience shows that 0.5 pixel offset in image localization is a recurrent problem. We really want to
+ * force developers to think about whether they want a gridToCRS transform locating pixel corner or center.
*/
- public MathTransform getGridToCRS() throws IncompleteGridGeometryException {
- if (gridToCRS != null) {
- assert isDefined(GRID_TO_CRS);
- return gridToCRS;
- }
- assert !isDefined(GRID_TO_CRS);
- throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedTransform */);
- }
/**
- * Returns the transform from grid coordinates to "real world" coordinates.
- * This is similar to {@link #getGridToCRS()} except that the transform may map
- * other pixel parts than {@linkplain PixelInCell#CELL_CENTER pixel center}.
+ * Returns the conversion from grid coordinates to "real world" coordinates.
+ * The conversion is often an affine transform, but not necessarily.
+ * Conversions from pixel indices to geospatial coordinates can be performed for example as below:
+ *
+ * {@preformat java
+ * MathTransform gridToCRS = gridGeometry.getGridToCRS(PixelInCell.CELL_CENTER);
+ * DirectPosition indicesOfCell = new GeneralDirectPosition(2, 3, 4):
+ * DirectPosition aPixelCenter = gridToCRS.transform(indicesOfCell, null);
+ * }
+ *
+ * Callers must specify whether they want the "real world" coordinates of pixel center or pixel corner.
+ * As a rule of thumb:
+ *
+ * <ul>
+ * <li>Use {@link PixelInCell#CELL_CENTER} for transforming <em>points</em>.</li>
+ * <li>Use {@link PixelInCell#CELL_CORNER} for transforming <em>envelopes</em>.</li>
+ * </ul>
*
* @param anchor the pixel part to map.
* @return the transform (never {@code null}).
- * @throws IncompleteGridGeometryException if this grid geometry has no transform
- * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}).
+ * @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
+ * @throws IncompleteGridGeometryException if this grid geometry has no transform —
+ * i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}.
*/
public MathTransform getGridToCRS(final PixelInCell anchor) throws IncompleteGridGeometryException {
final MathTransform mt;
@@ -363,153 +367,35 @@ public class GridGeometry implements Serializable {
} else {
mt = PixelTranslation.translate(gridToCRS, PixelInCell.CELL_CENTER, anchor);
}
- if (mt == null) {
- throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedTransform */);
+ if (mt != null) {
+ return mt;
}
- return mt;
+ throw incomplete(GRID_TO_CRS, Resources.Keys.UnspecifiedTransform);
}
/**
- * Estimates the grid resolution in units of the coordinate reference system.
- * If non-null, the length of the returned array is the number of CRS dimensions.
- * If some resolutions are not constant factors (i.e. the {@code gridToCRS} transform for the
- * corresponding dimension is non-linear), then the resolution is set to one of the following values:
+ * Returns an <em>estimation</em> of the grid resolution, in units of the coordinate reference system axes.
+ * If non-null, the length of the returned array is the number of CRS dimensions, with {@code resolution[0]}
+ * being the resolution along the first CRS axis, {@code resolution[1]} the resolution along the second CRS
+ * axis, <i>etc</i>. Note that this axis order is not necessarily the same than grid axis order.
*
- * <ul>
- * <li>{@link Double#NaN} if {@code allowEstimates} is {@code false}.</li>
- * <li>an arbitrary resolution otherwise (currently the resolution in the grid center,
- * but this arbitrary choice may change in any future Apache SIS version).</li>
- * </ul>
+ * <p>If some resolutions are not constant factors (i.e. the {@code gridToCRS} transform for the corresponding
+ * dimension is non-linear), then the resolution is set to an arbitrary representative resolution (currently
+ * the resolution in the grid center, but this arbitrary choice may change in any future Apache SIS version).</p>
*
- * @param allowEstimates whether to provide some values even for resolutions that are not constant factors.
- * @return the grid resolution, or {@code null} if unknown.
- * @throws TransformException if an error occurred while computing the grid resolution.
+ * @return an <em>estimation</em> of the grid resolution.
+ * @throws IncompleteGridGeometryException if this grid geometry has no resolution —
+ * i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #RESOLUTION})</code> returned {@code false}.
*/
- public double[] resolution(final boolean allowEstimates) throws TransformException {
- /*
- * If the gridToCRS transform is linear, we do not even need to check the grid extent;
- * it can be null. Otherwise (if the transform is non-linear) the extent is mandatory.
- */
- Matrix mat = MathTransforms.getMatrix(gridToCRS);
- if (mat != null) {
- return resolution(mat, 1);
- }
- if (extent == null || gridToCRS == null) {
- return null;
- }
- /*
- * If we reach this line, the gridToCRS transform has some non-linear parts.
- * The easiest way to estimate a resolution is to ask for the derivative at
- * some arbitrary point. For this method, we take the grid center.
- */
- final int gridDimension = extent.getDimension();
- final GeneralDirectPosition gridCenter = new GeneralDirectPosition(gridDimension);
- for (int i=0; i<gridDimension; i++) {
- gridCenter.setOrdinate(i, extent.getLow(i) + 0.5*extent.getSpan(i));
- }
- final double[] res = resolution(gridToCRS.derivative(gridCenter), 0);
- if (!allowEstimates) {
- /*
- * If we reach this line, we successfully estimated the resolutions but we need to hide non-constant values.
- * We currently don't have an API for finding the non-linear dimensions. We assume that everthing else than
- * LinearTransform and pass-through dimensions are non-linear. This is not always true (e.g. in a Mercator
- * projection, the "longitude → easting" part is linear too), but should be okay for GridGeometry purposes.
- *
- * We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
- * This limit us to 64 dimensions, which is assumed more than enough.
- */
- long nonLinearDimensions = 0;
- for (final MathTransform step : MathTransforms.getSteps(gridToCRS)) {
- mat = MathTransforms.getMatrix(step);
- if (mat != null) {
- /*
- * For linear transforms there is no bits to set. However if some bits were set by a previous
- * iteration, we may need to move them (for example the transform may swap axes). We take the
- * current bitmasks as source dimensions and find what are the target dimensions for them.
- */
- long mask = nonLinearDimensions;
- nonLinearDimensions = 0;
- while (mask != 0) {
- final int i = Long.numberOfTrailingZeros(mask); // Source dimension of non-linear part
- for (int j = mat.getNumRow() - 1; --j >= 0;) { // Possible target dimensions
- if (mat.getElement(j, i) != 0) {
- if (j >= Long.SIZE) {
- throw new ArithmeticException("Excessive number of dimensions.");
- }
- nonLinearDimensions |= (1 << j);
- }
- }
- mask &= ~(1 << i);
- }
- } else if (step instanceof PassThroughTransform) {
- /*
- * Assume that all modified coordinates use non-linear transform. We do not inspect the
- * sub-transform recursively because if it had a non-linear step, PassThroughTransform
- * should have moved that step outside the sub-transform for easier concatenation with
- * the LinearTransforms before of after that PassThroughTransform.
- */
- long mask = 0;
- final int dimIncrease = step.getTargetDimensions() - step.getSourceDimensions();
- final int maxBits = Long.SIZE - Math.max(dimIncrease, 0);
- for (final int i : ((PassThroughTransform) step).getModifiedCoordinates()) {
- if (i >= maxBits) {
- throw new ArithmeticException("Excessive number of dimensions.");
- }
- mask |= (1 << i);
- }
- /*
- * The mask we just computed identifies non-linear source dimensions, but we need target
- * dimensions. They are usually the same (the pass-through coordinate values do not have
- * their order changed). However we have a difficulty if the number of dimensions changes.
- * We know that the change happen in the sub-transform, but we do not know where exactly.
- * For example if the mask is 001010 and the number of dimensions increases by 1, we know
- * that we still have "00" at the beginning and "0" at the end of the mask, but we don't
- * know what happen between the two. Does "101" become "1101" or "1011"? We conservatively
- * take "1111", i.e. we unconditionally set all bits in the middle to 1.
- *
- * Mathematics:
- * (Long.highestOneBit(mask) << 1) - 1
- * is a mask identifying all source dimensions before trailing pass-through dimensions.
- *
- * maskHigh = (Long.highestOneBit(mask) << (dimIncrease + 1)) - 1
- * is a mask identifying all target dimensions before trailing pass-through dimensions.
- *
- * maskLow = Long.lowestOneBit(mask) - 1
- * is a mask identifying all leading pass-through dimensions (both source and target).
- *
- * maskHigh & ~maskLow
- * is a mask identifying only target dimensions after leading pass-through and before
- * trailing pass-through dimensions. In our case, all 1 bits in maskLow are also 1 bits
- * in maskHigh. So we can rewrite as
- *
- * maskHigh - maskLow
- * and the -1 terms cancel each other.
- */
- if (dimIncrease != 0) {
- mask = (Long.highestOneBit(mask) << (dimIncrease + 1)) - Long.lowestOneBit(mask);
- }
- nonLinearDimensions |= mask;
- } else {
- /*
- * Not a know transform. Assume dimension may become non-linear.
- */
- return null;
- }
- }
- /*
- * Set the resolution to NaN for all dimensions that we have determined to be non-linear.
- */
- while (nonLinearDimensions != 0) {
- final int i = Long.numberOfTrailingZeros(nonLinearDimensions);
- nonLinearDimensions &= ~(1 << i);
- res[i] = Double.NaN;
- }
+ public double[] resolution() {
+ if (resolution != null) {
+ resolution.clone();
}
- return res;
+ throw incomplete(ENVELOPE, (gridToCRS == null) ? Resources.Keys.UnspecifiedTransform : Resources.Keys.UnspecifiedGridExtent);
}
/**
- * Computes the resolutions from the given matrix. This is the length of each row vector.
+ * Computes the resolutions from the given matrix. This is the magnitude of each row vector.
*
* @param numToIgnore number of rows and columns to ignore at the end of the matrix.
* This is 0 if the matrix is a derivative (i.e. we ignore nothing), or 1 if the matrix
@@ -528,6 +414,125 @@ public class GridGeometry implements Serializable {
}
/**
+ * Guesses which target dimensions may be non-linear. We currently don't have an API for finding the non-linear dimensions.
+ * Current implementation assumes that everything else than {@code LinearTransform} and pass-through dimensions are non-linear.
+ * This is not always true (e.g. in a Mercator projection, the "longitude → easting" part is linear too), but should be okay
+ * for {@code GridGeometry} purposes.
+ */
+ private static int[] findNonLinearTargets(final MathTransform gridToCRS) {
+ /*
+ * We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
+ * This limit us to 64 dimensions, which is assumed more than enough.
+ */
+ long nonLinearDimensions = 0;
+ final int dimension = gridToCRS.getTargetDimensions();
+ for (final MathTransform step : MathTransforms.getSteps(gridToCRS)) {
+ final Matrix mat = MathTransforms.getMatrix(step);
+ if (mat != null) {
+ /*
+ * For linear transforms there is no bits to set. However if some bits were set by a previous
+ * iteration, we may need to move them (for example the transform may swap axes). We take the
+ * current bitmasks as source dimensions and find what are the target dimensions for them.
+ */
+ long mask = nonLinearDimensions;
+ nonLinearDimensions = 0;
+ while (mask != 0) {
+ final int i = Long.numberOfTrailingZeros(mask); // Source dimension of non-linear part
+ for (int j = mat.getNumRow() - 1; --j >= 0;) { // Possible target dimensions
+ if (mat.getElement(j, i) != 0) {
+ if (j >= Long.SIZE) {
+ throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
+ }
+ nonLinearDimensions |= (1 << j);
+ }
+ }
+ mask &= ~(1 << i);
+ }
+ } else if (step instanceof PassThroughTransform) {
+ /*
+ * Assume that all modified coordinates use non-linear transform. We do not inspect the
+ * sub-transform recursively because if it had a non-linear step, PassThroughTransform
+ * should have moved that step outside the sub-transform for easier concatenation with
+ * the LinearTransforms before of after that PassThroughTransform.
+ */
+ long mask = 0;
+ final int dimIncrease = step.getTargetDimensions() - step.getSourceDimensions();
+ final int maxBits = Long.SIZE - Math.max(dimIncrease, 0);
+ for (final int i : ((PassThroughTransform) step).getModifiedCoordinates()) {
+ if (i >= maxBits) {
+ throw new ArithmeticException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
+ }
+ mask |= (1 << i);
+ }
+ /*
+ * The mask we just computed identifies non-linear source dimensions, but we need target
+ * dimensions. They are usually the same (the pass-through coordinate values do not have
+ * their order changed). However we have a difficulty if the number of dimensions changes.
+ * We know that the change happen in the sub-transform, but we do not know where exactly.
+ * For example if the mask is 001010 and the number of dimensions increases by 1, we know
+ * that we still have "00" at the beginning and "0" at the end of the mask, but we don't
+ * know what happen between the two. Does "101" become "1101" or "1011"? We conservatively
+ * take "1111", i.e. we unconditionally set all bits in the middle to 1.
+ *
+ * Mathematics:
+ * (Long.highestOneBit(mask) << 1) - 1
+ * is a mask identifying all source dimensions before trailing pass-through dimensions.
+ *
+ * maskHigh = (Long.highestOneBit(mask) << (dimIncrease + 1)) - 1
+ * is a mask identifying all target dimensions before trailing pass-through dimensions.
+ *
+ * maskLow = Long.lowestOneBit(mask) - 1
+ * is a mask identifying all leading pass-through dimensions (both source and target).
+ *
+ * maskHigh & ~maskLow
+ * is a mask identifying only target dimensions after leading pass-through and before
+ * trailing pass-through dimensions. In our case, all 1 bits in maskLow are also 1 bits
+ * in maskHigh. So we can rewrite as
+ *
+ * maskHigh - maskLow
+ * and the -1 terms cancel each other.
+ */
+ if (dimIncrease != 0) {
+ mask = (Long.highestOneBit(mask) << (dimIncrease + 1)) - Long.lowestOneBit(mask);
+ }
+ nonLinearDimensions |= mask;
+ } else {
+ /*
+ * Not a known transform. Assume all dimensions may become non-linear.
+ */
+ final int[] indices = new int[dimension];
+ for (int i=0; i<dimension; i++) {
+ indices[i] = i;
+ }
+ return indices;
+ }
+ }
+ /*
+ * Expand the bitmasks to an array.
+ */
+ int i = 0;
+ final int[] indices = new int[Long.bitCount(nonLinearDimensions)];
+ while (nonLinearDimensions != 0) {
+ final int p = Long.numberOfTrailingZeros(nonLinearDimensions);
+ nonLinearDimensions &= ~(1 << p);
+ indices[i++] = p;
+ }
+ return indices;
+ }
+
+ /**
+ * Invoked when a property has been requested for which we have for information.
+ *
+ * @param bitmask the requested property, for assertion purpose.
+ * @param errorKey the resource key to use in error message.
+ * @return the exception to be thrown by the caller.
+ */
+ private IncompleteGridGeometryException incomplete(final int bitmask, final short errorKey) {
+ assert getClass() != GridGeometry.class || !isDefined(bitmask);
+ return new IncompleteGridGeometryException(Resources.format(errorKey));
+ }
+
+ /**
* Returns {@code true} if all the parameters specified by the argument are set.
*
* @param bitmask any combination of {@link #CRS}, {@link #ENVELOPE}, {@link #EXTENT} and {@link #GRID_TO_CRS}.
@@ -540,10 +545,11 @@ public class GridGeometry implements Serializable {
throw new IllegalArgumentException(Errors.format(
Errors.Keys.IllegalArgumentValue_2, "bitmask", bitmask));
}
- return ((bitmask & CRS) == 0 || (envelope != null && envelope.getCoordinateReferenceSystem() != null))
- && ((bitmask & ENVELOPE) == 0 || (envelope != null && !envelope.isAllNaN()))
- && ((bitmask & EXTENT) == 0 || (extent != null))
- && ((bitmask & GRID_TO_CRS) == 0 || (gridToCRS != null));
+ return ((bitmask & CRS) == 0 || (envelope != null && envelope.getCoordinateReferenceSystem() != null))
+ && ((bitmask & ENVELOPE) == 0 || (envelope != null && !envelope.isAllNaN()))
+ && ((bitmask & EXTENT) == 0 || (extent != null))
+ && ((bitmask & GRID_TO_CRS) == 0 || (gridToCRS != null))
+ && ((bitmask & RESOLUTION) == 0 || (resolution != null));
}
/**
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index 10a97e7..e1598a3 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -148,7 +148,7 @@ public final class PixelTranslation extends Static implements Serializable {
*
* @param anchor the {@code PixelInCell} code, or {@code null}.
* @return the corresponding pixel orientation, or {@code null} if the argument was null.
- * @throws IllegalArgumentException if the given code is unknown.
+ * @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
*/
public static PixelOrientation getPixelOrientation(final PixelInCell anchor) {
if (anchor == null) {
@@ -171,12 +171,13 @@ public final class PixelTranslation extends Static implements Serializable {
* <table class="sis">
* <caption>Translations</caption>
* <tr><th>Pixel in cell</th><th>offset</th></tr>
- * <tr><td>{@link PixelInCell#CELL_CENTER CELL_CENTER}</td><td> 0.0</td></tr>
- * <tr><td>{@link PixelInCell#CELL_CORNER CELL_CORNER}</td><td>-0.5</td></tr>
+ * <tr><td>{@link PixelInCell#CELL_CENTER CELL_CENTER}</td><td>{@code 0.0}</td></tr>
+ * <tr><td>{@link PixelInCell#CELL_CORNER CELL_CORNER}</td><td>{@code -0.5}</td></tr>
* </table>
*
* @param anchor the "pixel in cell" value.
* @return the translation for the given "pixel in cell" value.
+ * @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
*/
public static double getPixelTranslation(final PixelInCell anchor) {
if (PixelInCell.CELL_CENTER.equals(anchor)) {
@@ -197,16 +198,16 @@ public final class PixelTranslation extends Static implements Serializable {
* <table class="sis">
* <caption>Translations</caption>
* <tr><th>Pixel orientation</th> <th> dx </th><th> dy </th></tr>
- * <tr><td>{@link PixelOrientation#CENTER CENTER}</td> <td> 0.0</td><td> 0.0</td></tr>
- * <tr><td>{@link PixelOrientation#UPPER_LEFT UPPER_LEFT}</td> <td>-0.5</td><td>-0.5</td></tr>
- * <tr><td>{@link PixelOrientation#UPPER_RIGHT UPPER_RIGHT}</td><td>+0.5</td><td>-0.5</td></tr>
- * <tr><td>{@link PixelOrientation#LOWER_LEFT LOWER_LEFT}</td> <td>-0.5</td><td>+0.5</td></tr>
- * <tr><td>{@link PixelOrientation#LOWER_RIGHT LOWER_RIGHT}</td><td>+0.5</td><td>+0.5</td></tr>
+ * <tr><td>{@link PixelOrientation#CENTER CENTER}</td> <td>{@code 0.0}</td><td>{@code 0.0}</td></tr>
+ * <tr><td>{@link PixelOrientation#UPPER_LEFT UPPER_LEFT}</td> <td>{@code -0.5}</td><td>{@code -0.5}</td></tr>
+ * <tr><td>{@link PixelOrientation#UPPER_RIGHT UPPER_RIGHT}</td><td>{@code +0.5}</td><td>{@code -0.5}</td></tr>
+ * <tr><td>{@link PixelOrientation#LOWER_LEFT LOWER_LEFT}</td> <td>{@code -0.5}</td><td>{@code +0.5}</td></tr>
+ * <tr><td>{@link PixelOrientation#LOWER_RIGHT LOWER_RIGHT}</td><td>{@code +0.5}</td><td>{@code +0.5}</td></tr>
* </table>
*
* @param anchor the pixel orientation.
* @return the position relative to the pixel center.
- * @throws IllegalArgumentException if the specified orientation is unknown.
+ * @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
*/
public static PixelTranslation getPixelTranslation(final PixelOrientation anchor) {
final PixelTranslation offset = ORIENTATIONS.get(anchor);
@@ -239,6 +240,7 @@ public final class PixelTranslation extends Static implements Serializable {
* @param current the pixel orientation of the given {@code gridToCRS} transform.
* @param expected the pixel orientation of the desired transform.
* @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
+ * @throws IllegalArgumentException if {@code current} or {@code expected} is not a known code list value.
*/
public static MathTransform translate(final MathTransform gridToCRS, final PixelInCell current, final PixelInCell expected) {
if (gridToCRS == null || expected.equals(current)) {
@@ -292,6 +294,7 @@ public final class PixelTranslation extends Static implements Serializable {
* @param xDimension the dimension of <var>x</var> coordinates (pixel columns). Often 0.
* @param yDimension the dimension of <var>y</var> coordinates (pixel rows). Often 1.
* @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
+ * @throws IllegalArgumentException if {@code current} or {@code expected} is not a known code list value.
*/
public static MathTransform translate(final MathTransform gridToCRS,
final PixelOrientation current, final PixelOrientation expected,
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
index 01256eb..edabe79 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
@@ -97,6 +97,21 @@ public final class Resources extends IndexedResourceBundle {
* The two images have different tile grid.
*/
public static final short MismatchedTileGrid = 7;
+
+ /**
+ * Coordinate reference system is unspecified.
+ */
+ public static final short UnspecifiedCRS = 9;
+
+ /**
+ * Grid extent is unspecified.
+ */
+ public static final short UnspecifiedGridExtent = 10;
+
+ /**
+ * Coordinates transform is unspecified.
+ */
+ public static final short UnspecifiedTransform = 11;
}
/**
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
index 7ffc66e..811b045 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
@@ -27,3 +27,6 @@ IterationNotStarted = Iteration did not started.
MismatchedImageLocation = The two images have different size or pixel coordinates.
MismatchedSampleModel = The two images use different sample models.
MismatchedTileGrid = The two images have different tile grid.
+UnspecifiedCRS = Coordinate reference system is unspecified.
+UnspecifiedGridExtent = Grid extent is unspecified.
+UnspecifiedTransform = Coordinates transform is unspecified.
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
index 418351a..901bb99 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
@@ -32,3 +32,6 @@ IterationNotStarted = L\u2019it\u00e9ration n\u2019a pas commenc\u
MismatchedImageLocation = Les deux images ont une taille ou des coordonn\u00e9es pixels diff\u00e9rentes.
MismatchedSampleModel = Les deux images disposent les pixels diff\u00e9remment.
MismatchedTileGrid = Les deux images utilisent des grilles de tuiles diff\u00e9rentes.
+UnspecifiedCRS = Le syst\u00e8me de r\u00e9f\u00e9rence des coordonn\u00e9es n\u2019a pas \u00e9t\u00e9 sp\u00e9cifi\u00e9.
+UnspecifiedGridExtent = L\u2019\u00e9tendue de la grille n\u2019a pas \u00e9t\u00e9 sp\u00e9cifi\u00e9e.
+UnspecifiedTransform = La transformation de coordonn\u00e9es n\u2019a pas \u00e9t\u00e9 sp\u00e9cifi\u00e9e.
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
index 56a88da..f6c21e0 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/geometry/GeneralEnvelope.java
@@ -295,13 +295,13 @@ public class GeneralEnvelope extends ArrayEnvelope implements Cloneable, Seriali
public void setCoordinateReferenceSystem(final CoordinateReferenceSystem crs)
throws MismatchedDimensionException
{
- ensureDimensionMatches("crs", getDimension(), crs);
- /*
- * The check performed here shall be identical to ArrayEnvelope.verifyRanges(crs, ordinates)
- * except that it may verify only a subset of the ordinate array and throws a different kind
- * of exception in caseo of failure.
- */
if (crs != null) {
+ ensureDimensionMatches("crs", getDimension(), crs);
+ /*
+ * The check performed here shall be identical to ArrayEnvelope.verifyRanges(crs, ordinates)
+ * except that it may verify only a subset of the ordinate array and throws a different kind
+ * of exception in case of failure.
+ */
final int beginIndex = beginIndex();
final int endIndex = endIndex();
final int d = ordinates.length >>> 1;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 21/31: First draft of a GridCoverageResource interface.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 4dbe8c9b4c6b8bfbdc061a9574489bcf1356f965
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon Jun 4 10:30:34 2018 +0000
First draft of a GridCoverageResource interface.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832810 13f79535-47bb-0310-9956-ffa450edef68
---
storage/sis-storage/pom.xml | 5 +++
.../apache/sis/storage/GridCoverageResource.java | 40 ++++++++++++++++++++++
2 files changed, 45 insertions(+)
diff --git a/storage/sis-storage/pom.xml b/storage/sis-storage/pom.xml
index ad56b92..55ed4e7 100644
--- a/storage/sis-storage/pom.xml
+++ b/storage/sis-storage/pom.xml
@@ -126,6 +126,11 @@
<artifactId>sis-feature</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.sis.core</groupId>
+ <artifactId>sis-raster</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<!-- Test dependencies -->
<dependency>
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/GridCoverageResource.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/GridCoverageResource.java
new file mode 100644
index 0000000..903c341
--- /dev/null
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/GridCoverageResource.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.storage;
+
+import org.apache.sis.coverage.grid.GridGeometry;
+
+
+/**
+ * Access to data values in a <var>n</var>-dimensional grid.
+ * A coverage resource may be a member of {@link Aggregate} if a single file can provide many images.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public interface GridCoverageResource extends Resource {
+ /**
+ * Returns the valid extent of grid coordinates together with the transform
+ * from those grid coordinates to real world coordinates.
+ *
+ * @return grid coordinates valid extent and their mapping to "real world" coordinates.
+ * @throws DataStoreException if an error occurred while reading definitions from the underlying data store.
+ */
+ GridGeometry getGridGeometry() throws DataStoreException;
+}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 19/31: Add abbreviations for all sub-interfaces found in ISO
19115 except quality package.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit df7c8b202ab704e55f7fd32f7f18ed747e500772
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon Jun 4 10:28:04 2018 +0000
Add abbreviations for all sub-interfaces found in ISO 19115 except quality package.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832808 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/metadata/sql/TableHierarchy.java | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java
index 41374f2..f601c5d 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java
@@ -43,24 +43,34 @@ final class TableHierarchy {
* {@code "MD_VectorSpatialRepresentation"} consume a lot of space, which leave few spaces left
* for actual identifiers when we want to limit the length to a relatively small value.
*/
- private static final Map<String,String> ABBREVIATIONS = new HashMap<>(16);
+ private static final Map<String,String> ABBREVIATIONS = new HashMap<>(25);
/**
* The reverse of {@link #ABBREVIATIONS}.
*/
- private static final Map<String,String> TABLES = new HashMap<>(16);
+ private static final Map<String,String> TABLES = new HashMap<>(25);
static {
+ add("CI_Individual", "ind");
+ add("CI_Organisation", "org");
add("MD_VectorSpatialRepresentation", "vec");
add("MD_GridSpatialRepresentation", "grd");
add("MD_Georectified", "rtf");
add("MD_Georeferenceable", "cbl");
- add("MD_DataIdentification", "dat");
+ add("MD_DataIdentification", "data");
add("SV_ServiceIdentification", "srv");
add("MD_FeatureCatalogueDescription", "cat");
add("MD_CoverageDescription", "cov");
add("MD_ImageDescription", "img");
add("MD_SampleDimension", "sd");
- add("MD_Band", "bd");
+ add("MD_Band", "band");
+ add("MD_LegalConstraints", "legal");
+ add("MD_SecurityConstraints", "secu");
+ add("EX_GeographicBoundingBox", "bbox");
+ add("EX_BoundingPolygon", "poly");
+ add("EX_GeographicDescription", "gdsc");
+ add("EX_SpatialTemporalExtent", "ste");
+ add("MI_GCPCollection", "gcp");
+ // TODO: missing quality package.
}
/**
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 07/31: First draft of a port of GridGeometry class,
for grid coverage (raster) support.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 20423a32ff2c50dbd652047791d29c3df88e7e13
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Tue May 29 16:58:56 2018 +0000
First draft of a port of GridGeometry class, for grid coverage (raster) support.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832460 13f79535-47bb-0310-9956-ffa450edef68
---
core/sis-raster/pom.xml | 2 +-
.../sis/coverage/grid/GridCoordinatesView.java | 142 +++++
.../org/apache/sis/coverage/grid/GridExtent.java | 322 ++++++++++++
.../org/apache/sis/coverage/grid/GridGeometry.java | 582 +++++++++++++++++++++
.../grid/IncompleteGridGeometryException.java | 70 +++
.../apache/sis/coverage/grid/PixelTranslation.java | 358 +++++++++++++
.../raster => coverage/grid}/package-info.java | 15 +-
.../java/org/apache/sis/image/DefaultIterator.java | 4 +-
.../java/org/apache/sis/image/PixelIterator.java | 4 +-
.../java/org/apache/sis/image/TransferType.java | 4 +-
.../apache/sis/image/WritablePixelIterator.java | 4 +-
.../java/org/apache/sis/image/package-info.java | 4 +-
.../org/apache/sis/internal/raster/Resources.java | 30 +-
.../sis/internal/raster/Resources.properties | 1 +
.../sis/internal/raster/Resources_fr.properties | 1 +
.../apache/sis/internal/raster/package-info.java | 4 +-
16 files changed, 1522 insertions(+), 25 deletions(-)
diff --git a/core/sis-raster/pom.xml b/core/sis-raster/pom.xml
index be8cda6..cc6b8fa 100644
--- a/core/sis-raster/pom.xml
+++ b/core/sis-raster/pom.xml
@@ -101,7 +101,7 @@
<dependencies>
<dependency>
<groupId>org.apache.sis.core</groupId>
- <artifactId>sis-utility</artifactId>
+ <artifactId>sis-referencing</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
new file mode 100644
index 0000000..bd338a3
--- /dev/null
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import java.util.Arrays;
+import org.apache.sis.util.Debug;
+import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.resources.Errors;
+
+// Branch-dependent imports
+import org.opengis.coverage.grid.GridCoordinates;
+
+
+/**
+ * A view over the low or high grid envelope coordinates.
+ * This is not a general-purpose grid coordinates since it assumes a {@link GridExtent} coordinates layout.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+final class GridCoordinatesView implements GridCoordinates {
+ /**
+ * A reference to the coordinate array of the enclosing grid envelope.
+ */
+ private final int[] ordinates;
+
+ /**
+ * Index of the first value in the {@link #ordinates} array.
+ * This is 0 for low values, or {@link #getDimension()} for high values.
+ */
+ private final int offset;
+
+ /**
+ * Creates a new view over the low or high coordinates.
+ */
+ GridCoordinatesView(final int[] ordinates, final int offset) {
+ this.ordinates = ordinates;
+ this.offset = offset;
+ }
+
+ /**
+ * Returns the number of dimension.
+ */
+ @Override
+ public final int getDimension() {
+ return ordinates.length >>> 1;
+ }
+
+ /**
+ * Returns all coordinate values.
+ */
+ @Override
+ public final int[] getCoordinateValues() {
+ return Arrays.copyOfRange(ordinates, offset, offset + getDimension());
+ }
+
+ /**
+ * Returns the coordinate value for the specified dimension.
+ */
+ @Override
+ public final int getCoordinateValue(final int index) {
+ ArgumentChecks.ensureValidIndex(getDimension(), index);
+ return ordinates[offset + index];
+ }
+
+ /**
+ * Do not allow modification of grid coordinates since they are backed by {@link GridExtent}.
+ */
+ @Override
+ public void setCoordinateValue(final int index, int value) {
+ throw new UnsupportedOperationException(Errors.format(Errors.Keys.UnmodifiableObject_1, "GridCoordinates"));
+ }
+
+ /**
+ * Returns a string representation of this grid coordinates for debugging purpose.
+ */
+ @Debug
+ @Override
+ public final String toString() {
+ return "GridCoordinates".concat(Arrays.toString(getCoordinateValues()));
+ }
+
+ /**
+ * Returns a hash code value for this object.
+ */
+ @Override
+ public final int hashCode() {
+ int code = -3; // Arbitrary seed for differentiating from Arrays.hashCode(int[]).
+ final int end = offset + getDimension();
+ for (int i=offset; i<end; i++) {
+ code = 31 * code + ordinates[i];
+ }
+ return code;
+ }
+
+ /**
+ * Compares this grid coordinates with the specified object for equality.
+ *
+ * @param object the object to compares with this grid coordinates.
+ * @return {@code true} if the given object is equal to this grid coordinates.
+ */
+ @Override
+ public final boolean equals(final Object object) {
+ if (object == this) { // Slight optimization.
+ return true;
+ }
+ /*
+ * We do not require the exact same class because we want to accept
+ * immutable grid coordinates as equal to mutable grid coordinates.
+ */
+ if (object instanceof GridCoordinatesView) {
+ final GridCoordinatesView that = (GridCoordinatesView) object;
+ final int dimension = getDimension();
+ if (dimension == that.getDimension()) {
+ // TODO: use Arrays.equals(...) with JDK9 instead.
+ for (int i=0; i<dimension; i++) {
+ if (ordinates[offset + i] != that.ordinates[that.offset + i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
new file mode 100644
index 0000000..816a62f
--- /dev/null
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -0,0 +1,322 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import java.util.Arrays;
+import java.io.Serializable;
+import org.apache.sis.util.Debug;
+import org.apache.sis.util.ArgumentChecks;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.internal.raster.Resources;
+
+// Branch-dependent imports
+import org.opengis.coverage.grid.GridEnvelope;
+import org.opengis.coverage.grid.GridCoordinates;
+
+
+/**
+ * A range of grid coverage coordinates, also known as "grid envelope".
+ * {@code GridExtent} instances are unmodifiable,
+ * so they can be shared between different {@link GridGeometry} instances.
+ *
+ * <p><b>CAUTION:</b>
+ * ISO 19123 defines {@linkplain #getHigh high} coordinates as <strong>inclusive</strong>.
+ * We follow this specification for all getters methods, but developer should keep in mind
+ * that this is the opposite of Java2D usage where {@link java.awt.Rectangle} maximal values are exclusive.
+ * When the context is ambiguous, an explicit {@code isHighIncluded} argument is required.</p>
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public class GridExtent implements GridEnvelope, Serializable {
+ /**
+ * Serial number for inter-operability with different versions.
+ */
+ private static final long serialVersionUID = -4717353677844056017L;
+
+ /**
+ * Minimum and maximum grid ordinates. The first half contains minimum ordinates (inclusive),
+ * while the last half contains maximum ordinates (<strong>inclusive</strong>). Note that the
+ * later is the opposite of Java2D usage but conform to ISO specification.
+ */
+ private final int[] ordinates;
+
+ /**
+ * Creates a new array of coordinates with the given number of dimensions.
+ *
+ * @throws IllegalArgumentException if the given number of dimensions is excessive.
+ */
+ private static int[] allocate(final int dimension) throws IllegalArgumentException {
+ if (dimension > Integer.MAX_VALUE / 2) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
+ }
+ return new int[dimension << 1];
+ }
+
+ /**
+ * Checks if ordinate values in the low part are less than or
+ * equal to the corresponding ordinate value in the high part.
+ *
+ * @throws IllegalArgumentException if a coordinate value in the low part is
+ * greater than the corresponding coordinate value in the high part.
+ */
+ private static void checkCoherence(final int[] ordinates) throws IllegalArgumentException {
+ final int dimension = ordinates.length >>> 1;
+ for (int i=0; i<dimension; i++) {
+ final int lower = ordinates[i];
+ final int upper = ordinates[i + dimension];
+ if (lower > upper) {
+ throw new IllegalArgumentException(Resources.format(
+ Resources.Keys.IllegalGridEnvelope_3, i, lower, upper));
+ }
+ }
+ }
+
+ /**
+ * Creates an initially empty grid envelope with the given number of dimensions.
+ * All grid coordinate values are initialized to zero. This constructor is private
+ * since {@code GridExtent} coordinate values can not be modified by public API.
+ *
+ * @param dimension number of dimensions.
+ */
+ private GridExtent(final int dimension) {
+ ordinates = allocate(dimension);
+ }
+
+ /**
+ * Constructs a new grid envelope set to the specified coordinates.
+ * The given arrays contain a minimum (inclusive) and maximum value for each dimension of the grid coverage.
+ * The lowest valid grid coordinates are often zero, but this is not mandatory.
+ * As a convenience for this common case, a null {@code low} array means that all low coordinates are zero.
+ *
+ * @param low the valid minimum grid coordinate (always inclusive), or {@code null} for all zeros.
+ * @param high the valid maximum grid coordinate, inclusive or exclusive depending on the next argument.
+ * @param isHighIncluded {@code true} if the {@code high} values are inclusive (as in ISO 19123 specification),
+ * or {@code false} if they are exclusive (as in Java2D usage).
+ * This argument does not apply to {@code low} values, which are always inclusive.
+ * @throws IllegalArgumentException if a coordinate value in the low part is
+ * greater than the corresponding coordinate value in the high part.
+ *
+ * @see #getLow()
+ * @see #getHigh()
+ */
+ public GridExtent(final int[] low, final int[] high, final boolean isHighIncluded) {
+ ArgumentChecks.ensureNonNull("high", high);
+ final int dimension = high.length;
+ if (low != null && low.length != dimension) {
+ throw new IllegalArgumentException(Errors.format(Errors.Keys.MismatchedDimension_2, low.length, dimension));
+ }
+ ordinates = allocate(dimension);
+ if (low != null) {
+ System.arraycopy(low, 0, ordinates, 0, dimension);
+ }
+ System.arraycopy(high, 0, ordinates, dimension, dimension);
+ if (!isHighIncluded) {
+ for (int i=dimension; i < ordinates.length; i++) {
+ ordinates[i]--;
+ }
+ }
+ checkCoherence(ordinates);
+ }
+
+ /**
+ * Creates a new grid envelope as a copy of the given one.
+ *
+ * @param extent the grid envelope to copy.
+ * @throws IllegalArgumentException if a coordinate value in the low part is
+ * greater than the corresponding coordinate value in the high part.
+ */
+ protected GridExtent(final GridEnvelope extent) {
+ ArgumentChecks.ensureNonNull("extent", extent);
+ final int dimension = extent.getDimension();
+ ordinates = allocate(dimension);
+ for (int i=0; i<dimension; i++) {
+ ordinates[i] = extent.getLow(i);
+ ordinates[i + dimension] = extent.getHigh(i);
+ }
+ checkCoherence(ordinates);
+ }
+
+ /**
+ * Returns the given grid envelope as a {@code GridExtent} implementation.
+ * If the given extent is already a {@code GridExtent} instance or is null, then it is returned as-is.
+ * Otherwise a new extent is created using the {@linkplain #GridExtent(GridEnvelope) copy constructor}.
+ *
+ * @param extent the grid envelope to cast or copy, or {@code null}.
+ * @return the grid envelope as a {@code GridExtent}, or {@code null} if the given extent was null.
+ */
+ public static GridExtent castOrCopy(final GridEnvelope extent) {
+ if (extent == null || extent instanceof GridExtent) {
+ return (GridExtent) extent;
+ } else {
+ return new GridExtent(extent);
+ }
+ }
+
+ /**
+ * Returns the number of dimensions.
+ *
+ * @return the number of dimensions.
+ */
+ @Override
+ public final int getDimension() {
+ return ordinates.length >>> 1;
+ }
+
+ /**
+ * Returns the valid minimum grid coordinates, inclusive.
+ * The sequence contains a minimum value for each dimension of the grid coverage.
+ *
+ * @return the valid minimum grid coordinates, inclusive.
+ */
+ @Override
+ public GridCoordinates getLow() {
+ return new GridCoordinatesView(ordinates, 0);
+ }
+
+ /**
+ * Returns the valid maximum grid coordinates, <strong>inclusive</strong>.
+ * The sequence contains a maximum value for each dimension of the grid coverage.
+ *
+ * @return the valid maximum grid coordinates, <strong>inclusive</strong>.
+ */
+ @Override
+ public GridCoordinates getHigh() {
+ return new GridCoordinatesView(ordinates, getDimension());
+ }
+
+ /**
+ * Returns the valid minimum inclusive grid coordinate along the specified dimension.
+ *
+ * @param index the dimension for which to obtain the coordinate value.
+ * @return the low coordinate value at the given dimension, inclusive.
+ * @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
+ * than the {@linkplain #getDimension() grid dimension}.
+ *
+ * @see #getLow()
+ * @see #getHigh(int)
+ */
+ @Override
+ public int getLow(final int index) {
+ ArgumentChecks.ensureValidIndex(getDimension(), index);
+ return ordinates[index];
+ }
+
+ /**
+ * Returns the valid maximum <strong>inclusive</strong> grid coordinate along the specified dimension.
+ *
+ * @param index the dimension for which to obtain the coordinate value.
+ * @return the high coordinate value at the given dimension, <strong>inclusive</strong>.
+ * @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
+ * than the {@linkplain #getDimension() grid dimension}.
+ *
+ * @see #getHigh()
+ * @see #getLow(int)
+ */
+ @Override
+ public int getHigh(final int index) {
+ final int dimension = getDimension();
+ ArgumentChecks.ensureValidIndex(dimension, index);
+ return ordinates[index + dimension];
+ }
+
+ /**
+ * Returns the number of integer grid coordinates along the specified dimension.
+ * This is equal to {@code getHigh(dimension) - getLow(dimension) + 1}.
+ *
+ * @param index the dimension for which to obtain the span.
+ * @return the span at the given dimension.
+ * @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
+ * than the {@linkplain #getDimension() grid dimension}.
+ *
+ * @see #getLow(int)
+ * @see #getHigh(int)
+ */
+ @Override
+ public int getSpan(final int index) {
+ final int dimension = getDimension();
+ ArgumentChecks.ensureValidIndex(dimension, index);
+ return ordinates[dimension + index] - ordinates[index] + 1;
+ }
+
+ /**
+ * Returns a new grid envelope that encompass only some dimensions of this grid envelope.
+ * This method copies this grid envelope into a new grid envelope, beginning at dimension
+ * {@code lower} and extending to dimension {@code upper-1} inclusive. Thus the dimension
+ * of the sub grid envelope is {@code upper - lower}.
+ *
+ * @param lower the first dimension to copy, inclusive.
+ * @param upper the last dimension to copy, exclusive.
+ * @return the sub grid envelope.
+ * @throws IndexOutOfBoundsException if an index is out of bounds.
+ */
+ public GridExtent subEnvelope(final int lower, final int upper) {
+ final int dimension = getDimension();
+ ArgumentChecks.ensureValidIndexRange(dimension, lower, upper);
+ final int newDim = upper - lower;
+ if (newDim == dimension && getClass() == GridExtent.class) {
+ return this;
+ }
+ final GridExtent sub = new GridExtent(newDim);
+ System.arraycopy(ordinates, lower, sub.ordinates, 0, newDim);
+ System.arraycopy(ordinates, lower+dimension, sub.ordinates, newDim, newDim);
+ return sub;
+ }
+
+ /**
+ * Returns a hash value for this grid envelope. This value need not remain
+ * consistent between different implementations of the same class.
+ *
+ * @return a hash value for this grid envelope.
+ */
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(ordinates) ^ (int) serialVersionUID;
+ }
+
+ /**
+ * Compares the specified object with this grid envelope for equality.
+ *
+ * @param object the object to compare with this grid envelope for equality.
+ * @return {@code true} if the given object is equal to this grid envelope.
+ */
+ @Override
+ public boolean equals(final Object object) {
+ if (object instanceof GridExtent) {
+ return Arrays.equals(ordinates, ((GridExtent) object).ordinates);
+ }
+ return false;
+ }
+
+ /**
+ * Returns a string representation of this grid envelope. The returned string
+ * is implementation dependent and is provided for debugging purposes only.
+ */
+ @Debug
+ @Override
+ public String toString() {
+ final int dimension = getDimension();
+ final StringBuilder buffer = new StringBuilder("GridEnvelope").append('[');
+ for (int i=0; i<dimension; i++) {
+ if (i != 0) buffer.append(", ");
+ buffer.append(ordinates[i]).append('…').append(ordinates[i + dimension]);
+ }
+ return buffer.append(']').toString();
+ }
+}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
new file mode 100644
index 0000000..79ac7cc
--- /dev/null
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -0,0 +1,582 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import java.util.Objects;
+import java.io.Serializable;
+import java.awt.image.RenderedImage; // For javadoc only.
+import org.opengis.geometry.Envelope;
+import org.opengis.geometry.MismatchedDimensionException;
+import org.opengis.referencing.datum.PixelInCell;
+import org.opengis.referencing.operation.Matrix;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.apache.sis.math.MathFunctions;
+import org.apache.sis.geometry.Envelopes;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.geometry.ImmutableEnvelope;
+import org.apache.sis.geometry.GeneralDirectPosition;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
+import org.apache.sis.referencing.operation.transform.PassThroughTransform;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.util.Debug;
+
+// Branch-dependent imports
+import org.opengis.coverage.grid.GridEnvelope;
+
+
+/**
+ * Describes the valid extent of grid coordinates and the transform from those grid coordinates
+ * to real world coordinates. Grid geometries contains:
+ *
+ * <ul>
+ * <li>A <cite>grid envelope</cite> (a.k.a. <cite>"grid extent"</cite>),
+ * often inferred from the {@link RenderedImage} size.</li>
+ * <li>A <cite>grid to CRS</cite> {@link MathTransform},
+ * which can be inferred from the grid envelope and the georeferenced envelope.</li>
+ * <li>A georeferenced {@link Envelope}, which can be inferred from the grid envelope
+ * and the <cite>grid to CRS</cite> transform.</li>
+ * <li>An optional {@link CoordinateReferenceSystem} (CRS) specified as part of the georeferenced envelope.
+ * This CRS is the target of the <cite>grid to CRS</cite> transform.</li>
+ * </ul>
+ *
+ * All above properties except the CRS should be mandatory, but are allowed to be temporarily absent during
+ * grid coverage construction. Temporarily absent properties are allowed because they may be inferred from
+ * a wider context. For example a grid geometry know nothing about {@link RenderedImage},
+ * but {@code GridCoverage2D} does and may use that information for providing a missing grid envelope.
+ * By default, any request for an undefined property will throw an {@link IncompleteGridGeometryException}.
+ * In order to check if a property is defined, use {@link #isDefined(int)}.
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @author Alessio Fabiani (Geosolutions)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public class GridGeometry implements Serializable {
+ /**
+ * Serial number for inter-operability with different versions.
+ */
+ private static final long serialVersionUID = -954786616001606624L;
+
+ /**
+ * A bitmask to specify the validity of the Coordinate Reference System property.
+ *
+ * @see #isDefined(int)
+ * @see #getCoordinateReferenceSystem()
+ */
+ public static final int CRS = 1;
+
+ /**
+ * A bitmask to specify the validity of the geodetic envelope property.
+ *
+ * @see #isDefined(int)
+ * @see #getEnvelope()
+ */
+ public static final int ENVELOPE = 2;
+
+ /**
+ * A bitmask to specify the validity of the grid envelope property.
+ *
+ * @see #isDefined(int)
+ * @see #getExtent()
+ */
+ public static final int EXTENT = 4;
+
+ /**
+ * A bitmask to specify the validity of the <cite>"grid to CRS"</cite> transform.
+ *
+ * @see #isDefined(int)
+ * @see #getGridToCRS()
+ */
+ public static final int GRID_TO_CRS = 8;
+
+ /**
+ * The valid domain of a grid coverage, or {@code null} if unknown. The lowest valid grid coordinate is zero
+ * for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
+ * A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
+ */
+ protected final GridExtent extent;
+
+ /**
+ * The geodetic envelope, or {@code null} if unknown. If non-null, this envelope is usually the grid {@link #extent}
+ * {@linkplain #gridToCRS transformed} to real world coordinates. The Coordinate Reference System} (CRS) of this
+ * envelope defines the "real world" CRS of this grid geometry.
+ */
+ protected final ImmutableEnvelope envelope;
+
+ /**
+ * The math transform from grid indices to "real world" coordinates, or {@code null} if unknown.
+ * This math transform is usually affine. It maps {@linkplain PixelInCell#CELL_CENTER pixel center}
+ * to "real world" coordinate using the following line:
+ *
+ * {@preformat java
+ * DirectPosition aCellIndices = ...:
+ * DirectPosition aPixelCenter = gridToCRS.transform(pixels, aCellIndices);
+ * }
+ */
+ protected final MathTransform gridToCRS;
+
+ /**
+ * Same transform than {@link #gridToCRS} but from {@linkplain PixelInCell#CELL_CORNER pixel corner}
+ * instead than center. This transform is preferable to {@code gridToCRS} for transforming envelopes.
+ *
+ * @serial This field is serialized because it may be a value specified explicitly at construction time,
+ * in which case it can be more accurate than a computed value.
+ */
+ private final MathTransform cornerToCRS;
+
+ /**
+ * The resolution in units of the CRS axes.
+ * Computed only when first needed.
+ */
+ private transient double[] resolution;
+
+ /**
+ * Creates a new grid geometry with the same values than the given grid geometry.
+ * This is a copy constructor for subclasses.
+ *
+ * @param other the other grid geometry to copy.
+ */
+ protected GridGeometry(final GridGeometry other) {
+ extent = other.extent;
+ gridToCRS = other.gridToCRS;
+ cornerToCRS = other.cornerToCRS;
+ envelope = other.envelope;
+ resolution = other.resolution;
+ }
+
+ /**
+ * Creates a new grid geometry from a grid envelope and a math transform mapping pixel <em>center</em>.
+ *
+ * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
+ * @param gridToCRS the math transform which allows for the transformations from grid coordinates
+ * ({@linkplain PixelInCell#CELL_CENTER pixel center}) to real world earth coordinates.
+ * May be {@code null} if unknown.
+ * @param crs the coordinate reference system for the "real world" coordinates, or {@code null} if unknown.
+ * This CRS is given to the {@linkplain #getEnvelope() envelope}.
+ *
+ * @throws MismatchedDimensionException if the math transform and the CRS do not have consistent dimensions.
+ * @throws TransformException if the math transform can not compute the geospatial envelope from the grid envelope.
+ */
+ public GridGeometry(final GridEnvelope extent, final MathTransform gridToCRS, final CoordinateReferenceSystem crs)
+ throws TransformException
+ {
+ this(extent, PixelInCell.CELL_CENTER, gridToCRS, crs);
+ }
+
+ /**
+ * Creates a new grid geometry from a grid envelope and a math transform mapping pixel center or corner.
+ * This is the most general constructor, the one that gives the maximal control over the grid geometry
+ * to be created.
+ *
+ * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
+ * @param anchor {@link PixelInCell#CELL_CENTER} for OGC conventions or
+ * {@link PixelInCell#CELL_CORNER} for Java2D/JAI conventions.
+ * @param gridToCRS the math transform which allows for the transformations from grid coordinates
+ * to real world earth coordinates. May be {@code null} if unknown.
+ * @param crs the coordinate reference system for the "real world" coordinates, or {@code null} if unknown.
+ * This CRS is given to the {@linkplain #getEnvelope() envelope}.
+ * @throws MismatchedDimensionException if the math transform and the CRS do not have consistent dimensions.
+ * @throws TransformException if the math transform can not compute the geospatial envelope from the grid envelope.
+ */
+ public GridGeometry(final GridEnvelope extent, final PixelInCell anchor, final MathTransform gridToCRS,
+ final CoordinateReferenceSystem crs) throws TransformException
+ {
+ if (gridToCRS != null) {
+ if (extent != null) {
+ ensureDimensionMatches("extent", extent.getDimension(), gridToCRS.getSourceDimensions());
+ }
+ if (crs != null) {
+ ensureDimensionMatches("crs", crs.getCoordinateSystem().getDimension(), gridToCRS.getTargetDimensions());
+ }
+ }
+ this.extent = GridExtent.castOrCopy(extent);
+ this.gridToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CENTER);
+ this.cornerToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CORNER);
+ GeneralEnvelope env = null;
+ if (extent != null && gridToCRS != null) {
+ final int dimension = extent.getDimension();
+ env = new GeneralEnvelope(dimension);
+ for (int i=0; i<dimension; i++) {
+ env.setRange(i, extent.getLow(i), extent.getHigh(i) + 1);
+ }
+ env = Envelopes.transform(cornerToCRS, env);
+ if (crs != null) {
+ env.setCoordinateReferenceSystem(crs);
+ }
+ } else if (crs != null) {
+ env = new GeneralEnvelope(crs);
+ env.setToNaN();
+ }
+ envelope = (env != null) ? new ImmutableEnvelope(env) : null;
+ }
+
+ /**
+ * Ensures that the given dimension is equals to the expected value. If not, throws an exception.
+ *
+ * @param argument the name of the argument being tested.
+ * @param dimension the dimension of the argument value.
+ * @param expected the expected dimension.
+ */
+ private static void ensureDimensionMatches(final String argument, final int dimension, final int expected)
+ throws MismatchedDimensionException
+ {
+ if (dimension != expected) {
+ throw new MismatchedDimensionException(Errors.format(
+ Errors.Keys.MismatchedDimension_3, argument, dimension, expected));
+ }
+ }
+
+ /**
+ * Returns the number of dimensions of the <em>grid</em>. This is typically the same
+ * than the number of dimension of the envelope or the CRS, but not necessarily.
+ *
+ * @return the number of grid dimensions.
+ */
+ public int getDimension() {
+ if (gridToCRS != null) {
+ return gridToCRS.getSourceDimensions();
+ }
+ return extent.getDimension();
+ }
+
+ /**
+ * Returns the "real world" coordinate reference system.
+ *
+ * @return the coordinate reference system (never {@code null}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no CRS
+ * (i.e. <code>{@linkplain #isDefined isDefined}({@linkplain #CRS})</code> returned {@code false}).
+ */
+ public CoordinateReferenceSystem getCoordinateReferenceSystem() throws IncompleteGridGeometryException {
+ if (envelope != null) {
+ final CoordinateReferenceSystem crs = envelope.getCoordinateReferenceSystem();
+ if (crs != null) {
+ assert isDefined(CRS);
+ return crs;
+ }
+ }
+ assert !isDefined(CRS);
+ throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedCrs */);
+ }
+
+ /**
+ * Returns the bounding box of "real world" coordinates for this grid geometry. This envelope is the
+ * {@linkplain #getExtent() grid extent} {@linkplain #getGridToCRS() transformed} to the "real world"
+ * coordinate system.
+ *
+ * @return the bounding box in "real world" coordinates (never {@code null}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no envelope
+ * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #ENVELOPE})</code> returned {@code false}).
+ */
+ public Envelope getEnvelope() throws IncompleteGridGeometryException {
+ if (envelope != null && !envelope.isAllNaN()) {
+ assert isDefined(ENVELOPE);
+ return envelope;
+ }
+ assert !isDefined(ENVELOPE);
+ throw new IncompleteGridGeometryException(/* gridToCRS == null ?
+ Errors.Keys.UnspecifiedTransform : Errors.Keys.UnspecifiedGridExtent */);
+ }
+
+ /**
+ * Returns the valid coordinate range of a grid coverage. The lowest valid grid coordinate is zero
+ * for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
+ * A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
+ *
+ * @return the grid envelope (never {@code null}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no extent
+ * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #EXTENT})</code> returned {@code false}).
+ */
+ public GridEnvelope getExtent() throws IncompleteGridGeometryException {
+ if (extent != null) {
+ assert isDefined(EXTENT);
+ return extent;
+ }
+ assert !isDefined(EXTENT);
+ throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedImageSize */);
+ }
+
+ /**
+ * Returns the transform from grid coordinates to "real world" coordinates in pixel centers.
+ * The transform is often an affine transform.
+ * The coordinate reference system of the real world coordinates is given by
+ * {@link org.opengis.coverage.Coverage#getCoordinateReferenceSystem()}.
+ *
+ * <p><strong>Note:</strong> OGC 01-004 requires that the transform maps <em>pixel centers</em> to real
+ * world coordinates. This is different from some other systems that map pixel's upper left corner.</p>
+ *
+ * @return the transform (never {@code null}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no transform
+ * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}).
+ */
+ public MathTransform getGridToCRS() throws IncompleteGridGeometryException {
+ if (gridToCRS != null) {
+ assert isDefined(GRID_TO_CRS);
+ return gridToCRS;
+ }
+ assert !isDefined(GRID_TO_CRS);
+ throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedTransform */);
+ }
+
+ /**
+ * Returns the transform from grid coordinates to "real world" coordinates.
+ * This is similar to {@link #getGridToCRS()} except that the transform may map
+ * other pixel parts than {@linkplain PixelInCell#CELL_CENTER pixel center}.
+ *
+ * @param anchor the pixel part to map.
+ * @return the transform (never {@code null}).
+ * @throws IncompleteGridGeometryException if this grid geometry has no transform
+ * (i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}).
+ */
+ public MathTransform getGridToCRS(final PixelInCell anchor) throws IncompleteGridGeometryException {
+ final MathTransform mt;
+ if (PixelInCell.CELL_CENTER.equals(anchor)) {
+ mt = gridToCRS;
+ } else if (PixelInCell.CELL_CORNER.equals(anchor)) {
+ mt = cornerToCRS;
+ } else {
+ mt = PixelTranslation.translate(gridToCRS, PixelInCell.CELL_CENTER, anchor);
+ }
+ if (mt == null) {
+ throw new IncompleteGridGeometryException(/* Errors.Keys.UnspecifiedTransform */);
+ }
+ return mt;
+ }
+
+ /**
+ * Estimates the grid resolution in units of the coordinate reference system.
+ * If non-null, the length of the returned array is the number of CRS dimensions.
+ * If some resolutions are not constant factors (i.e. the {@code gridToCRS} transform for the
+ * corresponding dimension is non-linear), then the resolution is set to one of the following values:
+ *
+ * <ul>
+ * <li>{@link Double#NaN} if {@code allowEstimates} is {@code false}.</li>
+ * <li>an arbitrary resolution otherwise (currently the resolution in the grid center,
+ * but this arbitrary choice may change in any future Apache SIS version).</li>
+ * </ul>
+ *
+ * @param allowEstimates whether to provide some values even for resolutions that are not constant factors.
+ * @return the grid resolution, or {@code null} if unknown.
+ * @throws TransformException if an error occurred while computing the grid resolution.
+ */
+ public double[] resolution(final boolean allowEstimates) throws TransformException {
+ /*
+ * If the gridToCRS transform is linear, we do not even need to check the grid extent;
+ * it can be null. Otherwise (if the transform is non-linear) the extent is mandatory.
+ */
+ Matrix mat = MathTransforms.getMatrix(gridToCRS);
+ if (mat != null) {
+ return resolution(mat, 1);
+ }
+ if (extent == null || gridToCRS == null) {
+ return null;
+ }
+ /*
+ * If we reach this line, the gridToCRS transform has some non-linear parts.
+ * The easiest way to estimate a resolution is to ask for the derivative at
+ * some arbitrary point. For this method, we take the grid center.
+ */
+ final int gridDimension = extent.getDimension();
+ final GeneralDirectPosition gridCenter = new GeneralDirectPosition(gridDimension);
+ for (int i=0; i<gridDimension; i++) {
+ gridCenter.setOrdinate(i, extent.getLow(i) + 0.5*extent.getSpan(i));
+ }
+ final double[] res = resolution(gridToCRS.derivative(gridCenter), 0);
+ if (!allowEstimates) {
+ /*
+ * If we reach this line, we successfully estimated the resolutions but we need to hide non-constant values.
+ * We currently don't have an API for finding the non-linear dimensions. We assume that everthing else than
+ * LinearTransform and pass-through dimensions are non-linear. This is not always true (e.g. in a Mercator
+ * projection, the "longitude → easting" part is linear too), but should be okay for GridGeometry purposes.
+ *
+ * We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
+ * This limit us to 64 dimensions, which is assumed more than enough.
+ */
+ long nonLinearDimensions = 0;
+ for (final MathTransform step : MathTransforms.getSteps(gridToCRS)) {
+ mat = MathTransforms.getMatrix(step);
+ if (mat != null) {
+ /*
+ * For linear transforms there is no bits to set. However if some bits were set by a previous
+ * iteration, we may need to move them (for example the transform may swap axes). We take the
+ * current bitmasks as source dimensions and find what are the target dimensions for them.
+ */
+ long mask = nonLinearDimensions;
+ nonLinearDimensions = 0;
+ while (mask != 0) {
+ final int i = Long.numberOfTrailingZeros(mask); // Source dimension of non-linear part
+ for (int j = mat.getNumRow() - 1; --j >= 0;) { // Possible target dimensions
+ if (mat.getElement(j, i) != 0) {
+ if (j >= Long.SIZE) {
+ throw new ArithmeticException("Excessive number of dimensions.");
+ }
+ nonLinearDimensions |= (1 << j);
+ }
+ }
+ mask &= ~(1 << i);
+ }
+ } else if (step instanceof PassThroughTransform) {
+ /*
+ * Assume that all modified coordinates use non-linear transform. We do not inspect the
+ * sub-transform recursively because if it had a non-linear step, PassThroughTransform
+ * should have moved that step outside the sub-transform for easier concatenation with
+ * the LinearTransforms before of after that PassThroughTransform.
+ */
+ long mask = 0;
+ final int dimIncrease = step.getTargetDimensions() - step.getSourceDimensions();
+ final int maxBits = Long.SIZE - Math.max(dimIncrease, 0);
+ for (final int i : ((PassThroughTransform) step).getModifiedCoordinates()) {
+ if (i >= maxBits) {
+ throw new ArithmeticException("Excessive number of dimensions.");
+ }
+ mask |= (1 << i);
+ }
+ /*
+ * The mask we just computed identifies non-linear source dimensions, but we need target
+ * dimensions. They are usually the same (the pass-through coordinate values do not have
+ * their order changed). However we have a difficulty if the number of dimensions changes.
+ * We know that the change happen in the sub-transform, but we do not know where exactly.
+ * For example if the mask is 001010 and the number of dimensions increases by 1, we know
+ * that we still have "00" at the beginning and "0" at the end of the mask, but we don't
+ * know what happen between the two. Does "101" become "1101" or "1011"? We conservatively
+ * take "1111", i.e. we unconditionally set all bits in the middle to 1.
+ *
+ * Mathematics:
+ * (Long.highestOneBit(mask) << 1) - 1
+ * is a mask identifying all source dimensions before trailing pass-through dimensions.
+ *
+ * maskHigh = (Long.highestOneBit(mask) << (dimIncrease + 1)) - 1
+ * is a mask identifying all target dimensions before trailing pass-through dimensions.
+ *
+ * maskLow = Long.lowestOneBit(mask) - 1
+ * is a mask identifying all leading pass-through dimensions (both source and target).
+ *
+ * maskHigh & ~maskLow
+ * is a mask identifying only target dimensions after leading pass-through and before
+ * trailing pass-through dimensions. In our case, all 1 bits in maskLow are also 1 bits
+ * in maskHigh. So we can rewrite as
+ *
+ * maskHigh - maskLow
+ * and the -1 terms cancel each other.
+ */
+ if (dimIncrease != 0) {
+ mask = (Long.highestOneBit(mask) << (dimIncrease + 1)) - Long.lowestOneBit(mask);
+ }
+ nonLinearDimensions |= mask;
+ } else {
+ /*
+ * Not a know transform. Assume dimension may become non-linear.
+ */
+ return null;
+ }
+ }
+ /*
+ * Set the resolution to NaN for all dimensions that we have determined to be non-linear.
+ */
+ while (nonLinearDimensions != 0) {
+ final int i = Long.numberOfTrailingZeros(nonLinearDimensions);
+ nonLinearDimensions &= ~(1 << i);
+ res[i] = Double.NaN;
+ }
+ }
+ return res;
+ }
+
+ /**
+ * Computes the resolutions from the given matrix. This is the length of each row vector.
+ *
+ * @param numToIgnore number of rows and columns to ignore at the end of the matrix.
+ * This is 0 if the matrix is a derivative (i.e. we ignore nothing), or 1 if the matrix
+ * is an affine transform (i.e. we ignore the translation column and the [0 0 … 1] row).
+ */
+ private static double[] resolution(final Matrix gridToCRS, final int numToIgnore) {
+ final double[] resolution = new double[gridToCRS.getNumRow() - numToIgnore];
+ final double[] buffer = new double[gridToCRS.getNumCol() - numToIgnore];
+ for (int j=0; j<resolution.length; j++) {
+ for (int i=0; i<buffer.length; i++) {
+ buffer[i] = gridToCRS.getElement(j,i);
+ }
+ resolution[j] = MathFunctions.magnitude(buffer);
+ }
+ return resolution;
+ }
+
+ /**
+ * Returns {@code true} if all the parameters specified by the argument are set.
+ *
+ * @param bitmask any combination of {@link #CRS}, {@link #ENVELOPE}, {@link #EXTENT} and {@link #GRID_TO_CRS}.
+ * @return {@code true} if all specified attributes are defined (i.e. invoking the
+ * corresponding method will not thrown an {@link IncompleteGridGeometryException}).
+ * @throws IllegalArgumentException if the specified bitmask is not a combination of known masks.
+ */
+ public boolean isDefined(final int bitmask) throws IllegalArgumentException {
+ if ((bitmask & ~(CRS | ENVELOPE | EXTENT | GRID_TO_CRS)) != 0) {
+ throw new IllegalArgumentException(Errors.format(
+ Errors.Keys.IllegalArgumentValue_2, "bitmask", bitmask));
+ }
+ return ((bitmask & CRS) == 0 || (envelope != null && envelope.getCoordinateReferenceSystem() != null))
+ && ((bitmask & ENVELOPE) == 0 || (envelope != null && !envelope.isAllNaN()))
+ && ((bitmask & EXTENT) == 0 || (extent != null))
+ && ((bitmask & GRID_TO_CRS) == 0 || (gridToCRS != null));
+ }
+
+ /**
+ * Returns a hash value for this grid geometry. This value need not remain
+ * consistent between different implementations of the same class.
+ */
+ @Override
+ public int hashCode() {
+ int code = (int) serialVersionUID;
+ if (gridToCRS != null) {
+ code += gridToCRS.hashCode();
+ }
+ if (extent != null) {
+ code += extent.hashCode();
+ }
+ // We do not check the envelope since it has a determinist relationship with other attributes.
+ return code;
+ }
+
+ /**
+ * Compares the specified object with this grid geometry for equality.
+ *
+ * @param object the object to compare with.
+ * @return {@code true} if the given object is equals to this grid geometry.
+ */
+ @Override
+ public boolean equals(final Object object) {
+ if (object != null && object.getClass() == getClass()) {
+ final GridGeometry that = (GridGeometry) object;
+ return Objects.equals(this.extent, that.extent) &&
+ Objects.equals(this.gridToCRS, that.gridToCRS) &&
+ Objects.equals(this.envelope, that.envelope);
+ }
+ return false;
+ }
+
+ /**
+ * Returns a string representation of this grid geometry. The returned string
+ * is implementation dependent. It is provided for debugging purposes only.
+ */
+ @Debug
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + '[' + extent + ", " + gridToCRS + ']';
+ }
+}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/IncompleteGridGeometryException.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/IncompleteGridGeometryException.java
new file mode 100644
index 0000000..0ea406c
--- /dev/null
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/IncompleteGridGeometryException.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import org.apache.sis.internal.raster.Resources;
+
+
+/**
+ * Thrown by {@link GridGeometry} when a grid geometry can not provide the requested information.
+ * For example this exception is thrown when {@link GridGeometry#getEnvelope()} is invoked while
+ * the grid geometry has been built with a null envelope.
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public class IncompleteGridGeometryException extends IllegalStateException {
+ /**
+ * Serial number for inter-operability with different versions.
+ */
+ private static final long serialVersionUID = -7386283388753448743L;
+
+ /**
+ * Constructs an exception with no detail message.
+ */
+ public IncompleteGridGeometryException() {
+ }
+
+ /**
+ * Constructs an exception with a detail message from the specified error code.
+ * Should not be public because the SIS I18N framework is not a committed one.
+ */
+ IncompleteGridGeometryException(final short code) {
+ super(Resources.format(code));
+ }
+
+ /**
+ * Constructs an exception with the specified detail message.
+ *
+ * @param message the detail message.
+ */
+ public IncompleteGridGeometryException(final String message) {
+ super(message);
+ }
+
+ /**
+ * Constructs an exception with the specified detail message and cause.
+ *
+ * @param message the detail message.
+ * @param cause the cause for this exception.
+ */
+ public IncompleteGridGeometryException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
new file mode 100644
index 0000000..ab683b0
--- /dev/null
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -0,0 +1,358 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Objects;
+import java.io.Serializable;
+
+import org.opengis.referencing.operation.Matrix;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.datum.PixelInCell;
+import org.opengis.metadata.spatial.PixelOrientation;
+import static org.opengis.metadata.spatial.PixelOrientation.*;
+
+import org.apache.sis.util.Debug;
+import org.apache.sis.util.Static;
+import org.apache.sis.util.resources.Errors;
+import org.apache.sis.referencing.operation.matrix.Matrices;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
+
+
+/**
+ * The translation to apply for different values of {@link PixelOrientation} or {@link PixelInCell}.
+ * The translation are returned by a call to one of the following static methods:
+ *
+ * <ul>
+ * <li>{@link #getPixelTranslation(PixelOrientation)} for the two-dimensional case.</li>
+ * <li>{@link #getPixelTranslation(PixelInCell)} for the <var>n</var>-dimensional case.</li>
+ * </ul>
+ *
+ * This class provides also a few {@code translate(…)} convenience methods,
+ * which apply the pixel translation on a given {@link MathTransform} instance.
+ *
+ * <div class="note"><b>Example:</b>
+ * if the following code snippet, {@code gridToCRS} is an {@link java.awt.geom.AffineTransform} from
+ * <cite>grid cell</cite> coordinates (typically pixel coordinates) to some arbitrary CRS coordinates.
+ * In this example, the transform maps pixels {@linkplain PixelOrientation#CENTER center},
+ * while the {@linkplain PixelOrientation#UPPER_LEFT upper left} corner is desired.
+ * This code will switch the affine transform from the <cite>pixel center</cite> to
+ * <cite>upper left corner</cite> convention:
+ *
+ * {@preformat java
+ * final AffineTransform gridToCRS = ...;
+ * final PixelOrientation current = PixelOrientation.CENTER;
+ * final PixelOrientation expected = PixelOrientation.UPPER_LEFT;
+ *
+ * // Switch the transform from 'current' to 'expected' convention.
+ * final PixelTranslation source = getPixelTranslation(current);
+ * final PixelTranslation target = getPixelTranslation(expected);
+ * gridToCRS.translate(target.dx - source.dx,
+ * target.dy - source.dy);
+ * }
+ * </div>
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 1.0
+ *
+ * @see PixelInCell
+ * @see PixelOrientation
+ *
+ * @since 1.0
+ * @module
+ */
+public final class PixelTranslation extends Static implements Serializable {
+ /**
+ * For cross-version compatibility.
+ */
+ private static final long serialVersionUID = -5671620211497720808L;
+
+ /**
+ * Math transforms created by {@link #translate(MathTransform, PixelInCell, PixelInCell)}.
+ * Each element in this array will be created when first needed.
+ * Even indices are translations by -0.5 while odd indices are translations by +0.5.
+ */
+ private static final MathTransform[] translations = new MathTransform[16];
+
+ /**
+ * The pixel orientation for this translation.
+ */
+ public final PixelOrientation orientation;
+
+ /**
+ * The translation among the <var>x</var> axis relative to pixel center.
+ * The value is typically in the [-0.5 .. +0.5] range.
+ */
+ public final double dx;
+
+ /**
+ * The translation among the <var>y</var> axis relative to pixel center.
+ * The value is typically in the [-0.5 .. +0.5] range.
+ */
+ public final double dy;
+
+ /**
+ * The offset for various pixel orientations. Keys must be upper-case names.
+ */
+ private static final Map<PixelOrientation, PixelTranslation> ORIENTATIONS = new HashMap<>(12);
+ static {
+ add(CENTER, 0.0, 0.0);
+ add(UPPER_LEFT, -0.5, -0.5);
+ add(UPPER_RIGHT, 0.5, -0.5);
+ add(LOWER_LEFT, -0.5, 0.5);
+ add(LOWER_RIGHT, 0.5, 0.5);
+ }
+
+ /** For {@link #ORIENTATIONS} construction only. */
+ private static void add(final PixelOrientation orientation, final double dx, final double dy) {
+ if (ORIENTATIONS.put(orientation, new PixelTranslation(orientation, dx, dy)) != null) {
+ throw new AssertionError();
+ }
+ }
+
+ /**
+ * Creates a new pixel translation.
+ */
+ private PixelTranslation(final PixelOrientation orientation, final double dx, final double dy) {
+ this.orientation = orientation;
+ this.dx = dx;
+ this.dy = dy;
+ }
+
+ /**
+ * Returns the pixel orientation for the given {@code PixelInCell} code.
+ *
+ * @param anchor the {@code PixelInCell} code, or {@code null}.
+ * @return the corresponding pixel orientation, or {@code null} if the argument was null.
+ * @throws IllegalArgumentException if the given code is unknown.
+ */
+ public static PixelOrientation getPixelOrientation(final PixelInCell anchor) {
+ if (anchor == null) {
+ return null;
+ } else if (anchor.equals(PixelInCell.CELL_CENTER)) {
+ return CENTER;
+ } else if (anchor.equals(PixelInCell.CELL_CORNER)) {
+ return UPPER_LEFT;
+ } else {
+ throw new IllegalArgumentException(Errors.format(
+ Errors.Keys.IllegalArgumentValue_2, "anchor", anchor));
+ }
+ }
+
+ /**
+ * Returns the position relative to the pixel center.
+ * This method returns a value from the following table:
+ *
+ * <table>
+ * <caption>Translations for "pixel in cell" values</caption>
+ * <tr><th>Pixel in cell</th><th>offset</th></tr>
+ * <tr><td>{@link PixelInCell#CELL_CENTER CELL_CENTER}</td><td> 0.0</td></tr>
+ * <tr><td>{@link PixelInCell#CELL_CORNER CELL_CORNER}</td><td>-0.5</td></tr>
+ * </table>
+ *
+ * This method is typically used for <var>n</var>-dimensional grids,
+ * where the number of dimension is unknown.
+ *
+ * @param anchor the "pixel in cell" value.
+ * @return the translation for the given "pixel in cell" value.
+ */
+ public static double getPixelTranslation(final PixelInCell anchor) {
+ if (PixelInCell.CELL_CENTER.equals(anchor)) {
+ return 0;
+ } else if (PixelInCell.CELL_CORNER.equals(anchor)) {
+ return -0.5;
+ } else {
+ throw new IllegalArgumentException(Errors.format(
+ Errors.Keys.IllegalArgumentValue_2, "anchor", anchor));
+ }
+ }
+
+ /**
+ * Returns the specified position relative to the pixel center.
+ * This method returns a value from the following table:
+ *
+ * <table>
+ * <caption>Translations for "pixel orientation" values</caption>
+ * <tr><th>Pixel orientation</th> <th> x </th><th> y </th></tr>
+ * <tr><td>{@link PixelOrientation#CENTER CENTER}</td> <td> 0.0</td><td> 0.0</td></tr>
+ * <tr><td>{@link PixelOrientation#UPPER_LEFT UPPER_LEFT}</td> <td>-0.5</td><td>-0.5</td></tr>
+ * <tr><td>{@link PixelOrientation#UPPER_RIGHT UPPER_RIGHT}</td><td>+0.5</td><td>-0.5</td></tr>
+ * <tr><td>{@link PixelOrientation#LOWER_LEFT LOWER_LEFT}</td> <td>-0.5</td><td>+0.5</td></tr>
+ * <tr><td>{@link PixelOrientation#LOWER_RIGHT LOWER_RIGHT}</td><td>+0.5</td><td>+0.5</td></tr>
+ * </table>
+ *
+ * This method can be used for grid restricted to 2 dimensions.
+ *
+ * @param anchor the pixel orientation.
+ * @return the position relative to the pixel center.
+ * @throws IllegalArgumentException if the specified orientation is unknown.
+ */
+ public static PixelTranslation getPixelTranslation(final PixelOrientation anchor) {
+ final PixelTranslation offset = ORIENTATIONS.get(anchor);
+ if (offset == null) {
+ throw new IllegalArgumentException(Errors.format(
+ Errors.Keys.IllegalArgumentValue_2, "anchor", anchor));
+ }
+ return offset;
+ }
+
+ /**
+ * Returns the pixel orientation for the given offset, or {@code null} if none.
+ * This is the reverse of {@link #getPixelTranslation(PixelOrientation)}.
+ *
+ * @param dx the translation along <var>x</var> axis.
+ * @param dy the translation along <var>y</var> axis.
+ * @return the pixel orientation of the given values, or {@code null} if none.
+ */
+ public static PixelOrientation getPixelOrientation(final double dx, final double dy) {
+ for (final PixelTranslation candidate : ORIENTATIONS.values()) {
+ if (candidate.dx == dx && candidate.dy == dy) {
+ return candidate.orientation;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Translates the specified math transform according the specified pixel orientations.
+ *
+ * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS.
+ * @param current the pixel orientation of the given {@code gridToCRS} transform.
+ * @param expected the pixel orientation of the desired transform.
+ * @return the translation from {@code current} to {@code expected}.
+ */
+ public static MathTransform translate(final MathTransform gridToCRS, final PixelInCell current, final PixelInCell expected) {
+ if (Objects.equals(current, expected)) {
+ return gridToCRS;
+ }
+ if (gridToCRS == null) {
+ return null;
+ }
+ final int dimension = gridToCRS.getSourceDimensions();
+ final double offset = getPixelTranslation(expected) - getPixelTranslation(current);
+ final int index;
+ if (offset == -0.5) {
+ index = 2*dimension;
+ } else if (offset == 0.5) {
+ index = 2*dimension + 1;
+ } else {
+ index = translations.length;
+ }
+ MathTransform mt;
+ if (index >= translations.length) {
+ mt = translate(dimension, offset);
+ } else synchronized (translations) {
+ mt = translations[index];
+ if (mt == null) {
+ mt = translate(dimension, offset);
+ translations[index] = mt;
+ }
+ }
+ return MathTransforms.concatenate(mt, gridToCRS);
+ }
+
+ /**
+ * Translates the specified math transform according the specified pixel orientations.
+ *
+ * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS.
+ * @param current the pixel orientation of the given {@code gridToCRS} transform.
+ * @param expected the pixel orientation of the desired transform.
+ * @param xDimension the dimension of <var>x</var> coordinates (pixel columns). Often 0.
+ * @param yDimension the dimension of <var>y</var> coordinates (pixel rows). Often 1.
+ * @return the translation from {@code current} to {@code expected}.
+ */
+ public static MathTransform translate(final MathTransform gridToCRS,
+ final PixelOrientation current,
+ final PixelOrientation expected,
+ final int xDimension,
+ final int yDimension)
+ {
+ if (Objects.equals(current, expected)) {
+ return gridToCRS;
+ }
+ if (gridToCRS == null) {
+ return null;
+ }
+ final int dimension = gridToCRS.getSourceDimensions();
+ if (xDimension < 0 || xDimension >= dimension) {
+ throw illegalDimension("xDimension", xDimension);
+ }
+ if (yDimension < 0 || yDimension >= dimension) {
+ throw illegalDimension("yDimension", yDimension);
+ }
+ if (xDimension == yDimension) {
+ throw illegalDimension("xDimension", "yDimension");
+ }
+ final PixelTranslation source = getPixelTranslation(current);
+ final PixelTranslation target = getPixelTranslation(expected);
+ final double dx = target.dx - source.dx;
+ final double dy = target.dy - source.dy;
+ MathTransform mt;
+ if (dimension == 2 && (xDimension | yDimension) == 1 && dx == dy && Math.abs(dx) == 0.5) {
+ final int index = (dx >= 0) ? 5 : 4;
+ synchronized (translations) {
+ mt = translations[index];
+ if (mt == null) {
+ mt = translate(dimension, dx);
+ translations[index] = mt;
+ }
+ }
+ } else {
+ final Matrix matrix = Matrices.createIdentity(dimension + 1);
+ matrix.setElement(xDimension, dimension, dx);
+ matrix.setElement(yDimension, dimension, dy);
+ mt = MathTransforms.linear(matrix);
+ }
+ return MathTransforms.concatenate(mt, gridToCRS);
+ }
+
+ /**
+ * Formats an exception for an illegal dimension.
+ */
+ private static IllegalArgumentException illegalDimension(final String name, final Object dimension) {
+ return new IllegalArgumentException(Errors.format(Errors.Keys.IllegalArgumentValue_2, name, dimension));
+ }
+
+ /**
+ * Creates an affine transform that apply the same linear conversion for all dimensions.
+ * For each dimension, input values <var>x</var> are converted into output values <var>y</var>
+ * using the following equation:
+ *
+ * <blockquote><var>y</var> = <var>x</var> × {@code scale} + {@code offset}</blockquote>
+ *
+ * @param dimension the input and output dimensions.
+ * @param offset the {@code offset} term in the linear equation.
+ * @return the linear transform for the given scale and offset.
+ */
+ private static MathTransform translate(final int dimension, final double offset) {
+ final Matrix matrix = Matrices.createIdentity(dimension + 1);
+ for (int i=0; i<dimension; i++) {
+ matrix.setElement(i, dimension, offset);
+ }
+ return MathTransforms.linear(matrix);
+ }
+
+ /**
+ * Returns a string representation of this pixel translation.
+ */
+ @Debug
+ @Override
+ public String toString() {
+ return String.valueOf(orientation) + '[' + dx + ", " + dy + ']';
+ }
+}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/package-info.java
similarity index 73%
copy from core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java
copy to core/sis-raster/src/main/java/org/apache/sis/coverage/grid/package-info.java
index 8a19ee5..597ff30 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/package-info.java
@@ -15,17 +15,14 @@
* limitations under the License.
*/
+
/**
- * A set of helper classes for the SIS implementation.
- *
- * <p><strong>Do not use!</strong></p>
- *
- * This package is for internal use by SIS only. Classes in this package
- * may change in incompatible ways in any future version without notice.
+ * A coverage backed by a regular grid. In the two-dimensional case, the grid coverage is an image and the cells are pixels.
+ * In the three-dimensional case, the cells are voxels.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
-package org.apache.sis.internal.raster;
+package org.apache.sis.coverage.grid;
diff --git a/core/sis-raster/src/main/java/org/apache/sis/image/DefaultIterator.java b/core/sis-raster/src/main/java/org/apache/sis/image/DefaultIterator.java
index bef1739..cd5f58e 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/image/DefaultIterator.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/image/DefaultIterator.java
@@ -48,8 +48,8 @@ import org.apache.sis.util.ArgumentChecks;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*
* @todo Change iteration order on tiles for using Hilbert iterator.
diff --git a/core/sis-raster/src/main/java/org/apache/sis/image/PixelIterator.java b/core/sis-raster/src/main/java/org/apache/sis/image/PixelIterator.java
index 2b9fd54..c076236 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/image/PixelIterator.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/image/PixelIterator.java
@@ -53,8 +53,8 @@ import static java.lang.Math.floorDiv;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
public abstract class PixelIterator {
diff --git a/core/sis-raster/src/main/java/org/apache/sis/image/TransferType.java b/core/sis-raster/src/main/java/org/apache/sis/image/TransferType.java
index b611308..e70c1ee 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/image/TransferType.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/image/TransferType.java
@@ -42,11 +42,11 @@ import org.apache.sis.util.resources.Errors;
* <a href="http://openjdk.java.net/jeps/301">JEP 301</a> is implemented.</div>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @param <T> the type of buffer which can be used for transferring data.
*
- * @since 0.8
+ * @since 1.0
* @module
*
* @see Raster#getTransferType()
diff --git a/core/sis-raster/src/main/java/org/apache/sis/image/WritablePixelIterator.java b/core/sis-raster/src/main/java/org/apache/sis/image/WritablePixelIterator.java
index 5e8a8aa..2e71179 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/image/WritablePixelIterator.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/image/WritablePixelIterator.java
@@ -51,8 +51,8 @@ import org.apache.sis.internal.raster.Resources;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
public abstract class WritablePixelIterator extends PixelIterator implements Closeable {
diff --git a/core/sis-raster/src/main/java/org/apache/sis/image/package-info.java b/core/sis-raster/src/main/java/org/apache/sis/image/package-info.java
index fbb7f73..9150e80 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/image/package-info.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/image/package-info.java
@@ -34,8 +34,8 @@
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
package org.apache.sis.image;
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
index 7287cb1..01256eb 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.java
@@ -30,8 +30,8 @@ import org.apache.sis.util.resources.IndexedResourceBundle;
* all modules in the Apache SIS project, see {@link org.apache.sis.util.resources} package.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
public final class Resources extends IndexedResourceBundle {
@@ -42,7 +42,7 @@ public final class Resources extends IndexedResourceBundle {
* pools of compiled classes.
*
* @author Martin Desruisseaux (Geomatys)
- * @since 0.8
+ * @since 1.0
* @module
*/
@Generated("org.apache.sis.util.resources.IndexedResourceCompiler")
@@ -64,6 +64,11 @@ public final class Resources extends IndexedResourceBundle {
public static final short CoordinateOutsideDomain_2 = 1;
/**
+ * Illegal grid envelope [{1} … {2}] for dimension {0}.
+ */
+ public static final short IllegalGridEnvelope_3 = 8;
+
+ /**
* The ({0}, {1}) tile has an unexpected size, number of bands or sample layout.
*/
public static final short IncompatibleTile_2 = 2;
@@ -167,4 +172,23 @@ public final class Resources extends IndexedResourceBundle {
{
return forLocale(null).getString(key, arg0, arg1);
}
+
+ /**
+ * Gets a string for the given key are replace all occurrence of "{0}",
+ * "{1}", with values of {@code arg0}, {@code arg1}, etc.
+ *
+ * @param key the key for the desired string.
+ * @param arg0 value to substitute to "{0}".
+ * @param arg1 value to substitute to "{1}".
+ * @param arg2 value to substitute to "{2}".
+ * @return the formatted string for the given key.
+ * @throws MissingResourceException if no object for the given key can be found.
+ */
+ public static String format(final short key,
+ final Object arg0,
+ final Object arg1,
+ final Object arg2) throws MissingResourceException
+ {
+ return forLocale(null).getString(key, arg0, arg1, arg2);
+ }
}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
index 510912e..7ffc66e 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources.properties
@@ -20,6 +20,7 @@
# For resources shared by all modules in the Apache SIS project, see "org.apache.sis.util.resources" package.
#
CoordinateOutsideDomain_2 = The ({0}, {1}) pixel coordinate is outside iterator domain.
+IllegalGridEnvelope_3 = Illegal grid envelope [{1} \u2026 {2}] for dimension {0}.
IncompatibleTile_2 = The ({0}, {1}) tile has an unexpected size, number of bands or sample layout.
IterationIsFinished = Iteration is finished.
IterationNotStarted = Iteration did not started.
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
index 9ac7916..418351a 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/Resources_fr.properties
@@ -25,6 +25,7 @@
# U+00A0 NO-BREAK SPACE before :
#
CoordinateOutsideDomain_2 = La coordonn\u00e9e pixel ({0}, {1}) est en dehors du domaine de l\u2019it\u00e9rateur.
+IllegalGridEnvelope_3 = La plage d\u2019index [{1} \u2026 {2}] de la dimension {0} n\u2019est pas valide.
IncompatibleTile_2 = La tuile ({0}, {1}) a une taille, un nombre de bandes ou une disposition des valeurs inattendu.
IterationIsFinished = L\u2019it\u00e9ration est termin\u00e9e.
IterationNotStarted = L\u2019it\u00e9ration n\u2019a pas commenc\u00e9e.
diff --git a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java
index 8a19ee5..29a4094 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/internal/raster/package-info.java
@@ -24,8 +24,8 @@
* may change in incompatible ways in any future version without notice.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
package org.apache.sis.internal.raster;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 17/31: SQL metadaat: fix an "ID column not found" error on
PostgreSQL, more compact identifiers, and replace CRS WKT by EPSG codes.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 95fcdc9e273e2a53d7d76ff3800abba53573b406
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat Jun 2 17:50:14 2018 +0000
SQL metadaat: fix an "ID column not found" error on PostgreSQL, more compact identifiers, and replace CRS WKT by EPSG codes.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832743 13f79535-47bb-0310-9956-ffa450edef68
---
.../sis/internal/metadata/ReferencingServices.java | 16 ++-
.../sis/internal/metadata/sql/SQLBuilder.java | 16 ++-
.../org/apache/sis/metadata/PropertyAccessor.java | 6 +-
.../apache/sis/metadata/iso/DefaultMetadata.java | 16 ++-
.../sis/metadata/iso/citation/Citations.java | 2 +-
.../apache/sis/metadata/sql/MetadataSource.java | 42 ++------
.../apache/sis/metadata/sql/MetadataWriter.java | 57 +++++++----
.../apache/sis/metadata/sql/TableHierarchy.java | 108 +++++++++++++++++++++
.../internal/referencing/ServicesForMetadata.java | 32 +++++-
.../apache/sis/referencing/IdentifiedObjects.java | 34 ++++---
.../sis/referencing/datum/BursaWolfParameters.java | 2 +-
.../operation/CoordinateOperationRegistry.java | 6 +-
.../java/org/apache/sis/util/CharSequences.java | 2 +-
13 files changed, 251 insertions(+), 88 deletions(-)
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ReferencingServices.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ReferencingServices.java
index 40b5ec7..aed3092 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ReferencingServices.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/ReferencingServices.java
@@ -67,7 +67,7 @@ import org.apache.sis.util.Deprecable;
* <cite>"referencing by coordinates"</cite> but needed by metadata.</p>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
@@ -286,6 +286,20 @@ public class ReferencingServices extends OptionalDependency {
throw moduleNotFound();
}
+ /**
+ * Returns an identifier for the given object, giving precedence to EPSG identifier if available.
+ * The returned string should be of the form {@code "AUTHORITY:CODE"} if possible (no guarantees).
+ *
+ * @param object the object for which to get an identifier.
+ * @return an identifier for the given object, with preference given to EPSG codes.
+ * @throws FactoryException if an error occurred while searching for the EPSG code.
+ *
+ * @since 1.0
+ */
+ public String getPreferredIdentifier(final IdentifiedObject object) throws FactoryException {
+ throw moduleNotFound();
+ }
+
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java
index 788129c..56661c5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/internal/metadata/sql/SQLBuilder.java
@@ -19,6 +19,9 @@ package org.apache.sis.internal.metadata.sql;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.StringTokenizer;
+import org.opengis.util.FactoryException;
+import org.opengis.referencing.IdentifiedObject;
+import org.apache.sis.internal.metadata.ReferencingServices;
/**
@@ -26,7 +29,7 @@ import java.util.StringTokenizer;
* This class is for internal purpose only and may change or be removed in any future SIS version.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
@@ -181,8 +184,9 @@ public class SQLBuilder {
*
* @param value the value to append, or {@code null}.
* @return this builder, for method call chaining.
+ * @throws FactoryException if an error occurred while using the geodetic database.
*/
- public final SQLBuilder appendCondition(final Object value) {
+ public final SQLBuilder appendCondition(final Object value) throws FactoryException {
if (value == null) {
buffer.append(" IS NULL");
return this;
@@ -196,8 +200,9 @@ public class SQLBuilder {
*
* @param value the value to append, or {@code null}.
* @return this builder, for method call chaining.
+ * @throws FactoryException if an error occurred while using the geodetic database.
*/
- public final SQLBuilder appendValue(final Object value) {
+ public final SQLBuilder appendValue(Object value) throws FactoryException {
if (value == null) {
buffer.append("NULL");
} else if (value instanceof Boolean) {
@@ -205,6 +210,9 @@ public class SQLBuilder {
} else if (value instanceof Number) {
buffer.append(value);
} else {
+ if (value instanceof IdentifiedObject) {
+ value = ReferencingServices.getInstance().getPreferredIdentifier((IdentifiedObject) value);
+ }
buffer.append('\'').append(doubleQuotes(value)).append('\'');
}
return this;
@@ -297,7 +305,7 @@ public class SQLBuilder {
final String name = buffer.append(table).append('_').append(column).append("_fkey").toString();
return clear().append("ALTER TABLE ").appendIdentifier(schema, table).append(" ADD CONSTRAINT ")
.appendIdentifier(name).append(" FOREIGN KEY(").appendIdentifier(column).append(") REFERENCES ")
- .appendIdentifier(schema, target).append(" (").append(primaryKey)
+ .appendIdentifier(schema, target).append(" (").appendIdentifier(primaryKey)
.append(") ON UPDATE ").append(cascade ? "CASCADE" : "RESTRICT")
.append(" ON DELETE RESTRICT").toString();
}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
index 4c4c4cb..859311c 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
@@ -354,6 +354,10 @@ class PropertyAccessor {
Class<?> elementType = getter.getReturnType();
if (Collection.class.isAssignableFrom(elementType)) {
elementType = Classes.boundOfParameterizedProperty(getter);
+ if (elementType == null) {
+ // Subclass has erased parameterized type. Use method declared in the interface.
+ elementType = Classes.boundOfParameterizedProperty(getters[i]);
+ }
}
elementTypes[i] = Numbers.primitiveToWrapper(elementType);
}
@@ -1238,7 +1242,7 @@ class PropertyAccessor {
}
Object copy = copier.copies.get(metadata);
if (copy == null) {
- copy = implementation.newInstance();
+ copy = implementation.getConstructor().newInstance();
copier.copies.put(metadata, copy); // Need to be first in case of cyclic graphs.
final Object[] arguments = new Object[1];
for (int i=0; i<allCount; i++) {
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
index 4f0399b..8720ff6 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/DefaultMetadata.java
@@ -70,6 +70,7 @@ import org.apache.sis.internal.jaxb.lan.LocaleAdapter;
import org.apache.sis.internal.jaxb.LegacyNamespaces;
import org.apache.sis.internal.jaxb.FilterByVersion;
import org.apache.sis.internal.jaxb.Context;
+import org.apache.sis.internal.jaxb.NonMarshalledAuthority;
import org.apache.sis.internal.jaxb.metadata.CI_Citation;
import org.apache.sis.internal.jaxb.metadata.MD_Identifier;
@@ -191,11 +192,6 @@ public class DefaultMetadata extends ISOMetadata implements Metadata {
private static final long serialVersionUID = -4935599812744534502L;
/**
- * Unique identifier for this metadata record, or {@code null} if none.
- */
- private Identifier metadataIdentifier;
-
- /**
* Language(s) used for documenting metadata.
*/
private Collection<Locale> languages;
@@ -347,7 +343,7 @@ public class DefaultMetadata extends ISOMetadata implements Metadata {
public DefaultMetadata(final Metadata object) {
super(object);
if (object != null) {
- metadataIdentifier = object.getMetadataIdentifier();
+ identifiers = singleton(object.getMetadataIdentifier(), Identifier.class);
parentMetadata = object.getParentMetadata();
languages = copyCollection(object.getLanguages(), Locale.class);
characterSets = copyCollection(object.getCharacterSets(), Charset.class);
@@ -423,7 +419,7 @@ public class DefaultMetadata extends ISOMetadata implements Metadata {
@XmlElement(name = "metadataIdentifier")
@XmlJavaTypeAdapter(MD_Identifier.Since2014.class)
public Identifier getMetadataIdentifier() {
- return metadataIdentifier;
+ return NonMarshalledAuthority.getMarshallable(identifiers);
}
/**
@@ -435,7 +431,8 @@ public class DefaultMetadata extends ISOMetadata implements Metadata {
*/
public void setMetadataIdentifier(final Identifier newValue) {
checkWritePermission();
- metadataIdentifier = newValue;
+ identifiers = nonNullCollection(identifiers, Identifier.class);
+ NonMarshalledAuthority.setMarshallable(identifiers, newValue);
}
/**
@@ -467,7 +464,8 @@ public class DefaultMetadata extends ISOMetadata implements Metadata {
*/
@Deprecated
public void setFileIdentifier(final String newValue) {
- DefaultIdentifier identifier = DefaultIdentifier.castOrCopy(metadataIdentifier); // See "Note about deprecated methods implementation"
+ // See "Note about deprecated methods implementation"
+ DefaultIdentifier identifier = DefaultIdentifier.castOrCopy(NonMarshalledAuthority.getMarshallable(identifiers));
if (identifier == null) {
if (newValue == null) return;
identifier = new DefaultIdentifier();
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
index a890a6e..6eee404 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/citation/Citations.java
@@ -684,7 +684,7 @@ public final class Citations extends Static {
* or {@code null} if the given citation is null or does not have any Unicode identifier or title.
*
* @see org.apache.sis.metadata.iso.ImmutableIdentifier
- * @see org.apache.sis.referencing.IdentifiedObjects#getUnicodeIdentifier(IdentifiedObject)
+ * @see org.apache.sis.referencing.IdentifiedObjects#getSimpleNameOrIdentifier(IdentifiedObject)
* @see org.apache.sis.util.CharSequences#isUnicodeIdentifier(CharSequence)
*
* @since 0.6
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataSource.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataSource.java
index e606ec1..e268e80 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataSource.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataSource.java
@@ -47,6 +47,7 @@ import java.sql.PreparedStatement;
import org.opengis.annotation.UML;
import org.opengis.util.CodeList;
import org.opengis.util.ControlledVocabulary;
+import org.opengis.util.FactoryException;
import org.apache.sis.metadata.MetadataStandard;
import org.apache.sis.metadata.KeyNamePolicy;
import org.apache.sis.metadata.ValueExistencePolicy;
@@ -125,16 +126,6 @@ public class MetadataSource implements AutoCloseable {
static final String ID_COLUMN = "ID";
/**
- * Delimiter characters for the table name in identifier. Table names are prefixed to identifiers only if
- * the type represented by the table is a subtype. For example since {@code CI_Organisation} is a subtype
- * of {@code CI_Party}, identifiers for organizations need to be prefixed by {@code {CI_Organisation}} in
- * order allow {@code MetadataSource} to know in which table to search for such party.
- *
- * @see MetadataWriter#isReservedChar(int)
- */
- static final char TYPE_OPEN = '{', TYPE_CLOSE = '}';
-
- /**
* The timeout before to close a prepared statement, in nanoseconds. This is set to 2 seconds,
* which is a bit short but should be okay if the {@link DataSource} creates pooled connections.
* In case there is no connection pool, then the mechanism defined in this package will hopefully
@@ -672,6 +663,8 @@ public class MetadataSource implements AutoCloseable {
identifier = search(table, null, asMap, stmt, helper());
} catch (SQLException e) {
throw new MetadataStoreException(e.getLocalizedMessage(), Exceptions.unwrap(e));
+ } catch (FactoryException e) {
+ throw new MetadataStoreException(e.getLocalizedMessage(), e);
}
}
}
@@ -692,7 +685,7 @@ public class MetadataSource implements AutoCloseable {
* @throws SQLException if an error occurred while searching in the database.
*/
final String search(final String table, Set<String> columns, final Map<String,Object> metadata,
- final Statement stmt, final SQLBuilder helper) throws SQLException
+ final Statement stmt, final SQLBuilder helper) throws SQLException, FactoryException
{
assert Thread.holdsLock(this);
helper.clear();
@@ -743,7 +736,7 @@ public class MetadataSource implements AutoCloseable {
* Builds the SQL statement with the resolved value.
*/
if (helper.isEmpty()) {
- helper.append("SELECT ").append(ID_COLUMN).append(" FROM ")
+ helper.append("SELECT ").appendIdentifier(ID_COLUMN).append(" FROM ")
.appendIdentifier(schema, table).append(" WHERE ");
} else {
helper.append(" AND ");
@@ -811,25 +804,6 @@ public class MetadataSource implements AutoCloseable {
}
/**
- * If the given identifier specifies a subtype of the given type, then returns that subtype.
- * For example if the given type is {@code Party.class} and the given identifier is
- * {@code "{CI_Organisation}EPSG"}, then this method returns {@code Organisation.class}.
- * Otherwise this method returns {@code type} unchanged.
- */
- private static Class<?> subType(Class<?> type, final String identifier) {
- if (identifier.charAt(0) == TYPE_OPEN) {
- final int i = identifier.indexOf(TYPE_CLOSE);
- if (i >= 0) {
- final Class<?> subType = Types.forStandardName(identifier.substring(1, i));
- if (subType != null && type.isAssignableFrom(subType)) {
- type = subType;
- }
- }
- }
- return type;
- }
-
- /**
* Returns an implementation of the specified metadata interface filled with the data referenced
* by the specified identifier. Alternatively, this method can also return a {@link CodeList} or
* {@link Enum} element.
@@ -871,7 +845,7 @@ public class MetadataSource implements AutoCloseable {
*/
if (value == null) {
Method method = null;
- final Class<?> subType = subType(type, identifier);
+ final Class<?> subType = TableHierarchy.subType(type, identifier);
final Dispatcher toSearch = new Dispatcher(identifier, this);
try {
value = subType.getConstructor().newInstance();
@@ -927,7 +901,7 @@ public class MetadataSource implements AutoCloseable {
* If the identifier is prefixed with a table name as in "{CI_Organisation}identifier",
* the name between bracket is a subtype of the given 'type' argument.
*/
- final Class<?> type = subType(info.getMetadataType(), toSearch.identifier);
+ final Class<?> type = TableHierarchy.subType(info.getMetadataType(), toSearch.identifier);
final Class<?> returnType = method.getReturnType();
final boolean wantCollection = Collection.class.isAssignableFrom(returnType);
final Class<?> elementType = wantCollection ? Classes.boundOfParameterizedProperty(method) : returnType;
@@ -951,7 +925,7 @@ public class MetadataSource implements AutoCloseable {
final SQLBuilder helper = helper();
final String query = helper.clear().append("SELECT * FROM ")
.appendIdentifier(schema, tableName).append(" WHERE ")
- .append(ID_COLUMN).append("=?").toString();
+ .appendIdentifier(ID_COLUMN).append("=?").toString();
result = new CachedStatement(type, connection().prepareStatement(query), listeners);
}
value = result.getValue(toSearch.identifier, columnName);
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
index f7efec5..f205d0f 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/MetadataWriter.java
@@ -22,6 +22,8 @@ import java.util.Iterator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.IdentityHashMap;
+import java.util.Collection;
+import java.util.Collections;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.sql.Statement;
@@ -33,6 +35,7 @@ import java.lang.reflect.Modifier;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
+import org.opengis.util.FactoryException;
import org.apache.sis.util.Exceptions;
import org.apache.sis.util.ArgumentChecks;
@@ -48,6 +51,7 @@ import org.apache.sis.metadata.ValueExistencePolicy;
import org.apache.sis.metadata.TitleProperty;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.internal.metadata.sql.SQLBuilder;
+import org.apache.sis.xml.IdentifiedObject;
// Branch-dependent imports
import org.opengis.util.ControlledVocabulary;
@@ -106,7 +110,7 @@ import org.opengis.util.ControlledVocabulary;
* </table>
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.8
* @module
*/
@@ -214,6 +218,8 @@ public class MetadataWriter extends MetadataSource {
* little bit simpler, keep only the root cause provided that the exception type is compatible.
*/
throw new MetadataStoreException(e.getLocalizedMessage(), Exceptions.unwrap(e));
+ } catch (FactoryException e) {
+ throw new MetadataStoreException(e.getLocalizedMessage(), e);
}
return identifier;
}
@@ -233,7 +239,7 @@ public class MetadataWriter extends MetadataSource {
* of the expected package.
*/
private String add(final Statement stmt, final Object metadata, final Map<Object,String> done,
- final String parent) throws ClassCastException, SQLException
+ final String parent) throws ClassCastException, SQLException, FactoryException
{
final SQLBuilder helper = helper();
/*
@@ -306,9 +312,9 @@ public class MetadataWriter extends MetadataSource {
}
}
/*
- * Determine the column data type. We infer that type from the method return value, not from the
- * actual value for in the given metadata object, since the value type for the same property may
- * be different in future calls to this method.
+ * Determine the column data type. We infer that type from the method return value, not from
+ * actual value of given metadata object, since the value type for the same property may be
+ * different in future calls to this method.
*/
int maxLength = maximumValueLength;
Class<?> rt = colTypes.get(column);
@@ -364,7 +370,7 @@ public class MetadataWriter extends MetadataSource {
*/
final int minimalIdentifierLength;
if (isChildTable) {
- identifier = TYPE_OPEN + table + TYPE_CLOSE + identifier;
+ identifier = TableHierarchy.encode(table, identifier);
minimalIdentifierLength = table.length() + 2;
} else {
minimalIdentifierLength = 0;
@@ -507,7 +513,7 @@ public class MetadataWriter extends MetadataSource {
/*
* Create the SQL statement which will insert the data.
*/
- helper.clear().append("INSERT INTO ").appendIdentifier(schema(), table).append(" (").append(ID_COLUMN);
+ helper.clear().append("INSERT INTO ").appendIdentifier(schema(), table).append(" (").appendIdentifier(ID_COLUMN);
for (final String column : asSingletons.keySet()) {
helper.append(", ").appendIdentifier(column);
}
@@ -601,7 +607,7 @@ public class MetadataWriter extends MetadataSource {
* not inherited, then we have to repeat the primary key creation in every child tables.
*/
helper.append("(CONSTRAINT ").appendIdentifier(table + "_pkey")
- .append(" PRIMARY KEY (").append(ID_COLUMN).append(")) ");
+ .append(" PRIMARY KEY (").appendIdentifier(ID_COLUMN).append(")) ");
}
inherits = new StringBuilder(helper.append(" INHERITS (").toString());
} else {
@@ -633,7 +639,7 @@ public class MetadataWriter extends MetadataSource {
*/
private String createTable(final String table, final String primaryKey) throws SQLException {
return helper().clear().append("CREATE TABLE ").appendIdentifier(schema(), table)
- .append(" (").append(primaryKey).append(" VARCHAR(").append(maximumIdentifierLength)
+ .append(" (").appendIdentifier(primaryKey).append(" VARCHAR(").append(maximumIdentifierLength)
.append(") NOT NULL PRIMARY KEY)").toString();
}
@@ -644,7 +650,7 @@ public class MetadataWriter extends MetadataSource {
* the native SQL {@code ENUM} type for making easier to add new values when a standard
* is updated.
*/
- private String addCode(final Statement stmt, final ControlledVocabulary code) throws SQLException {
+ private String addCode(final Statement stmt, final ControlledVocabulary code) throws SQLException, FactoryException {
assert Thread.holdsLock(this);
final String table = getTableName(code.getClass());
final Set<String> columns = getExistingColumns(table);
@@ -653,16 +659,16 @@ public class MetadataWriter extends MetadataSource {
columns.add(CODE_COLUMN);
}
final String identifier = Types.getCodeName(code);
- final String query = helper().clear().append("SELECT ").append(CODE_COLUMN)
+ final String query = helper().clear().append("SELECT ").appendIdentifier(CODE_COLUMN)
.append(" FROM ").appendIdentifier(schema(), table).append(" WHERE ")
- .append(CODE_COLUMN).appendCondition(identifier).toString();
+ .appendIdentifier(CODE_COLUMN).appendCondition(identifier).toString();
final boolean exists;
try (ResultSet rs = stmt.executeQuery(query)) {
exists = rs.next();
}
if (!exists) {
final String sql = helper().clear().append("INSERT INTO ").appendIdentifier(schema(), table)
- .append(" (").append(CODE_COLUMN).append(") VALUES (").appendValue(identifier)
+ .append(" (").appendIdentifier(CODE_COLUMN).append(") VALUES (").appendValue(identifier)
.append(')').toString();
if (stmt.executeUpdate(sql) != 1) {
throw new SQLException(Errors.format(Errors.Keys.DatabaseUpdateFailure_3, 0, table, identifier));
@@ -674,8 +680,8 @@ public class MetadataWriter extends MetadataSource {
/**
* Suggests an identifier (primary key) to be used for the given metadata. This method is invoked automatically
* when a new metadata is about to be inserted in the database. The default implementation uses heuristic rules
- * of a few "well known" metadata like {@link Identifier} and {@link Citation}. Subclasses can override this method
- * for implementing their own heuristic.
+ * for a few "well known" metadata like {@link Identifier} and {@link Citation}. Subclasses can override this
+ * method for implementing their own heuristic.
*
* <p>This method does not need to care about key collision.
* The caller will adds some suffix if this is necessary for differentiating otherwise identical identifiers.</p>
@@ -688,11 +694,22 @@ public class MetadataWriter extends MetadataSource {
*/
protected String suggestIdentifier(final Object metadata, final Map<String,Object> asValueMap) throws SQLException {
String identifier = null;
+ final Collection<? extends Identifier> identifiers;
if (metadata instanceof Identifier) {
- identifier = nonEmpty(((Identifier) metadata).getCode());
- final String cs = nonEmpty(((Identifier) metadata).getCodeSpace());
- if (cs != null) {
- identifier = (identifier != null) ? (cs + DefaultNameSpace.DEFAULT_SEPARATOR + identifier) : cs;
+ identifiers = Collections.singleton((Identifier) metadata);
+ } else if (metadata instanceof IdentifiedObject) {
+ identifiers = ((IdentifiedObject) metadata).getIdentifiers();
+ } else {
+ identifiers = Collections.emptySet();
+ }
+ for (final Identifier id : identifiers) {
+ identifier = nonEmpty(id.getCode());
+ if (identifier != null) {
+ final String cs = nonEmpty(id.getCodeSpace());
+ if (cs != null) {
+ identifier = cs + DefaultNameSpace.DEFAULT_SEPARATOR + identifier;
+ }
+ break;
}
}
if (identifier == null && metadata instanceof Citation) {
@@ -769,7 +786,7 @@ public class MetadataWriter extends MetadataSource {
* Returns {@code true} if the given code point is a reserved character.
*/
private static boolean isReservedChar(final int c) {
- return (c == TYPE_OPEN) || (c == TYPE_CLOSE);
+ return (c == TableHierarchy.TYPE_OPEN) || (c == TableHierarchy.TYPE_CLOSE);
}
/**
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java
new file mode 100644
index 0000000..41374f2
--- /dev/null
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/sql/TableHierarchy.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.metadata.sql;
+
+import java.util.Map;
+import java.util.HashMap;
+import org.apache.sis.util.iso.Types;
+
+
+/**
+ * Utility methods for handling the inheritance between tables.
+ * This features is partially supported in PostgreSQL database.
+ *
+ * @author desruisseaux
+ */
+final class TableHierarchy {
+ /**
+ * Delimiter characters for the table name in identifier. Table names are prefixed to identifiers only if
+ * the type represented by the table is a subtype. For example since {@code CI_Organisation} is a subtype
+ * of {@code CI_Party}, identifiers for organizations need to be prefixed by {@code {CI_Organisation}} in
+ * order allow {@code MetadataSource} to know in which table to search for such party.
+ *
+ * @see MetadataWriter#isReservedChar(int)
+ */
+ static final char TYPE_OPEN = '{', TYPE_CLOSE = '}';
+
+ /**
+ * Abbreviations for commonly-used tables. We use those abbreviations because table names like
+ * {@code "MD_VectorSpatialRepresentation"} consume a lot of space, which leave few spaces left
+ * for actual identifiers when we want to limit the length to a relatively small value.
+ */
+ private static final Map<String,String> ABBREVIATIONS = new HashMap<>(16);
+
+ /**
+ * The reverse of {@link #ABBREVIATIONS}.
+ */
+ private static final Map<String,String> TABLES = new HashMap<>(16);
+ static {
+ add("MD_VectorSpatialRepresentation", "vec");
+ add("MD_GridSpatialRepresentation", "grd");
+ add("MD_Georectified", "rtf");
+ add("MD_Georeferenceable", "cbl");
+ add("MD_DataIdentification", "dat");
+ add("SV_ServiceIdentification", "srv");
+ add("MD_FeatureCatalogueDescription", "cat");
+ add("MD_CoverageDescription", "cov");
+ add("MD_ImageDescription", "img");
+ add("MD_SampleDimension", "sd");
+ add("MD_Band", "bd");
+ }
+
+ /**
+ * Adds an abbreviation. For class initialization only.
+ */
+ private static void add(final String table, final String abbreviation) {
+ ABBREVIATIONS.put(table, abbreviation);
+ TABLES.put(abbreviation, table);
+ }
+
+ /**
+ * Do not allow instantiation of this class.
+ */
+ private TableHierarchy() {
+ }
+
+ /**
+ * Encode table name in the given identifier.
+ */
+ static String encode(String table, final String identifier) {
+ table = ABBREVIATIONS.getOrDefault(table, table);
+ return TYPE_OPEN + table + TYPE_CLOSE + identifier;
+ }
+
+ /**
+ * If the given identifier specifies a subtype of the given type, then returns that subtype.
+ * For example if the given type is {@code Party.class} and the given identifier is
+ * {@code "{CI_Organisation}EPSG"}, then this method returns {@code Organisation.class}.
+ * Otherwise this method returns {@code type} unchanged.
+ */
+ static Class<?> subType(Class<?> type, final String identifier) {
+ if (identifier.charAt(0) == TYPE_OPEN) {
+ final int i = identifier.indexOf(TYPE_CLOSE);
+ if (i >= 0) {
+ String table = identifier.substring(1, i);
+ table = TABLES.getOrDefault(table, table);
+ final Class<?> subType = Types.forStandardName(table);
+ if (subType != null && type.isAssignableFrom(subType)) {
+ type = subType;
+ }
+ }
+ }
+ return type;
+ }
+}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
index 2fb197f..9a2000d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/ServicesForMetadata.java
@@ -53,6 +53,7 @@ import org.opengis.referencing.operation.OperationMethod;
import org.opengis.referencing.operation.SingleOperation;
import org.opengis.referencing.operation.CoordinateOperation;
import org.opengis.referencing.operation.CoordinateOperationFactory;
+import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.citation.OnLineFunction;
import org.opengis.metadata.citation.OnlineResource;
@@ -97,13 +98,14 @@ import org.apache.sis.util.resources.Vocabulary;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.Exceptions;
import org.apache.sis.util.Utilities;
+import org.apache.sis.util.iso.DefaultNameSpace;
/**
* Implements the referencing services needed by the {@code "sis-metadata"} module.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.5
* @module
*/
@@ -411,6 +413,34 @@ public final class ServicesForMetadata extends ReferencingServices {
return new DirectPosition2D(CommonCRS.defaultGeographic(), λ, φ);
}
+ /**
+ * Returns an identifier for the given object, giving precedence to EPSG identifier if available.
+ * The returned string should be of the form {@code "AUTHORITY:CODE"} if possible (no guarantees).
+ *
+ * @param object the object for which to get an identifier.
+ * @return an identifier for the given object, with preference given to EPSG codes.
+ * @throws FactoryException if an error occurred while searching for the EPSG code.
+ *
+ * @since 1.0
+ */
+ @Override
+ public String getPreferredIdentifier(final IdentifiedObject object) throws FactoryException {
+ final Integer code = IdentifiedObjects.lookupEPSG(object);
+ if (code != null) {
+ return Constants.EPSG + DefaultNameSpace.DEFAULT_SEPARATOR + code;
+ }
+ /*
+ * If above code did not found an EPSG code, discard EPSG codes that
+ * we may find in the loop below because they are probably invalid.
+ */
+ for (final Identifier id : object.getIdentifiers()) {
+ if (!Constants.EPSG.equalsIgnoreCase(id.getCodeSpace())) {
+ return IdentifiedObjects.toString(id);
+ }
+ }
+ return IdentifiedObjects.getSimpleNameOrIdentifier(object);
+ }
+
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
index 0f0eec6..24f2e27 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/IdentifiedObjects.java
@@ -57,7 +57,7 @@ import static org.apache.sis.internal.util.Citations.identifierMatches;
*
* @author Martin Desruisseaux (IRD, Geomatys)
* @author Guilhem Legal (Geomatys)
- * @version 0.8
+ * @version 1.0
*
* @see CRS
* @see org.apache.sis.geometry.Envelopes
@@ -283,7 +283,7 @@ public final class IdentifiedObjects extends Static {
final Iterator<? extends Identifier> it = iterator(object.getIdentifiers());
if (it != null) while (it.hasNext()) {
final Identifier identifier = it.next();
- if (identifier != null) { // Paranoiac check.
+ if (identifier != null) { // Paranoiac check.
if (authority == null || identifierMatches(authority, identifier.getAuthority())) {
return identifier;
}
@@ -319,12 +319,12 @@ public final class IdentifiedObjects extends Static {
final Iterator<? extends Identifier> it = iterator(object.getIdentifiers());
if (it != null) while (it.hasNext()) {
final String code = toString(it.next());
- if (code != null) { // Paranoiac check.
+ if (code != null) { // Paranoiac check.
return code;
}
}
final String name = toString(object.getName());
- if (name != null) { // Paranoiac check.
+ if (name != null) { // Paranoiac check.
return name;
}
}
@@ -332,8 +332,8 @@ public final class IdentifiedObjects extends Static {
}
/**
- * Returns the first name, alias or identifier which is a
- * {@linkplain CharSequences#isUnicodeIdentifier(CharSequence) valid Unicode identifier}.
+ * Returns the first name, alias or identifier which is a valid Unicode identifier. This method considers a
+ * name or identifier as valid if {@link CharSequences#isUnicodeIdentifier(CharSequence)} returns {@code true}.
* This method performs the search in the following order:
*
* <ul>
@@ -346,13 +346,15 @@ public final class IdentifiedObjects extends Static {
* @return the first name, alias or identifier which is a valid Unicode identifier, or {@code null} if none.
*
* @see org.apache.sis.metadata.iso.ImmutableIdentifier
- * @see org.apache.sis.metadata.iso.citation.Citations#getUnicodeIdentifier(Citation)
- * @see org.apache.sis.util.CharSequences#isUnicodeIdentifier(CharSequence)
+ * @see Citations#getUnicodeIdentifier(Citation)
+ * @see CharSequences#isUnicodeIdentifier(CharSequence)
+ *
+ * @since 1.0
*/
- public static String getUnicodeIdentifier(final IdentifiedObject object) {
+ public static String getSimpleNameOrIdentifier(final IdentifiedObject object) {
if (object != null) {
Identifier identifier = object.getName();
- if (identifier != null) { // Paranoiac check.
+ if (identifier != null) { // Paranoiac check.
final String code = identifier.getCode();
if (CharSequences.isUnicodeIdentifier(code)) {
return code;
@@ -371,7 +373,7 @@ public final class IdentifiedObjects extends Static {
final Iterator<? extends Identifier> id = iterator(object.getIdentifiers());
if (id != null) while (id.hasNext()) {
identifier = id.next();
- if (identifier != null) { // Paranoiac check.
+ if (identifier != null) { // Paranoiac check.
final String code = identifier.getCode();
if (CharSequences.isUnicodeIdentifier(code)) {
return code;
@@ -383,6 +385,14 @@ public final class IdentifiedObjects extends Static {
}
/**
+ * @deprecated Renamed {@link #getSimpleNameOrIdentifier(IdentifiedObject)}.
+ */
+ @Deprecated
+ public static String getUnicodeIdentifier(final IdentifiedObject object) {
+ return getSimpleNameOrIdentifier(object);
+ }
+
+ /**
* Looks up a URN, such as {@code "urn:ogc:def:crs:EPSG:9.1:4326"}, of the specified object.
* This method searches in all {@linkplain org.apache.sis.referencing.factory.GeodeticAuthorityFactory geodetic
* authority factories} known to SIS for an object {@linkplain org.apache.sis.util.ComparisonMode#APPROXIMATIVE
@@ -764,7 +774,7 @@ public final class IdentifiedObjects extends Static {
final String code = identifier.getCode();
String cs = identifier.getCodeSpace();
if (cs == null || cs.isEmpty()) {
- cs = org.apache.sis.internal.util.Citations.getIdentifier(identifier.getAuthority(), true);
+ cs = Citations.getUnicodeIdentifier(identifier.getAuthority());
}
if (cs != null) {
return cs + DefaultNameSpace.DEFAULT_SEPARATOR + code;
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
index 8dad6f7..21ec81a 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/datum/BursaWolfParameters.java
@@ -698,7 +698,7 @@ public class BursaWolfParameters extends FormattableObject implements Cloneable,
return WKTKeywords.ToWGS84;
}
formatter.setInvalidWKT(BursaWolfParameters.class, null);
- String name = IdentifiedObjects.getUnicodeIdentifier(getTargetDatum());
+ String name = IdentifiedObjects.getSimpleNameOrIdentifier(getTargetDatum());
if (name == null) {
name = "Unknown";
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
index 67278e5..dedb2eb 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/CoordinateOperationRegistry.java
@@ -59,6 +59,7 @@ import org.apache.sis.referencing.factory.MissingFactoryResourceException;
import org.apache.sis.referencing.factory.InvalidGeodeticParameterException;
import org.apache.sis.referencing.factory.NoSuchAuthorityFactoryException;
import org.apache.sis.metadata.iso.extent.Extents;
+import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.internal.referencing.CoordinateOperations;
import org.apache.sis.internal.referencing.DeferredCoordinateOperation;
import org.apache.sis.internal.referencing.PositionalAccuracyConstant;
@@ -68,7 +69,6 @@ import org.apache.sis.internal.referencing.Resources;
import org.apache.sis.internal.metadata.ReferencingServices;
import org.apache.sis.internal.system.Semaphores;
import org.apache.sis.internal.system.Loggers;
-import org.apache.sis.internal.util.Citations;
import org.apache.sis.util.ArgumentChecks;
import org.apache.sis.util.ComparisonMode;
import org.apache.sis.util.Utilities;
@@ -148,7 +148,7 @@ class CoordinateOperationRegistry {
* Creates an identifier in the Apache SIS namespace for the given vocabulary key.
*/
private static Identifier createIdentifier(final short key) {
- return new NamedIdentifier(org.apache.sis.metadata.iso.citation.Citations.SIS, Vocabulary.formatInternational(key));
+ return new NamedIdentifier(Citations.SIS, Vocabulary.formatInternational(key));
}
/**
@@ -227,7 +227,7 @@ class CoordinateOperationRegistry {
if (registry instanceof GeodeticAuthorityFactory) {
codeFinder = ((GeodeticAuthorityFactory) registry).newIdentifiedObjectFinder();
} else try {
- codeFinder = IdentifiedObjects.newFinder(Citations.getIdentifier(registry.getAuthority(), false));
+ codeFinder = IdentifiedObjects.newFinder(Citations.getIdentifier(registry.getAuthority()));
} catch (NoSuchAuthorityFactoryException e) {
Logging.recoverableException(Logging.getLogger(Loggers.COORDINATE_OPERATION),
CoordinateOperationRegistry.class, "<init>", e);
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java b/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
index ea9a334..7090f34 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/CharSequences.java
@@ -1538,7 +1538,7 @@ cmp: while (ia < lga) {
*
* @see org.apache.sis.metadata.iso.ImmutableIdentifier
* @see org.apache.sis.metadata.iso.citation.Citations#getUnicodeIdentifier(Citation)
- * @see org.apache.sis.referencing.IdentifiedObjects#getUnicodeIdentifier(IdentifiedObject)
+ * @see org.apache.sis.referencing.IdentifiedObjects#getSimpleNameOrIdentifier(IdentifiedObject)
*/
public static boolean isUnicodeIdentifier(final CharSequence identifier) {
final int length = length(identifier);
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 25/31: Fix error messages for illegal grid geometries.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 5963796c896f47ecd8d4c4733299203dda83ed9c
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed Jun 6 17:27:02 2018 +0000
Fix error messages for illegal grid geometries.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833061 13f79535-47bb-0310-9956-ffa450edef68
---
.../main/java/org/apache/sis/coverage/grid/GridGeometry.java | 12 ++++++------
.../org/apache/sis/storage/geotiff/GridGeometryBuilder.java | 11 +++++++++--
.../org/apache/sis/storage/geotiff/ImageFileDirectory.java | 2 +-
3 files changed, 16 insertions(+), 9 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 30dc210..de064a0 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -234,10 +234,10 @@ public class GridGeometry implements Serializable {
{
if (gridToCRS != null) {
if (extent != null) {
- ensureDimensionMatches("extent", extent.getDimension(), gridToCRS.getSourceDimensions());
+ ensureDimensionMatches("extent", gridToCRS.getSourceDimensions(), extent.getDimension());
}
if (crs != null) {
- ensureDimensionMatches("crs", crs.getCoordinateSystem().getDimension(), gridToCRS.getTargetDimensions());
+ ensureDimensionMatches("crs", gridToCRS.getTargetDimensions(), crs.getCoordinateSystem().getDimension());
}
} else if (crs == null) {
ArgumentChecks.ensureNonNull("extent", extent);
@@ -275,15 +275,15 @@ public class GridGeometry implements Serializable {
* Ensures that the given dimension is equals to the expected value. If not, throws an exception.
*
* @param argument the name of the argument being tested.
- * @param dimension the dimension of the argument value.
- * @param expected the expected dimension.
+ * @param expected the expected number of dimension.
+ * @param dimension the actual dimension of the argument value.
*/
- private static void ensureDimensionMatches(final String argument, final int dimension, final int expected)
+ private static void ensureDimensionMatches(final String argument, final int expected, final int dimension)
throws MismatchedDimensionException
{
if (dimension != expected) {
throw new MismatchedDimensionException(Errors.format(
- Errors.Keys.MismatchedDimension_3, argument, dimension, expected));
+ Errors.Keys.MismatchedDimension_3, argument, expected, dimension));
}
}
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
index 5badf79..498424d 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
@@ -292,7 +292,7 @@ final class GridGeometryBuilder {
reader.owner.warning(reader.resources().getString(key, reader.owner.getDisplayName()), e);
} catch (IllegalArgumentException | NoSuchElementException | ClassCastException e) {
if (!helper.alreadyReported) {
- reader.owner.warning(null, e);
+ canNotCreate(e);
}
}
}
@@ -308,7 +308,7 @@ final class GridGeometryBuilder {
gridGeometry = new GridGeometry(extent, pixelIsPoint ? PixelInCell.CELL_CENTER : PixelInCell.CELL_CORNER, gridToCRS, crs);
} catch (TransformException e) {
gridGeometry = new GridGeometry(extent, crs);
- reader.owner.warning(null, e);
+ canNotCreate(e);
/*
* Note: we catch TransformExceptions because they may be caused by erroneous data in the GeoTIFF file,
* but let FactoryExceptions propagate because they are more likely to be a SIS configuration problem.
@@ -365,4 +365,11 @@ final class GridGeometryBuilder {
}
metadata.setPointInPixel(po);
}
+
+ /**
+ * Logs a warning telling that we can not create a grid geometry for the given reason.
+ */
+ private void canNotCreate(final Exception e) {
+ reader.owner.warning(reader.resources().getString(Resources.Keys.CanNotComputeGridGeometry_1, reader.input.filename), e);
+ }
}
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index c3366b8..2fc880a 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -1221,7 +1221,7 @@ final class ImageFileDirectory extends AbstractResource implements GridCoverageR
if (gridGeometry == null) try {
gridGeometry = referencing.build(extent());
} catch (FactoryException e) {
- throw new DataStoreContentException(reader.resources().getString(Resources.Keys.CanNotComputeGridGeometry_1, filename(), e));
+ throw new DataStoreContentException(reader.resources().getString(Resources.Keys.CanNotComputeGridGeometry_1, filename()), e);
}
return gridGeometry;
} else {
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 29/31: Call to Field.setAccessible(true) need to take in
account security constrained environment. Call to
ModifiableMetadata.freeze() share instances when possible.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 28c0a1864be5520df24c0ca614b9117b5a692ceb
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Fri Jun 8 22:25:17 2018 +0000
Call to Field.setAccessible(true) need to take in account security constrained environment.
Call to ModifiableMetadata.freeze() share instances when possible.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833216 13f79535-47bb-0310-9956-ffa450edef68
---
.../main/java/org/apache/sis/metadata/Freezer.java | 65 ++++++++-
.../org/apache/sis/metadata/MetadataStandard.java | 16 ++-
.../apache/sis/metadata/ModifiableMetadata.java | 8 +-
.../org/apache/sis/metadata/PropertyAccessor.java | 14 +-
.../sis/metadata/StandardImplementation.java | 2 +-
.../org/apache/sis/metadata/iso/ISOMetadata.java | 7 +-
.../java/org/apache/sis/metadata/package-info.java | 2 +-
.../referencing/PositionalAccuracyConstant.java | 1 -
.../org/apache/sis/parameter/TensorParameters.java | 9 +-
.../java/org/apache/sis/internal/util/Cloner.java | 1 +
.../apache/sis/internal/util/FinalFieldSetter.java | 157 +++++++++++++++++++++
.../org/apache/sis/internal/util/Utilities.java | 2 +-
.../java/org/apache/sis/measure/RangeFormat.java | 20 +--
.../java/org/apache/sis/measure/UnitFormat.java | 21 ++-
.../apache/sis/util/CorruptedObjectException.java | 13 +-
.../main/java/org/apache/sis/util/Exceptions.java | 4 +
16 files changed, 277 insertions(+), 65 deletions(-)
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/Freezer.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/Freezer.java
index 7d46361..02de4a5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/Freezer.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/Freezer.java
@@ -21,6 +21,7 @@ import java.util.Set;
import java.util.EnumSet;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import org.apache.sis.internal.util.Cloner;
import org.apache.sis.util.collection.CodeListSet;
@@ -35,15 +36,67 @@ import org.apache.sis.metadata.iso.identification.DefaultRepresentativeFraction;
* tries to avoid creating new clones as much as possible.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
final class Freezer extends Cloner {
/**
+ * The {@code Freezer} instance in current use. The clean way would have been to pass the {@code Freezer}
+ * instance in argument to all {@code freeze()} and {@code unmodifiable()} methods in metadata packages.
+ * But above-cited methods are public, and we do not want to expose {@code Freezer} in public API for now.
+ * This thread-local is a workaround for that situation.
+ */
+ private static final ThreadLocal<Freezer> CURRENT = ThreadLocal.withInitial(Freezer::new);
+
+ /**
+ * All objects made immutable during iteration over children properties.
+ * Keys and values are the same instances. This is used for sharing unique instances when possible.
+ */
+ private final Map<Object,Object> existings;
+
+ /**
+ * Usage count, for determining when to clean {@link #CURRENT}.
+ */
+ private int useCount;
+
+ /**
* Creates a new {@code Freezer} instance.
*/
- Freezer() {
+ private Freezer() {
+ existings = new HashMap<>(32);
+ }
+
+ /**
+ * Returns the freezer in current use, or a new one if none.
+ * Callers <strong>must</strong> invoke {@link #release()} in a {@code finally} block.
+ */
+ static Freezer acquire() {
+ final Freezer freezer = CURRENT.get();
+ freezer.useCount++;
+ return freezer;
+ }
+
+ /**
+ * Release this freezer after usage.
+ */
+ final void release() {
+ if (--useCount == 0) {
+ CURRENT.remove();
+ }
+ }
+
+ /**
+ * Returns a unique instance of the given object (metadata or value).
+ */
+ private Object unique(final Object object) {
+ if (object != null) {
+ final Object c = existings.putIfAbsent(object, object);
+ if (c != null) {
+ return c;
+ }
+ }
+ return object;
}
/**
@@ -89,12 +142,12 @@ final class Freezer extends Cloner {
* its own algorithm for creating an unmodifiable view of metadata.
*/
if (object instanceof ModifiableMetadata) {
- return ((ModifiableMetadata) object).unmodifiable();
+ return unique(((ModifiableMetadata) object).unmodifiable());
}
if (object instanceof DefaultRepresentativeFraction) {
final DefaultRepresentativeFraction c = ((DefaultRepresentativeFraction) object).clone();
c.freeze();
- return c;
+ return unique(c);
}
/*
* CASE 2 - The object is a collection. All elements are replaced by their
@@ -156,11 +209,11 @@ final class Freezer extends Cloner {
* CASE 4 - The object is presumed cloneable.
*/
if (object instanceof Cloneable) {
- return super.clone(object);
+ return unique(super.clone(object));
}
/*
* CASE 5 - Any other case. The object is assumed immutable and returned unchanged.
*/
- return object;
+ return unique(object);
}
}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
index 1e2af45..21173ab 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/MetadataStandard.java
@@ -26,7 +26,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectInputStream;
-import java.lang.reflect.Field;
+import java.io.InvalidClassException;
+import java.security.AccessController;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.citation.Citation;
import org.opengis.metadata.ExtendedElementInformation;
@@ -38,6 +39,7 @@ import org.apache.sis.internal.system.Modules;
import org.apache.sis.internal.system.Semaphores;
import org.apache.sis.internal.system.SystemListener;
import org.apache.sis.internal.simple.SimpleCitation;
+import org.apache.sis.internal.util.FinalFieldSetter;
import static org.apache.sis.util.ArgumentChecks.ensureNonNull;
import static org.apache.sis.util.ArgumentChecks.ensureNonNullElement;
@@ -1058,13 +1060,13 @@ public class MetadataStandard implements Serializable {
* Assigns a {@link ConcurrentMap} instance to the given field.
* Used on deserialization only.
*/
- final void setMapForField(final Class<?> classe, final String name) {
+ static <T extends MetadataStandard> void setMapForField(final Class<T> classe, final T instance, final String name)
+ throws InvalidClassException
+ {
try {
- final Field field = classe.getDeclaredField(name);
- field.setAccessible(true);
- field.set(this, new ConcurrentHashMap<>());
+ AccessController.doPrivileged(new FinalFieldSetter<>(classe, name)).set(instance, new ConcurrentHashMap<>());
} catch (ReflectiveOperationException e) {
- throw new AssertionError(e); // Should never happen (tested by MetadataStandardTest).
+ throw FinalFieldSetter.readFailure(e);
}
}
@@ -1077,6 +1079,6 @@ public class MetadataStandard implements Serializable {
*/
private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
- setMapForField(MetadataStandard.class, "accessors");
+ setMapForField(MetadataStandard.class, this, "accessors");
}
}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/ModifiableMetadata.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/ModifiableMetadata.java
index 712e82f..4bd36d5 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/ModifiableMetadata.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/ModifiableMetadata.java
@@ -28,13 +28,11 @@ import java.lang.reflect.Modifier;
import java.nio.charset.Charset;
import javax.xml.bind.annotation.XmlTransient;
import org.opengis.util.CodeList;
-import org.apache.sis.util.logging.Logging;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.collection.CodeListSet;
import org.apache.sis.internal.util.CheckedHashSet;
import org.apache.sis.internal.util.CheckedArrayList;
import org.apache.sis.internal.system.Semaphores;
-import org.apache.sis.internal.system.Modules;
import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
@@ -82,7 +80,7 @@ import static org.apache.sis.util.collection.Containers.isNullOrEmpty;
* (typically after its construction is completed) by the call to the {@link #freeze()} method.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
@@ -187,10 +185,8 @@ public abstract class ModifiableMetadata extends AbstractMetadata implements Clo
/*
* The metadata is not cloneable for some reason left to the user
* (for example it may be backed by some external database).
- * Assumes that the metadata is unmodifiable.
*/
- Logging.unexpectedException(Logging.getLogger(Modules.METADATA), getClass(), "unmodifiable", exception);
- return this;
+ throw new UnsupportedOperationException(exception);
}
candidate.freeze();
/*
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
index 859311c..1f5ae01 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/PropertyAccessor.java
@@ -79,7 +79,7 @@ import static org.apache.sis.util.collection.Containers.hashMapCapacity;
* {@link ModifiableMetadata} instances.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
@@ -1180,14 +1180,18 @@ class PropertyAccessor {
/**
* Replaces every properties in the specified metadata by their
* {@linkplain ModifiableMetadata#unmodifiable() unmodifiable variant}.
+ * This method also replaces duplicated elements by single instances.
*
* @throws BackingStoreException if the implementation threw a checked exception.
*/
final void freeze(final Object metadata) throws BackingStoreException {
assert implementation.isInstance(metadata) : metadata;
- if (setters != null) try {
- final Object[] arguments = new Object[1];
- final Freezer freezer = new Freezer();
+ if (setters == null) {
+ return;
+ }
+ final Object[] arguments = new Object[1];
+ final Freezer freezer = Freezer.acquire();
+ try {
for (int i=0; i<allCount; i++) {
final Method setter = setters[i];
if (setter != null) {
@@ -1223,6 +1227,8 @@ class PropertyAccessor {
}
} catch (CloneNotSupportedException e) {
throw new UnsupportedOperationException(e);
+ } finally {
+ freezer.release();
}
}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
index 89959d3..18db579 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/StandardImplementation.java
@@ -179,7 +179,7 @@ final class StandardImplementation extends MetadataStandard {
* newer version of the Apache SIS library. The newer version could contains constants
* not yet declared in this older SIS version, so we have to use this instance.
*/
- setMapForField(StandardImplementation.class, "implementations");
+ setMapForField(StandardImplementation.class, this, "implementations");
return this;
}
}
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
index 39902ba..cbcea74 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/iso/ISOMetadata.java
@@ -170,12 +170,7 @@ public class ISOMetadata extends ModifiableMetadata implements IdentifiedObject,
// --------------------------------------------------------------------------------------
/**
- * Declares this metadata and all its properties as unmodifiable. Any attempt to modify a property
- * after this method call will throw an {@link org.apache.sis.metadata.UnmodifiableMetadataException}.
- * If this metadata is already unmodifiable, then this method does nothing.
- *
- * <p>Subclasses usually do not need to override this method since the default implementation
- * performs most of its work using Java reflection.</p>
+ * {@inheritDoc}
*/
@Override
public void freeze() {
diff --git a/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java b/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
index 12f5f47..8b301fc 100644
--- a/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
+++ b/core/sis-metadata/src/main/java/org/apache/sis/metadata/package-info.java
@@ -119,7 +119,7 @@
*
* @author Martin Desruisseaux (IRD, Geomatys)
* @author Adrian Custer (Geomatys)
- * @version 0.8
+ * @version 1.0
* @since 0.3
* @module
*/
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
index d5d471a..b5e5375 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/internal/referencing/PositionalAccuracyConstant.java
@@ -105,7 +105,6 @@ public final class PositionalAccuracyConstant extends DefaultAbsoluteExternalPos
/**
* Creates an positional accuracy initialized to the given result.
*/
- @SuppressWarnings("OverridableMethodCallDuringObjectConstruction") // Safe because this class is final.
private PositionalAccuracyConstant(final InternationalString measureDescription,
final InternationalString evaluationMethodDescription, final boolean pass)
{
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
index 96d5de8..c2e186d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/parameter/TensorParameters.java
@@ -25,7 +25,7 @@ import java.util.Objects;
import java.io.IOException;
import java.io.Serializable;
import java.io.ObjectInputStream;
-import java.lang.reflect.Field;
+import java.security.AccessController;
import org.opengis.parameter.ParameterValue;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.parameter.ParameterDescriptor;
@@ -41,6 +41,7 @@ import org.apache.sis.referencing.IdentifiedObjects;
import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.internal.referencing.provider.Affine;
import org.apache.sis.internal.referencing.Resources;
+import org.apache.sis.internal.util.FinalFieldSetter;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.metadata.iso.citation.Citations;
import org.apache.sis.measure.NumberRange;
@@ -837,11 +838,9 @@ public class TensorParameters<E> implements Serializable {
private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
try {
- final Field field = TensorParameters.class.getDeclaredField("parameters");
- field.setAccessible(true);
- field.set(this, createCache());
+ AccessController.doPrivileged(new FinalFieldSetter<>(TensorParameters.class, "parameters")).set(this, createCache());
} catch (ReflectiveOperationException e) {
- throw new AssertionError(e);
+ throw FinalFieldSetter.readFailure(e);
}
}
}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java
index 1f11eb2..795c381 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Cloner.java
@@ -99,6 +99,7 @@ public class Cloner {
* in order to report it in case of failure.
*/
if (!Modifier.isPublic(method.getDeclaringClass().getModifiers())) try {
+ // TODO: use trySetAccessible() with JDK9.
method.setAccessible(true);
} catch (SecurityException e) {
security = e;
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java
new file mode 100644
index 0000000..929767a
--- /dev/null
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/FinalFieldSetter.java
@@ -0,0 +1,157 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.internal.util;
+
+import java.lang.reflect.Field;
+import java.io.InvalidClassException;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import org.apache.sis.internal.system.Modules;
+
+
+/**
+ * Convenience methods for setting the final field of an object with privileged permissions.
+ * This class shall be used only after deserialization or cloning of Apache SIS objects.
+ * The usage pattern is:
+ *
+ * <p><b>On deserialization:</b></p>
+ * {@preformat java
+ * private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ * in.defaultReadObject();
+ * Object someValue = ...;
+ * try {
+ * AccessController.doPrivileged(new FinalFieldSetter<>(MyClass.class, "myField")).set(this, someValue);
+ * } catch (ReflectiveOperationException e) {
+ * throw FinalFieldSetter.readFailure(e);
+ * }
+ * }
+ * }
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ *
+ * @param <T> the type of object in which to set a final field. Should be Apache SIS classes only.
+ *
+ * @since 1.0
+ * @module
+ */
+public final class FinalFieldSetter<T> implements PrivilegedAction<FinalFieldSetter<T>> {
+ /**
+ * The field to make accessible in a privileged context.
+ */
+ private final Field field;
+
+ /**
+ * A second field to make accessible, or {@code null} if none.
+ */
+ private Field second;
+
+ /**
+ * Creates a new setter for a final field.
+ *
+ * <div class="note"><b>API note:</b>
+ * this constructor is executed in a non-privileged context because {@link SecurityException} may happen here
+ * only if the given class was loaded with a different class loader than this {@code FinalFieldSetter} class.
+ * If such situation happen, then the given class is probably not an Apache SIS one.</div>
+ *
+ * @param classe the Apache SIS class of object for which to set a final field.
+ * @param field the name of the final field for which to set a value.
+ * @throws NoSuchFieldException if the given field has not been found.
+ * @throws SecurityException may happen if the given class has been loaded with an unexpected class loader.
+ */
+ public FinalFieldSetter(final Class<T> classe, final String field) throws NoSuchFieldException {
+ assert classe.getName().startsWith(Modules.CLASSNAME_PREFIX) : classe;
+ this.field = classe.getDeclaredField(field);
+ }
+
+ /**
+ * Creates a new setter for two final fields.
+ *
+ * @param classe the Apache SIS class of object for which to set a final field.
+ * @param field the name of the first final field for which to set a value.
+ * @param second the name of the second final field for which to set a value.
+ * @throws NoSuchFieldException if the given field has not been found.
+ * @throws SecurityException may happen if the given class has been loaded with an unexpected class loader.
+ */
+ public FinalFieldSetter(final Class<T> classe, final String field, final String second) throws NoSuchFieldException {
+ this(classe, field);
+ this.second = classe.getDeclaredField(second);
+ }
+
+ /**
+ * Makes the final fields accessible.
+ * This is a callback for {@link AccessController#doPrivileged(PrivilegedAction)}.
+ * That call must be done from the caller, not from this {@code FinalFieldSetter} class,
+ * because {@link AccessController} check the caller for determining the permissions.
+ *
+ * @return {@code this}.
+ * @throws SecurityException if write permission has been denied.
+ */
+ @Override
+ public FinalFieldSetter<T> run() throws SecurityException {
+ field.setAccessible(true);
+ if (second != null) {
+ second.setAccessible(true);
+ }
+ return this;
+ }
+
+ /**
+ * Sets the value of the final field.
+ *
+ * @param instance the instance on which to set the value.
+ * @param value the value to set.
+ * @throws IllegalAccessException may happen if {@link #run()} has not been invoked before this method.
+ */
+ public final void set(final T instance, final Object value) throws IllegalAccessException {
+ field.set(instance, value);
+ }
+
+ /**
+ * Sets the values of the final fields.
+ *
+ * @param instance the instance on which to set the value.
+ * @param value the value of the first field to set.
+ * @param more the value of the second field to set.
+ * @throws IllegalAccessException may happen if {@link #run()} has not been invoked before this method.
+ */
+ public final void set(final T instance, final Object value, final Object more) throws IllegalAccessException {
+ field .set(instance, value);
+ second.set(instance, more);
+ }
+
+ /**
+ * Creates an exception for a {@code readObject(ObjectInputStream)} method.
+ *
+ * @param cause the failure.
+ * @return the exception to throw.
+ */
+ public static InvalidClassException readFailure(final ReflectiveOperationException cause) {
+ return (InvalidClassException) new InvalidClassException(cause.getLocalizedMessage()).initCause(cause);
+ }
+
+ /**
+ * Creates an exception for a {@code clone()} method.
+ *
+ * @param cause the failure.
+ * @return the exception to throw.
+ */
+ public static RuntimeException cloneFailure(final ReflectiveOperationException cause) {
+ return new RuntimeException(cause);
+ // TODO: use InaccessibleObjectException in JDK9.
+ }
+}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
index 73740cc..84e7b8b 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Utilities.java
@@ -207,7 +207,7 @@ public final class Utilities extends Static {
n = Character.charCount(value.codePointAt(i));
}
}
- // Double check since length() is faster than codePointCount(...).
+ // Double check since length() is faster than codePointCount(…).
if (width > length && (width -= value.codePointCount(0, length)) > 0) {
format = "%s%s";
args = new Object[] {value, value};
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java b/core/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
index f4c14d9..302fd4c 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/RangeFormat.java
@@ -31,11 +31,13 @@ import java.text.AttributedCharacterIterator;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.ParsePosition;
+import java.security.AccessController;
import javax.measure.Unit;
import org.apache.sis.util.Numbers;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.UnconvertibleObjectException;
import org.apache.sis.internal.util.LocalizedParseException;
+import org.apache.sis.internal.util.FinalFieldSetter;
/**
@@ -1030,23 +1032,11 @@ public class RangeFormat extends Format {
public RangeFormat clone() {
final RangeFormat f = (RangeFormat) super.clone();
try {
- f.setFinal("elementFormat", elementFormat);
- f.setFinal("unitFormat", unitFormat);
+ AccessController.doPrivileged(new FinalFieldSetter<>(RangeFormat.class, "elementFormat", "unitFormat"))
+ .set(f, elementFormat.clone(), unitFormat.clone());
} catch (ReflectiveOperationException e) {
- throw new AssertionError(e);
+ throw FinalFieldSetter.cloneFailure(e);
}
return f;
}
-
- /**
- * Sets final field to a clone of the given format.
- */
- private void setFinal(final String name, Format value) throws ReflectiveOperationException {
- if (value != null) {
- value = (Format) value.clone();
- java.lang.reflect.Field f = RangeFormat.class.getDeclaredField(name);
- f.setAccessible(true);
- f.set(this, value);
- }
- }
}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
index 15e0ec3..5b640e4 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/measure/UnitFormat.java
@@ -29,12 +29,14 @@ import java.text.ParseException;
import java.util.ResourceBundle;
import java.util.MissingResourceException;
import java.io.IOException;
+import java.security.AccessController;
import javax.measure.Dimension;
import javax.measure.Unit;
import javax.measure.format.ParserException;
import org.apache.sis.internal.util.Citations;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.internal.util.DefinitionURI;
+import org.apache.sis.internal.util.FinalFieldSetter;
import org.apache.sis.internal.util.XPaths;
import org.apache.sis.math.Fraction;
import org.apache.sis.util.ArgumentChecks;
@@ -1376,26 +1378,23 @@ search: while ((i = CharSequences.skipTrailingWhitespaces(symbols, start, i)
public UnitFormat clone() {
final UnitFormat f = (UnitFormat) super.clone();
try {
- f.setFinal("unitToLabel", unitToLabel);
- f.setFinal("labelToUnit", labelToUnit);
+ AccessController.doPrivileged(new FinalFieldSetter<>(UnitFormat.class, "unitToLabel", "labelToUnit"))
+ .set(f, clone(unitToLabel), clone(labelToUnit));
} catch (ReflectiveOperationException e) {
- throw new AssertionError(e);
+ throw FinalFieldSetter.cloneFailure(e);
}
return f;
}
/**
- * Sets final field to a clone of the given map. The given map shall be either
- * a {@link HashMap} or the instance returned by {@link Collections#emptyMap()}.
+ * Clones the given map, which can be either a {@link HashMap}
+ * or the instance returned by {@link Collections#emptyMap()}.
*/
- private void setFinal(final String name, Map<?,?> value) throws ReflectiveOperationException {
+ private static Object clone(final Map<?,?> value) {
if (value instanceof HashMap<?,?>) {
- value = (Map<?,?>) ((HashMap<?,?>) value).clone();
+ return ((HashMap<?,?>) value).clone();
} else {
- value = new HashMap<>();
+ return new HashMap<>();
}
- java.lang.reflect.Field f = UnitFormat.class.getDeclaredField(name);
- f.setAccessible(true);
- f.set(this, value);
}
}
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/CorruptedObjectException.java b/core/sis-utility/src/main/java/org/apache/sis/util/CorruptedObjectException.java
index 598f4de..e120cf1 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/CorruptedObjectException.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/CorruptedObjectException.java
@@ -58,7 +58,7 @@ import org.opengis.referencing.IdentifiedObject;
* ignored by the user.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.6
+ * @version 1.0
* @since 0.5
* @module
*/
@@ -85,6 +85,17 @@ public class CorruptedObjectException extends RuntimeException {
}
/**
+ * Constructs a new exception with the specified cause.
+ *
+ * @param cause the cause, or {@code null} if none.
+ *
+ * @since 1.0
+ */
+ public CorruptedObjectException(final Exception cause) {
+ super(cause);
+ }
+
+ /**
* Constructs a new exception with the name of the given object.
*
* @param object the corrupted object, or {@code null} if unknown.
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java b/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java
index f4a1657..e9209b5 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/Exceptions.java
@@ -215,6 +215,10 @@ public final class Exceptions extends Static {
* in other {@code SQLException} without additional information.</li>
* </ul>
*
+ * <div class="note"><b>Note:</b>
+ * {@link java.security.PrivilegedActionException} is also a wrapper exception, but is not included in above list
+ * because it is used in very specific contexts.</div>
+ *
* This method uses only the exception class as criterion;
* it does not verify if the exception messages are the same.
*
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 13/31: Add tests for GridGeometry.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 793b04b5fe780a2e6e34c25dd4e8f1b00cb02370
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Thu May 31 14:04:57 2018 +0000
Add tests for GridGeometry.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832616 13f79535-47bb-0310-9956-ffa450edef68
---
core/sis-raster/pom.xml | 14 ++
.../org/apache/sis/coverage/grid/GridGeometry.java | 38 +++--
.../apache/sis/coverage/grid/GridGeometryTest.java | 165 +++++++++++++++++++++
.../org/apache/sis/test/suite/RasterTestSuite.java | 3 +-
4 files changed, 204 insertions(+), 16 deletions(-)
diff --git a/core/sis-raster/pom.xml b/core/sis-raster/pom.xml
index cc6b8fa..ddaa2c1 100644
--- a/core/sis-raster/pom.xml
+++ b/core/sis-raster/pom.xml
@@ -113,6 +113,20 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.sis.core</groupId>
+ <artifactId>sis-metadata</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sis.core</groupId>
+ <artifactId>sis-referencing</artifactId>
+ <version>${project.version}</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 246a71c..6bf983d 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -19,6 +19,7 @@ package org.apache.sis.coverage.grid;
import java.util.Objects;
import java.io.Serializable;
import java.awt.image.RenderedImage; // For javadoc only.
+import org.opengis.geometry.Envelope;
import org.opengis.geometry.MismatchedDimensionException;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.operation.Matrix;
@@ -54,12 +55,12 @@ import org.opengis.coverage.grid.GridEnvelope;
* This CRS is the target of the <cite>grid to CRS</cite> transform.</li>
* <li>An <em>estimation</em> of {@linkplain #resolution(boolean) grid resolution} along each CRS axes,
* computed from the <cite>grid to CRS</cite> transform and eventually from the grid extent.</li>
- * <li>An {@linkplain #isConversionLinear indication of whether conversion for an axis is linear or not}.</li>
+ * <li>An {@linkplain #isConversionLinear indication of whether conversion for some axes is linear or not}.</li>
* </ul>
*
- * All above properties except the CRS should be mandatory, but are allowed to be temporarily absent during
- * grid coverage construction. Temporarily absent properties are allowed because they may be inferred from
- * a wider context. For example a grid geometry know nothing about {@link RenderedImage},
+ * The first three properties should be mandatory, but are allowed to be temporarily absent during
+ * grid coverage construction. Temporarily absent properties are allowed because they may be inferred
+ * from a wider context. For example a grid geometry know nothing about {@link RenderedImage},
* but {@code GridCoverage2D} does and may use that information for providing a missing grid envelope.
* By default, any request for an undefined property will throw an {@link IncompleteGridGeometryException}.
* In order to check if a property is defined, use {@link #isDefined(int)}.
@@ -344,7 +345,7 @@ public class GridGeometry implements Serializable {
* @throws IncompleteGridGeometryException if this grid geometry has no envelope —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #ENVELOPE})</code> returned {@code false}.
*/
- public ImmutableEnvelope getEnvelope() throws IncompleteGridGeometryException {
+ public Envelope getEnvelope() throws IncompleteGridGeometryException {
if (envelope != null && !envelope.isAllNaN()) {
return envelope;
}
@@ -356,7 +357,7 @@ public class GridGeometry implements Serializable {
* for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
* A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
*
- * @return the grid envelope (never {@code null}).
+ * @return the valid extent of grid coordinates (never {@code null}).
* @throws IncompleteGridGeometryException if this grid geometry has no extent —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #EXTENT})</code> returned {@code false}.
*/
@@ -395,7 +396,7 @@ public class GridGeometry implements Serializable {
* </ul>
*
* @param anchor the pixel part to map.
- * @return the transform (never {@code null}).
+ * @return the conversion from grid coordinates to "real world" coordinates (never {@code null}).
* @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
* @throws IncompleteGridGeometryException if this grid geometry has no transform —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #GRID_TO_CRS})</code> returned {@code false}.
@@ -418,10 +419,10 @@ public class GridGeometry implements Serializable {
/**
* Indicates whether the <cite>grid to CRS</cite> conversion is linear for all the specified CRS axes.
* The conversion from grid coordinates to real world coordinates is often linear for some dimensions,
- * typically the horizontal ones at indices 0 and 1. But the vertical dimension (usually at index 3)
+ * typically the horizontal ones at indices 0 and 1. But the vertical dimension (usually at index 2)
* is often non-linear, for example with data at 0, 5, 10, 100 and 1000 metres.
*
- * @param targets indices of the CRS axes. This is not necessarily the same than indices of grid axes.
+ * @param targets indices of CRS axes. This is not necessarily the same than indices of grid axes.
* @return {@code true} if the conversion from grid coordinates to "real world" coordinates is linear
* for all the given CRS dimension.
*/
@@ -437,12 +438,13 @@ public class GridGeometry implements Serializable {
/**
* Returns an <em>estimation</em> of the grid resolution, in units of the coordinate reference system axes.
- * If non-null, the length of the returned array is the number of CRS dimensions, with {@code resolution[0]}
+ * The length of the returned array is the number of CRS dimensions, with {@code resolution[0]}
* being the resolution along the first CRS axis, {@code resolution[1]} the resolution along the second CRS
* axis, <i>etc</i>. Note that this axis order is not necessarily the same than grid axis order.
*
- * <p>If some resolutions are not constant factors (i.e. the {@code gridToCRS} transform for the corresponding
- * dimension is non-linear), then the resolution is set to one of the following values:</p>
+ * <p>If the resolution at CRS dimension <var>i</var> is not a constant factor
+ * (i.e. the <code>{@linkplain #isConversionLinear(int...) isConversionLinear}(i)</code> returns {@code false}),
+ * then {@code resolution[i]} is set to one of the following values:</p>
*
* <ul>
* <li>{@link Double#NaN} if {@code allowEstimates} is {@code false}.</li>
@@ -455,7 +457,7 @@ public class GridGeometry implements Serializable {
* The resolution is computed and may be representative of only a part of the grid.</div>
*
* @param allowEstimates whether to provide some values even for resolutions that are not constant factors.
- * @return an <em>estimation</em> of the grid resolution.
+ * @return an <em>estimation</em> of the grid resolution (never {@code null}).
* @throws IncompleteGridGeometryException if this grid geometry has no resolution —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #RESOLUTION})</code> returned {@code false}.
*/
@@ -503,6 +505,9 @@ public class GridGeometry implements Serializable {
* <p>We keep trace of non-linear dimensions in a bitmask, with bits of non-linear dimensions set to 1.
* This limit us to 64 dimensions, which is assumed more than enough. Note that {@code GridGeometry} can
* contain more dimensions provided that index of the last non-linear dimension is not greater than 64.</p>
+ *
+ * @param gridToCRS the transform to "real world" coordinates, or {@code null} if unknown.
+ * @return a bitmask of dimensions, or 0 (i.e. conversion assumed fully linear) if the given transform was null.
*/
private static long findNonLinearTargets(final MathTransform gridToCRS) {
long nonLinearDimensions = 0;
@@ -611,14 +616,17 @@ public class GridGeometry implements Serializable {
/**
* Returns {@code true} if all the parameters specified by the argument are set.
+ * If this method returns {@code true}, then invoking the corresponding getter
+ * methods will not throw {@link IncompleteGridGeometryException}.
*
- * @param bitmask any combination of {@link #CRS}, {@link #ENVELOPE}, {@link #EXTENT} and {@link #GRID_TO_CRS}.
+ * @param bitmask any combination of {@link #CRS}, {@link #ENVELOPE}, {@link #EXTENT},
+ * {@link #GRID_TO_CRS} and {@link #RESOLUTION}.
* @return {@code true} if all specified attributes are defined (i.e. invoking the
* corresponding method will not thrown an {@link IncompleteGridGeometryException}).
* @throws IllegalArgumentException if the specified bitmask is not a combination of known masks.
*/
public boolean isDefined(final int bitmask) throws IllegalArgumentException {
- if ((bitmask & ~(CRS | ENVELOPE | EXTENT | GRID_TO_CRS)) != 0) {
+ if ((bitmask & ~(CRS | ENVELOPE | EXTENT | GRID_TO_CRS | RESOLUTION)) != 0) {
throw new IllegalArgumentException(Errors.format(
Errors.Keys.IllegalArgumentValue_2, "bitmask", bitmask));
}
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
new file mode 100644
index 0000000..35787c6
--- /dev/null
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import org.opengis.referencing.datum.PixelInCell;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
+import org.apache.sis.referencing.operation.matrix.Matrix4;
+import org.apache.sis.referencing.operation.matrix.Matrices;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
+import org.apache.sis.geometry.GeneralEnvelope;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.apache.sis.test.ReferencingAssert.*;
+
+// Branch-dependent imports
+import org.opengis.coverage.grid.GridEnvelope;
+
+
+/**
+ * Tests the {@link GridGeometry} implementation.
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final strictfp class GridGeometryTest extends TestCase {
+ /**
+ * Verifies grid extent coordinates.
+ */
+ private static void assertExtentEquals(final GridEnvelope extent, final int[] low, final int[] high) {
+ assertArrayEquals("extent.low", low, extent.getLow() .getCoordinateValues());
+ assertArrayEquals("extent.high", high, extent.getHigh().getCoordinateValues());
+ }
+
+ /**
+ * Tests construction with an identity transform mapping pixel corner.
+ *
+ * @throws TransformException if an error occurred while using the "grid to CRS" transform.
+ */
+ @Test
+ public void testSimple() throws TransformException {
+ final int[] low = new int[] {100, 300, 3, 6};
+ final int[] high = new int[] {200, 400, 4, 7};
+ final GridExtent extent = new GridExtent(low, high, true);
+ final MathTransform identity = MathTransforms.identity(4);
+ final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CORNER, identity, null);
+ /*
+ * Verify properties that should be stored "as-is".
+ */
+ final MathTransform trCorner = grid.getGridToCRS(PixelInCell.CELL_CORNER);
+ assertSame("gridToCRS", identity, trCorner);
+ assertExtentEquals(grid.getExtent(), low, high);
+ /*
+ * Verify computed math transform.
+ */
+ final MathTransform trCenter = grid.getGridToCRS(PixelInCell.CELL_CENTER);
+ assertNotSame(trCenter, trCorner);
+ assertFalse ("gridToCRS.isIdentity", trCenter.isIdentity());
+ assertEquals("gridToCRS.sourceDimensions", 4, trCenter.getSourceDimensions());
+ assertEquals("gridToCRS.targetDimensions", 4, trCenter.getTargetDimensions());
+ assertMatrixEquals("gridToCRS", Matrices.create(5, 5, new double[] {
+ 1, 0, 0, 0, 0.5,
+ 0, 1, 0, 0, 0.5,
+ 0, 0, 1, 0, 0.5,
+ 0, 0, 0, 1, 0.5,
+ 0, 0, 0, 0, 1}), MathTransforms.getMatrix(trCenter), STRICT);
+ /*
+ * Verify the envelope, which should have been computed using the given math transform as-is.
+ */
+ assertEnvelopeEquals(new GeneralEnvelope(
+ new double[] {100, 300, 3, 6},
+ new double[] {201, 401, 5, 8}), grid.getEnvelope(), STRICT);
+ /*
+ * Verify other computed properties.
+ */
+ assertArrayEquals("resolution", new double[] {1, 1, 1, 1}, grid.resolution(false), STRICT);
+ assertTrue("isConversionLinear", grid.isConversionLinear(0, 1, 2, 3));
+ }
+
+ /**
+ * Tests construction with an identity transform mapping pixel center.
+ * This results a 0.5 pixel shifts in the "real world" envelope.
+ *
+ * @throws TransformException if an error occurred while using the "grid to CRS" transform.
+ */
+ @Test
+ public void testShifted() throws TransformException {
+ final int[] low = new int[] { 0, 0, 2};
+ final int[] high = new int[] {99, 199, 4};
+ final GridExtent extent = new GridExtent(low, high, true);
+ final MathTransform identity = MathTransforms.identity(3);
+ final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, identity, null);
+ /*
+ * Verify properties that should be stored "as-is".
+ */
+ final MathTransform trCenter = grid.getGridToCRS(PixelInCell.CELL_CENTER);
+ assertSame("gridToCRS", identity, trCenter);
+ assertExtentEquals(grid.getExtent(), low, high);
+ /*
+ * Verify computed math transform.
+ */
+ final MathTransform trCorner = grid.getGridToCRS(PixelInCell.CELL_CORNER);
+ assertNotSame(trCenter, trCorner);
+ assertFalse ("gridToCRS.isIdentity", trCorner.isIdentity());
+ assertEquals("gridToCRS.sourceDimensions", 3, trCorner.getSourceDimensions());
+ assertEquals("gridToCRS.targetDimensions", 3, trCorner.getTargetDimensions());
+ assertMatrixEquals("gridToCRS", new Matrix4(
+ 1, 0, 0, -0.5,
+ 0, 1, 0, -0.5,
+ 0, 0, 1, -0.5,
+ 0, 0, 0, 1), MathTransforms.getMatrix(trCorner), STRICT);
+ /*
+ * Verify the envelope, which should have been computed using the math transform shifted by 0.5.
+ */
+ assertEnvelopeEquals(new GeneralEnvelope(
+ new double[] {-0.5, -0.5, 1.5},
+ new double[] {99.5, 199.5, 4.5}), grid.getEnvelope(), STRICT);
+ /*
+ * Verify other computed properties.
+ */
+ assertArrayEquals("resolution", new double[] {1, 1, 1}, grid.resolution(false), STRICT);
+ assertTrue("isConversionLinear", grid.isConversionLinear(0, 1, 2));
+ }
+
+ /**
+ * Tests construction with a non-linear component in the transform.
+ *
+ * @throws TransformException if an error occurred while using the "grid to CRS" transform.
+ */
+ @Test
+ public void testNonLinear() throws TransformException {
+ final GridExtent extent = new GridExtent(
+ new int[] {0, 0, 2, 6},
+ new int[] {100, 200, 3, 9}, false);
+ final MathTransform horizontal = MathTransforms.linear(Matrices.create(3, 3, new double[] {
+ 0.5, 0, 12,
+ 0, 0.25, -2,
+ 0, 0, 1}));
+ final MathTransform vertical = MathTransforms.interpolate(null, new double[] {1, 2, 4, 10});
+ final MathTransform temporal = MathTransforms.linear(3600, 60);
+ final MathTransform gridToCRS = MathTransforms.compound(horizontal, vertical, temporal);
+ final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, gridToCRS, null);
+ assertArrayEquals("resolution", new double[] {0.5, 0.25, 6.0, 3600}, grid.resolution(true), STRICT);
+ assertArrayEquals("resolution", new double[] {0.5, 0.25, Double.NaN, 3600}, grid.resolution(false), STRICT);
+ assertFalse("isConversionLinear", grid.isConversionLinear(0, 1, 2, 3));
+ assertTrue ("isConversionLinear", grid.isConversionLinear(0, 1, 3));
+ }
+}
diff --git a/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java b/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
index 24c99c4..1817827 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
@@ -31,7 +31,8 @@ import org.junit.BeforeClass;
*/
@Suite.SuiteClasses({
org.apache.sis.image.DefaultIteratorTest.class,
- org.apache.sis.coverage.grid.PixelTranslationTest.class
+ org.apache.sis.coverage.grid.PixelTranslationTest.class,
+ org.apache.sis.coverage.grid.GridGeometryTest.class
})
public final strictfp class RasterTestSuite extends TestSuite {
/**
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 31/31: Fix a never-ending loop when the file to open has a
known extensions but is still not recognized as a known format. This happen
in particular with XML files.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit d4818ccf288ddf4344ac322aae94eff126636c6f
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Thu Jun 14 15:56:12 2018 +0200
Fix a never-ending loop when the file to open has a known extensions but is still not recognized as a known format.
This happen in particular with XML files.
---
.../src/main/java/org/apache/sis/storage/DataStoreRegistry.java | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
index ef81e33..2dc44de 100644
--- a/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
+++ b/storage/sis-storage/src/main/java/org/apache/sis/storage/DataStoreRegistry.java
@@ -243,11 +243,10 @@ search: do {
/*
* If we filtered providers by the file extension without finding a suitable provider,
* try again with all other providers (even if they are for another file extension).
+ * We do that by changing 'matchCondition' from TRUE to FALSE. In all other cases,
+ * we stop the search.
*/
- if (Boolean.TRUE.equals(matchCondition)) {
- matchCondition = Boolean.FALSE;
- }
- } while (matchCondition != null);
+ } while (matchCondition != null && (matchCondition = !matchCondition) == false);
/*
* If a provider has been found, or if a provider returned UNDETERMINED, use that one
* for opening a DataStore. Note that if more than one provider returned UNDETERMINED,
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 16/31: Leverage geoapi-conformance for reading OGC XSD files.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit eb442d4639120ea14058b81b3b3f37b7f4e23928
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Sat Jun 2 12:04:07 2018 +0000
Leverage geoapi-conformance for reading OGC XSD files.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832732 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/test/xml/PackageVerifier.java | 45 +--
.../org/apache/sis/test/xml/SchemaCompliance.java | 382 +--------------------
.../org/apache/sis/test/xml/SchemaException.java | 39 ---
.../org/apache/sis/xml/RenameListGenerator.java | 2 +-
4 files changed, 32 insertions(+), 436 deletions(-)
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
index bf52a98..760e895 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/PackageVerifier.java
@@ -37,6 +37,7 @@ import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.opengis.annotation.UML;
+import org.opengis.geoapi.SchemaException;
import org.apache.sis.util.Classes;
import org.apache.sis.internal.system.Modules;
import org.apache.sis.internal.jaxb.LegacyNamespaces;
@@ -134,9 +135,9 @@ final strictfp class PackageVerifier {
/**
* The schema definition for the class under examination.
*
- * @see SchemaCompliance#typeDefinition(String)
+ * @see SchemaCompliance#getTypeDefinition(String)
*/
- private Map<String, SchemaCompliance.Info> properties;
+ private Map<String, SchemaCompliance.Element> properties;
/**
* Whether a namespace is actually used of not.
@@ -259,7 +260,7 @@ final strictfp class PackageVerifier {
if (xmlType != null) {
if (!classNS.equals(xmlType.namespace())) {
throw new SchemaException(errorInClassMember(null)
- .append("Mismatched namespace in @XmlType and @XmlRootElement."));
+ .append("Mismatched namespace in @XmlType and @XmlRootElement.").toString());
}
SchemaCompliance.verifyNamingConvention(type.getName(), isoName, xmlType.name(), SchemaCompliance.TYPE_SUFFIX);
}
@@ -293,14 +294,14 @@ final strictfp class PackageVerifier {
classNS = packageNS;
} else if (classNS.equals(packageNS)) {
throw new SchemaException(errorInClassMember(null)
- .append("Redundant namespace declaration: ").append(classNS));
+ .append("Redundant namespace declaration: ").append(classNS).toString());
}
/*
* Verify that the namespace has a prefix associated to it in the package-info file.
*/
if (namespaceIsUsed.put(classNS, Boolean.TRUE) == null) {
throw new SchemaException(errorInClassMember(null)
- .append("No prefix in package-info for ").append(classNS));
+ .append("No prefix in package-info for ").append(classNS).toString());
}
/*
* Properties in the legacy GMD or GMI namespaces may be deprecated, depending if a replacement
@@ -311,20 +312,20 @@ final strictfp class PackageVerifier {
if (!isDeprecatedClass) {
if (type.isAnnotationPresent(Deprecated.class)) {
throw new SchemaException(errorInClassMember(null)
- .append("Unexpected @Deprecated annotation."));
+ .append("Unexpected @Deprecated annotation.").toString());
}
/*
* Verify that class name exists, then verify its namespace (associated to the null key by convention).
*/
- properties = schemas.typeDefinition(isoName);
+ properties = schemas.getTypeDefinition(isoName);
if (properties == null) {
throw new SchemaException(errorInClassMember(null)
- .append("Unknown name declared in @XmlRootElement: ").append(isoName));
+ .append("Unknown name declared in @XmlRootElement: ").append(isoName).toString());
}
final String expectedNS = properties.get(null).namespace;
if (!classNS.equals(expectedNS)) {
throw new SchemaException(errorInClassMember(null)
- .append(isoName).append(" shall be associated to namespace ").append(expectedNS));
+ .append(isoName).append(" shall be associated to namespace ").append(expectedNS).toString());
}
if (codeList != null) return; // If the class was a code list, we are done.
}
@@ -375,7 +376,7 @@ final strictfp class PackageVerifier {
}
if (namespaceIsUsed.put(ns, Boolean.TRUE) == null) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Missing @XmlNs for namespace ").append(ns));
+ .append("Missing @XmlNs for namespace ").append(ns).toString());
}
/*
* Remember that we need an adapter for this property, unless the method or field defines its own adapter.
@@ -395,7 +396,7 @@ final strictfp class PackageVerifier {
final Class<?>[] p = c.getInterfaces();
if (p.length == 0) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Missing @XmlJavaTypeAdapter for ").append(valueType));
+ .append("Missing @XmlJavaTypeAdapter for ").append(valueType).toString());
}
c = p[0]; // Take only the first interface, which should be the "main" parent.
}
@@ -408,7 +409,7 @@ final strictfp class PackageVerifier {
if (LEGACY_NAMESPACES.getOrDefault(ns, Collections.emptySet()).contains(name)) {
if (!isDeprecatedClass && element.required()) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Legacy property should not be required."));
+ .append("Legacy property should not be required.").toString());
}
} else {
/*
@@ -417,21 +418,21 @@ final strictfp class PackageVerifier {
*/
if (property.isAnnotationPresent(Deprecated.class)) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Unexpected deprecation status."));
+ .append("Unexpected deprecation status.").toString());
}
- final SchemaCompliance.Info info = properties.get(name);
+ final SchemaCompliance.Element info = properties.get(name);
if (info == null) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Unexpected XML element: ").append(name));
+ .append("Unexpected XML element: ").append(name).toString());
}
if (info.namespace != null && !ns.equals(info.namespace)) {
throw new SchemaException(errorInClassMember(javaName)
.append("Declared namespace: ").append(ns).append(System.lineSeparator())
- .append("Expected namespace: ").append(info.namespace));
+ .append("Expected namespace: ").append(info.namespace).toString());
}
if (element.required() != info.isRequired) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Expected @XmlElement(required = ").append(info.isRequired).append(')'));
+ .append("Expected @XmlElement(required = ").append(info.isRequired).append(')').toString());
}
/*
* Following is a continuation of our check for cardinality, but also the beginning of the check
@@ -441,11 +442,11 @@ final strictfp class PackageVerifier {
if (isCollection) {
if (!info.isCollection) {
if (false) // Temporarily disabled because require GeoAPI modifications.
- throw new SchemaException(errorInClassMember(javaName).append("Value should be a singleton."));
+ throw new SchemaException(errorInClassMember(javaName).append("Value should be a singleton.").toString());
}
} else if (info.isCollection) {
if (false) // Temporarily disabled because require GeoAPI modifications.
- throw new SchemaException(errorInClassMember(javaName).append("Value should be a collection."));
+ throw new SchemaException(errorInClassMember(javaName).append("Value should be a collection.").toString());
}
if (valueType != null) {
final UML valueUML = valueType.getAnnotation(UML.class);
@@ -458,7 +459,7 @@ final strictfp class PackageVerifier {
if (false) // Temporarily disabled because require GeoAPI modifications.
throw new SchemaException(errorInClassMember(javaName)
.append("Declared value type: ").append(actual).append(System.lineSeparator())
- .append("Expected value type: ").append(expected));
+ .append("Expected value type: ").append(expected).toString());
}
}
}
@@ -466,12 +467,12 @@ final strictfp class PackageVerifier {
* Verify if we have a @XmlNs for the type of the value. This is probably not required, but we
* do that as a safety. A common namespace added by this check is Metadata Common Classes (MCC).
*/
- final Map<String, SchemaCompliance.Info> valueInfo = schemas.typeDefinition(info.typeName);
+ final Map<String, SchemaCompliance.Element> valueInfo = schemas.getTypeDefinition(info.typeName);
if (valueInfo != null) {
final String valueNS = valueInfo.get(null).namespace;
if (namespaceIsUsed.put(valueNS, Boolean.TRUE) == null) {
throw new SchemaException(errorInClassMember(javaName)
- .append("Missing @XmlNs for property value namespace: ").append(valueNS));
+ .append("Missing @XmlNs for property value namespace: ").append(valueNS).toString());
}
}
}
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
index 1280c3a..ad6edcb 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaCompliance.java
@@ -17,27 +17,20 @@
package org.apache.sis.test.xml;
import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.DirectoryStream;
import java.nio.file.DirectoryIteratorException;
import java.util.Map;
-import java.util.Deque;
import java.util.HashMap;
-import java.util.ArrayDeque;
-import java.util.Objects;
-import java.util.Collections;
-import javax.xml.XMLConstants;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlElement;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import org.w3c.dom.Node;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
import org.xml.sax.SAXException;
+import org.opengis.geoapi.Departures;
+import org.opengis.geoapi.DocumentationStyle;
+import org.opengis.geoapi.SchemaInformation;
+import org.opengis.geoapi.SchemaException;
import org.apache.sis.util.StringBuilders;
@@ -63,35 +56,7 @@ import org.apache.sis.util.StringBuilders;
* @since 1.0
* @module
*/
-public final strictfp class SchemaCompliance {
- /**
- * The root of ISO schemas. May be replaced by {@link #schemaRootDirectory} if a local copy
- * is available for faster tests.
- */
- private static final String SCHEMA_ROOT_DIRECTORY = "http://standards.iso.org/iso/";
-
- /**
- * ISO 19115-2 classes to merge with ISO 19115-1 classes. For example ISO 19115-2 defines {@code MI_Band}
- * as an extension of ISO 19115-1 {@code MD_Band}, but GeoAPI and Apache SIS merges those two types in a
- * single class for simplicity. Consequently when reading the schema, we rename some {@code MI_*} types
- * as {@code MD_*} in order to store properties together.
- */
- private static final Map<String,String> TYPES_TO_MERGE;
- static {
- final Map<String,String> m = new HashMap<>();
- // ………Merge what…………………………………………………………Into……………………………………………
- m.put("MI_Band_Type", "MD_Band_Type");
- m.put("MI_CoverageDescription_Type", "MD_CoverageDescription_Type");
- m.put("MI_Georectified_Type", "MD_Georectified_Type");
- m.put("MI_Georeferenceable_Type", "MD_Georeferenceable_Type");
- m.put("LE_Source_Type", "LI_Source_Type");
- m.put("LE_ProcessStep_Type", "LI_ProcessStep_Type");
- m.put("AbstractMX_File_Type", "MX_DataFile_Type");
- m.put("Abstract_DataQuality_Type", "DQ_DataQuality_Type");
- m.put("Abstract_QualityElement_Type", "AbstractDQ_Element_Type");
- TYPES_TO_MERGE = Collections.unmodifiableMap(m);
- }
-
+public final strictfp class SchemaCompliance extends SchemaInformation {
/**
* The prefix of XML type names for properties. In ISO/OGC schemas, this prefix does not appear
* in the definition of class types but may appear in the definition of property types.
@@ -105,124 +70,16 @@ public final strictfp class SchemaCompliance {
static final String TYPE_SUFFIX = "_Type";
/**
- * The suffix of XML property type names in a given class.
- * This is used by convention in OGC/ISO standards (but not necessarily in other XSD).
- */
- private static final String PROPERTY_TYPE_SUFFIX = "_PropertyType";
-
- /**
- * XML type to ignore because of key collisions in {@link #typeDefinitions}.
- * Those collisions occur because code lists are defined as links to the same file,
- * with only different anchor positions.
- */
- private static final String CODELIST_TYPE = "gco:CodeListValue_Type";
-
- /**
* Separator between XML prefix and the actual name.
*/
private static final char PREFIX_SEPARATOR = ':';
/**
- * If the computer contains a local copy of ISO schemas, path to that directory. Otherwise {@code null}.
- * If non-null, the {@code "http://standards.iso.org/iso/"} prefix in URL will be replaced by that path.
- * This field is usually {@code null}, but can be set to a non-null value for making tests faster.
- */
- private final Path schemaRootDirectory;
-
- /**
* Root directory from which to search for classes.
*/
private final Path classRootDirectory;
/**
- * A temporary buffer for miscellaneous string operations.
- * Valid only in a local scope since the content may change at any time.
- */
- private final StringBuilder buffer;
-
- /**
- * The DOM factory used for reading XSD schemas.
- */
- private final DocumentBuilderFactory factory;
-
- /**
- * URL of schemas loaded, for avoiding loading the same schema many time.
- * The last element on the queue is the schema in process of being loaded,
- * used for resolving relative paths in {@code <xs:include>} elements.
- */
- private final Deque<String> schemaLocations;
-
- /**
- * The type and namespace of a property or class. Used in {@link #typeDefinitions} map.
- */
- static final class Info {
- final String typeName;
- final String namespace;
- final boolean isRequired;
- final boolean isCollection;
-
- Info(final String typeName, final String namespace, final boolean isRequired, final boolean isCollection) {
- this.typeName = typeName;
- this.namespace = namespace;
- this.isRequired = isRequired;
- this.isCollection = isCollection;
- }
-
- boolean equal(final Info other) {
- return Objects.equals(typeName, other.typeName)
- && Objects.equals(namespace, other.namespace)
- && isRequired == other.isRequired
- && isCollection == other.isCollection;
- }
-
- @Override public String toString() {
- return typeName;
- }
- }
-
- /**
- * Definitions of XML type for each class. In OGC/ISO schemas, those definitions have the {@value #TYPE_SUFFIX}
- * suffix in their name (which is omitted). The value is another map, where keys are property names and values
- * are their types, having the {@link #PROPERTY_TYPE_SUFFIX} suffix in their name (which is omitted).
- */
- private final Map<String, Map<String,Info>> typeDefinitions;
-
- /**
- * Notifies that we are about to define the XML type for each property. In OGC/ISO schemas, those definitions
- * have the {@value #PROPERTY_TYPE_SUFFIX} suffix in their name (which is omitted). After this method call,
- * properties can be defined by calls to {@link #addProperty(String, String, boolean, boolean)}.
- */
- private void preparePropertyDefinitions(final String type) throws SchemaException {
- currentProperties = typeDefinitions.computeIfAbsent(trim(type, TYPE_SUFFIX).intern(), (k) -> new HashMap<>());
- }
-
- /**
- * The properties of the XML type under examination, or {@code null} if none.
- * If non-null, this is one of the values in the {@link #typeDefinitions} map.
- * By convention, the {@code null} key is associated to information about the class.
- */
- private Map<String,Info> currentProperties;
-
- /**
- * A single property type under examination, or {@code null} if none.
- * If non-null, this is a value ending with the {@value #PROPERTY_TYPE_SUFFIX} suffix.
- */
- private String currentPropertyType;
-
- /**
- * Default value for the {@code required} attribute of {@link XmlElement}. This default value should
- * be {@code true} for properties declared inside a {@code <sequence>} element, and {@code false} for
- * properties declared inside a {@code <choice>} element.
- */
- private boolean requiredByDefault;
-
- /**
- * Namespace of the type or properties being defined.
- * This is specified by {@code <xs:schema targetNamespace="(…)">}.
- */
- private String targetNamespace;
-
- /**
* The namespaces associated to prefixes, as declared by JAXB {@link XmlNs} annotations.
* Used for verifying that no prefix is defined twice for different namespaces.
*
@@ -242,13 +99,8 @@ public final strictfp class SchemaCompliance {
* Otherwise {@code null}. This is only for making tests faster.
*/
public SchemaCompliance(final Path classRootDirectory, final Path schemaRootDirectory) {
- this.classRootDirectory = classRootDirectory;
- this.schemaRootDirectory = schemaRootDirectory;
- factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(true);
- buffer = new StringBuilder(100);
- typeDefinitions = new HashMap<>();
- schemaLocations = new ArrayDeque<>();
+ super(schemaRootDirectory, new Departures(), DocumentationStyle.NONE);
+ this.classRootDirectory = classRootDirectory;
allXmlNS = new HashMap<>();
}
@@ -269,6 +121,7 @@ public final strictfp class SchemaCompliance {
throws IOException, ClassNotFoundException, ParserConfigurationException, SAXException, SchemaException
{
PackageVerifier verifier = null;
+ final StringBuilder buffer = new StringBuilder();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(classRootDirectory.resolve(directory))) {
for (Path path : stream) {
final String filename = path.getFileName().toString();
@@ -297,184 +150,6 @@ public final strictfp class SchemaCompliance {
}
/**
- * Loads the XSD file at the given URL. Definitions are stored in the {@link #typeDefinitions} map.
- * Only information of interest are stored, and we assume that the XSD follows OGC/ISO conventions.
- * This method may be invoked recursively if the XSD contains {@code <xs:include>} elements.
- *
- * @param location URL to the XSD file to load.
- */
- final void loadSchema(String location)
- throws IOException, ParserConfigurationException, SAXException, SchemaException
- {
- if (schemaRootDirectory != null && location.startsWith(SCHEMA_ROOT_DIRECTORY)) {
- location = schemaRootDirectory.resolve(location.substring(SCHEMA_ROOT_DIRECTORY.length())).toUri().toString();
- }
- if (!schemaLocations.contains(location)) {
- final Document doc;
- try (final InputStream in = new URL(location).openStream()) {
- doc = factory.newDocumentBuilder().parse(in);
- }
- schemaLocations.addLast(location);
- storeClassDefinition(doc);
- }
- }
-
- /**
- * Stores information about classes in the given node and children. This method invokes itself
- * for scanning children, until we reach sub-nodes about properties (in which case we continue
- * with {@link #storePropertyDefinition(Node)}).
- */
- private void storeClassDefinition(final Node node)
- throws IOException, ParserConfigurationException, SAXException, SchemaException
- {
- if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(node.getNamespaceURI())) {
- switch (node.getNodeName()) {
- case "schema": {
- targetNamespace = getMandatoryAttribute(node, "targetNamespace").intern();
- break;
- }
- /*
- * <xs:include schemaLocation="(…).xsd">
- * Load the schema at the given URL, which is assumed relative.
- */
- case "include": {
- final String oldTarget = targetNamespace;
- final String location = schemaLocations.getLast();
- buffer.setLength(0);
- buffer.append(location, 0, location.lastIndexOf('/') + 1).append(getMandatoryAttribute(node, "schemaLocation"));
- loadSchema(buffer.toString());
- targetNamespace = oldTarget;
- return; // Skip children (normally, there is none).
- }
- /*
- * <xs:element name="(…)" type="(…)_Type">
- * Verify that the names comply with our assumptions.
- */
- case "element": {
- final String name = getMandatoryAttribute(node, "name");
- final String type = getMandatoryAttribute(node, "type");
- if (CODELIST_TYPE.equals(type)) {
- final Map<String,Info> properties = new HashMap<>(4);
- final Info info = new Info(null, targetNamespace, false, false);
- properties.put(null, info); // Remember namespace of the code list.
- properties.put(name, info); // Pseudo-property used in our CodeList adapters.
- if (typeDefinitions.put(name, properties) != null) {
- throw new SchemaException(String.format("Code list \"%s\" is defined twice.", name));
- }
- } else {
- verifyNamingConvention(schemaLocations.getLast(), name, type, TYPE_SUFFIX);
- preparePropertyDefinitions(type);
- addProperty(null, type, false, false);
- currentProperties = null;
- }
- return; // Ignore children (they are about documentation).
- }
- /*
- * <xs:complexType name="(…)_Type">
- * <xs:complexType name="(…)_PropertyType">
- */
- case "complexType": {
- String name = getMandatoryAttribute(node, "name");
- if (name.endsWith(PROPERTY_TYPE_SUFFIX)) {
- currentPropertyType = name;
- verifyPropertyType(node);
- currentPropertyType = null;
- } else {
- /*
- * In the case of "(…)_PropertyType", replace some ISO 19115-2 types by ISO 19115-1 types.
- * For example "MI_Band_Type" is renamed as "MD_Band_Type". We do that because we use only
- * one class for representing those two distincts ISO types. Note that not all ISO 19115-2
- * types extend an ISO 19115-1 type, so we need to apply a case-by-case approach.
- */
- requiredByDefault = true;
- name = TYPES_TO_MERGE.getOrDefault(name, name);
- preparePropertyDefinitions(name);
- storePropertyDefinition(node);
- currentProperties = null;
- }
- return; // Skip children since they have already been examined.
- }
- }
- }
- for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
- storeClassDefinition(child);
- }
- }
-
- /**
- * Stores information about properties in the current class. The {@link #currentProperties} field must be
- * set to the map of properties for the class defined by the enclosing {@code <xs:complexType>} element.
- * This method parses elements of the following form:
- *
- * {@preformat xml
- * <xs:element name="(…)" type="(…)_PropertyType" minOccurs="(…)" maxOccurs="(…)">
- * }
- */
- private void storePropertyDefinition(final Node node) throws SchemaException {
- if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(node.getNamespaceURI())) {
- switch (node.getNodeName()) {
- case "sequence": {
- requiredByDefault = true;
- break;
- }
- case "choice": {
- requiredByDefault = false;
- break;
- }
- case "element": {
- boolean isRequired = requiredByDefault;
- boolean isCollection = false;
- final NamedNodeMap attributes = node.getAttributes();
- if (attributes != null) {
- Node attr = attributes.getNamedItem("minOccurs");
- if (attr != null) {
- final String value = attr.getNodeValue();
- if (value != null) {
- isRequired = Integer.parseInt(value) > 0;
- }
- }
- attr = attributes.getNamedItem("maxOccurs");
- if (attr != null) {
- final String value = attr.getNodeValue();
- if (value != null) {
- isCollection = value.equals("unbounded") || Integer.parseInt(value) > 1;
- }
- }
- }
- addProperty(getMandatoryAttribute(node, "name").intern(),
- trim(getMandatoryAttribute(node, "type"), PROPERTY_TYPE_SUFFIX).intern(), isRequired, isCollection);
- return;
- }
- }
- }
- for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
- storePropertyDefinition(child);
- }
- }
-
- /**
- * Verifies the naming convention of property defined by the given node. The {@link #currentPropertyType}
- * field must be set to the type of the property defined by the enclosing {@code <xs:complexType>} element.
- * This method parses elements of the following form:
- *
- * {@preformat xml
- * <xs:element ref="(…)">
- * }
- */
- private void verifyPropertyType(final Node node) throws SchemaException {
- if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(node.getNamespaceURI())) {
- if ("element".equals(node.getNodeName())) {
- verifyNamingConvention(schemaLocations.getLast(),
- getMandatoryAttribute(node, "ref"), currentPropertyType, PROPERTY_TYPE_SUFFIX);
- return;
- }
- }
- for (Node child = node.getFirstChild(); child != null; child = child.getNextSibling()) {
- verifyPropertyType(child);
- }
- }
-
- /**
* Verifies that the relationship between the name of the given entity and its type are consistent with
* OGC/ISO conventions. This method ignores the prefix (e.g. {@code "mdb:"} in {@code "mdb:MD_Metadata"}).
*
@@ -506,20 +181,6 @@ public final strictfp class SchemaCompliance {
}
/**
- * Adds a property of the current name and type. This method is invoked during schema parsing.
- * The property namespace is assumed to be {@link #targetNamespace}.
- */
- private void addProperty(final String name, final String type, final boolean isRequired, final boolean isCollection) throws SchemaException {
- final Info info = new Info(type, targetNamespace, isRequired, isCollection);
- final Info old = currentProperties.put(name, info);
- if (old != null && !old.equal(info)) {
- throw new SchemaException(String.format("Error while parsing %s:%n" +
- "Property \"%s\" is associated to type \"%s\", but that property was already associated to \"%s\".",
- schemaLocations.getLast(), name, type, old));
- }
- }
-
- /**
* Removes leading and trailing spaces if any, then the prefix and the suffix in the given name.
* The prefix is anything before the first {@value #PREFIX_SEPARATOR} character.
* The suffix must be the given string, otherwise an exception is thrown.
@@ -536,31 +197,4 @@ public final strictfp class SchemaCompliance {
}
throw new SchemaException(String.format("Expected a name ending with \"%s\" but got \"%s\".", suffix, name));
}
-
- /**
- * Returns the attribute of the given name in the given node,
- * or throws an exception if the attribute is not present.
- */
- private static String getMandatoryAttribute(final Node node, final String name) throws SchemaException {
- final NamedNodeMap attributes = node.getAttributes();
- if (attributes != null) {
- final Node attr = attributes.getNamedItem(name);
- if (attr != null) {
- final String value = attr.getNodeValue();
- if (value != null) {
- return value;
- }
- }
- }
- throw new SchemaException(String.format("Node \"%s\" should have a '%s' attribute.", node.getNodeName(), name));
- }
-
- /**
- * Returns the type definitions for a class of the given name.
- *
- * @param className ISO identifier of a class (e.g. {@code "MD_Metadata"}).
- */
- final Map<String, SchemaCompliance.Info> typeDefinition(final String className) {
- return typeDefinitions.get(className);
- }
}
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaException.java b/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaException.java
deleted file mode 100644
index 9e59cfa..0000000
--- a/core/sis-metadata/src/test/java/org/apache/sis/test/xml/SchemaException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.sis.test.xml;
-
-
-/**
- * Thrown when a {@link SchemaCompliance} failed to load a XSD file because it does not comply
- * with expected OGC/ISO conventions, or when a JAXB annotation failed a compliance check.
- *
- * @author Martin Desruisseaux (Geomatys)
- * @version 1.0
- * @since 1.0
- * @module
- */
-@SuppressWarnings("serial")
-public final class SchemaException extends Exception {
- /**
- * Creates an exception with the specified details message.
- *
- * @param message the detail message.
- */
- public SchemaException(final CharSequence message) {
- super(message != null ? message.toString() : null);
- }
-}
diff --git a/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java b/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
index 1c5fb4b..de0594b 100644
--- a/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
+++ b/core/sis-metadata/src/test/java/org/apache/sis/xml/RenameListGenerator.java
@@ -32,7 +32,7 @@ import java.lang.reflect.Method;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import org.apache.sis.test.xml.SchemaException;
+import org.opengis.geoapi.SchemaException;
import org.apache.sis.internal.jaxb.LegacyNamespaces;
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 30/31: Portrayal : remove final and extend MapItem on
MapLayer class
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit c710ef3f5a1c9971540d52bac415124fd7d458cb
Author: Johann Sorel <js...@apache.org>
AuthorDate: Mon Jun 11 14:16:44 2018 +0000
Portrayal : remove final and extend MapItem on MapLayer class
git-svn-id: https://svn.apache.org/repos/asf/sis/trunk@1833333 13f79535-47bb-0310-9956-ffa450edef68
(cherry picked from commit 0d08a3a688b717d96d7635dedd502aa61fc56bab)
---
.../src/main/java/org/apache/sis/internal/map/MapLayer.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapLayer.java b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapLayer.java
index 8bce881..a2a1fbe 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapLayer.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/internal/map/MapLayer.java
@@ -38,7 +38,7 @@ import org.opengis.style.Style;
* @since 1.0
* @module
*/
-public final class MapLayer {
+public class MapLayer extends MapItem {
/**
* Data to be rendered.
*/
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 20/31: Use the 'long' primitive type instead of 'int' in
GridExtent. This force us to not implement GeoAPI interfaces for now (until
https://github.com/opengeospatial/geoapi/issues/36) is resolved. But since
those interfaces were not part of formal standard yet (they are in the
"pending" part of GeoAPI),
we would not have implemented them in SIS release anyway.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 0bec4739c40a2135c2efb6682045e4bdd7e72021
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Mon Jun 4 10:30:04 2018 +0000
Use the 'long' primitive type instead of 'int' in GridExtent.
This force us to not implement GeoAPI interfaces for now (until https://github.com/opengeospatial/geoapi/issues/36) is resolved.
But since those interfaces were not part of formal standard yet (they are in the "pending" part of GeoAPI), we would not have implemented them in SIS release anyway.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832809 13f79535-47bb-0310-9956-ffa450edef68
---
.../sis/coverage/grid/GridCoordinatesView.java | 32 +++++++--------
.../org/apache/sis/coverage/grid/GridExtent.java | 47 ++++++++++++----------
.../org/apache/sis/coverage/grid/GridGeometry.java | 21 ++++++----
.../apache/sis/coverage/grid/GridGeometryTest.java | 17 ++++----
4 files changed, 59 insertions(+), 58 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
index ca8fc28..3e68c4e 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridCoordinatesView.java
@@ -18,26 +18,26 @@ package org.apache.sis.coverage.grid;
import java.util.Arrays;
import org.apache.sis.util.ArgumentChecks;
-import org.apache.sis.util.resources.Errors;
-
-// Branch-dependent imports
-import org.opengis.coverage.grid.GridCoordinates;
/**
* A view over the low or high grid envelope coordinates.
* This is not a general-purpose grid coordinates since it assumes a {@link GridExtent} coordinates layout.
*
+ * <div class="note"><b>Upcoming API generalization:</b>
+ * this class may implement the {@code GridCoordinates} interface in a future Apache SIS version.
+ * This is pending <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>.</div>
+ *
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
* @since 1.0
* @module
*/
-final class GridCoordinatesView implements GridCoordinates {
+final class GridCoordinatesView /* implements GridCoordinates */ {
/**
* A reference to the coordinate array of the enclosing grid envelope.
*/
- private final int[] ordinates;
+ private final long[] ordinates;
/**
* Index of the first value in the {@link #ordinates} array.
@@ -48,7 +48,7 @@ final class GridCoordinatesView implements GridCoordinates {
/**
* Creates a new view over the low or high coordinates.
*/
- GridCoordinatesView(final int[] ordinates, final int offset) {
+ GridCoordinatesView(final long[] ordinates, final int offset) {
this.ordinates = ordinates;
this.offset = offset;
}
@@ -56,7 +56,6 @@ final class GridCoordinatesView implements GridCoordinates {
/**
* Returns the number of dimension.
*/
- @Override
public final int getDimension() {
return ordinates.length >>> 1;
}
@@ -64,16 +63,14 @@ final class GridCoordinatesView implements GridCoordinates {
/**
* Returns all coordinate values.
*/
- @Override
- public final int[] getCoordinateValues() {
+ public final long[] getCoordinateValues() {
return Arrays.copyOfRange(ordinates, offset, offset + getDimension());
}
/**
* Returns the coordinate value for the specified dimension.
*/
- @Override
- public final int getCoordinateValue(final int index) {
+ public final long getCoordinateValue(final int index) {
ArgumentChecks.ensureValidIndex(getDimension(), index);
return ordinates[offset + index];
}
@@ -81,10 +78,9 @@ final class GridCoordinatesView implements GridCoordinates {
/**
* Do not allow modification of grid coordinates since they are backed by {@link GridExtent}.
*/
- @Override
- public void setCoordinateValue(final int index, int value) {
- throw new UnsupportedOperationException(Errors.format(Errors.Keys.UnmodifiableObject_1, "GridCoordinates"));
- }
+// public void setCoordinateValue(final int index, long value) {
+// throw new UnsupportedOperationException(Errors.format(Errors.Keys.UnmodifiableObject_1, "GridCoordinates"));
+// }
/**
* Returns a string representation of this grid coordinates for debugging purpose.
@@ -99,12 +95,12 @@ final class GridCoordinatesView implements GridCoordinates {
*/
@Override
public final int hashCode() {
- int code = -3; // Arbitrary seed for differentiating from Arrays.hashCode(int[]).
+ long code = -3; // Arbitrary seed for differentiating from Arrays.hashCode(long[]).
final int end = offset + getDimension();
for (int i=offset; i<end; i++) {
code = 31 * code + ordinates[i];
}
- return code;
+ return Long.hashCode(code);
}
/**
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 8a02c13..6c5604c 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -30,7 +30,6 @@ import org.apache.sis.geometry.GeneralDirectPosition;
// Branch-dependent imports
import org.opengis.coverage.grid.GridEnvelope;
-import org.opengis.coverage.grid.GridCoordinates;
/**
@@ -46,12 +45,16 @@ import org.opengis.coverage.grid.GridCoordinates;
*
* {@code GridExtent} instances are unmodifiable, so they can be shared between different {@link GridGeometry} instances.
*
+ * <div class="note"><b>Upcoming API generalization:</b>
+ * this class may implement the {@code GridEnvelope} interface in a future Apache SIS version.
+ * This is pending <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>.</div>
+ *
* @author Martin Desruisseaux (IRD, Geomatys)
* @version 1.0
* @since 1.0
* @module
*/
-public class GridExtent implements GridEnvelope, Serializable {
+public class GridExtent implements Serializable {
/**
* Serial number for inter-operability with different versions.
*/
@@ -62,18 +65,18 @@ public class GridExtent implements GridEnvelope, Serializable {
* while the last half contains maximum ordinates (<strong>inclusive</strong>). Note that the
* later is the opposite of Java2D usage but conform to ISO specification.
*/
- private final int[] ordinates;
+ private final long[] ordinates;
/**
* Creates a new array of coordinates with the given number of dimensions.
*
* @throws IllegalArgumentException if the given number of dimensions is excessive.
*/
- private static int[] allocate(final int dimension) throws IllegalArgumentException {
+ private static long[] allocate(final int dimension) throws IllegalArgumentException {
if (dimension > Integer.MAX_VALUE / 2) {
throw new IllegalArgumentException(Errors.format(Errors.Keys.ExcessiveNumberOfDimensions_1, dimension));
}
- return new int[dimension << 1];
+ return new long[dimension << 1];
}
/**
@@ -83,11 +86,11 @@ public class GridExtent implements GridEnvelope, Serializable {
* @throws IllegalArgumentException if a coordinate value in the low part is
* greater than the corresponding coordinate value in the high part.
*/
- private static void checkCoherence(final int[] ordinates) throws IllegalArgumentException {
+ private static void checkCoherence(final long[] ordinates) throws IllegalArgumentException {
final int dimension = ordinates.length >>> 1;
for (int i=0; i<dimension; i++) {
- final int lower = ordinates[i];
- final int upper = ordinates[i + dimension];
+ final long lower = ordinates[i];
+ final long upper = ordinates[i + dimension];
if (lower > upper) {
throw new IllegalArgumentException(Resources.format(
Resources.Keys.IllegalGridEnvelope_3, i, lower, upper));
@@ -123,7 +126,7 @@ public class GridExtent implements GridEnvelope, Serializable {
* @see #getLow()
* @see #getHigh()
*/
- public GridExtent(final int[] low, final int[] high, final boolean isHighIncluded) {
+ public GridExtent(final long[] low, final long[] high, final boolean isHighIncluded) {
ArgumentChecks.ensureNonNull("high", high);
final int dimension = high.length;
if (low != null && low.length != dimension) {
@@ -181,7 +184,6 @@ public class GridExtent implements GridEnvelope, Serializable {
*
* @return the number of dimensions.
*/
- @Override
public final int getDimension() {
return ordinates.length >>> 1;
}
@@ -191,9 +193,11 @@ public class GridExtent implements GridEnvelope, Serializable {
* The sequence contains a minimum value for each dimension of the grid coverage.
*
* @return the valid minimum grid coordinates, inclusive.
+ *
+ * @todo Pending resolution of <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>
+ * before to become public API, in order to use the interface in return type.
*/
- @Override
- public GridCoordinates getLow() {
+ GridCoordinatesView getLow() {
return new GridCoordinatesView(ordinates, 0);
}
@@ -202,9 +206,11 @@ public class GridExtent implements GridEnvelope, Serializable {
* The sequence contains a maximum value for each dimension of the grid coverage.
*
* @return the valid maximum grid coordinates, <strong>inclusive</strong>.
+ *
+ * @todo Pending resolution of <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>
+ * before to become public API, in order to use the interface in return type.
*/
- @Override
- public GridCoordinates getHigh() {
+ GridCoordinatesView getHigh() {
return new GridCoordinatesView(ordinates, getDimension());
}
@@ -219,8 +225,7 @@ public class GridExtent implements GridEnvelope, Serializable {
* @see #getLow()
* @see #getHigh(int)
*/
- @Override
- public int getLow(final int index) {
+ public long getLow(final int index) {
ArgumentChecks.ensureValidIndex(getDimension(), index);
return ordinates[index];
}
@@ -236,8 +241,7 @@ public class GridExtent implements GridEnvelope, Serializable {
* @see #getHigh()
* @see #getLow(int)
*/
- @Override
- public int getHigh(final int index) {
+ public long getHigh(final int index) {
final int dimension = getDimension();
ArgumentChecks.ensureValidIndex(dimension, index);
return ordinates[index + dimension];
@@ -251,16 +255,15 @@ public class GridExtent implements GridEnvelope, Serializable {
* @return the span at the given dimension.
* @throws IndexOutOfBoundsException if the given index is negative or is equals or greater
* than the {@linkplain #getDimension() grid dimension}.
- * @throws ArithmeticException if the span is too large for the {@code int} primitive type.
+ * @throws ArithmeticException if the span is too large for the {@code long} primitive type.
*
* @see #getLow(int)
* @see #getHigh(int)
*/
- @Override
- public int getSpan(final int index) {
+ public long getSpan(final int index) {
final int dimension = getDimension();
ArgumentChecks.ensureValidIndex(dimension, index);
- return Math.toIntExact(ordinates[dimension + index] - (ordinates[index] - 1L));
+ return Math.incrementExact(Math.subtractExact(ordinates[dimension + index], ordinates[index]));
}
/**
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index bde543a..ac6777c 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -35,9 +35,6 @@ import org.apache.sis.internal.raster.Resources;
import org.apache.sis.util.resources.Errors;
import org.apache.sis.util.ArgumentChecks;
-// Branch-dependent imports
-import org.opengis.coverage.grid.GridEnvelope;
-
/**
* Valid extent of grid coordinates together with the transform from those grid coordinates
@@ -217,6 +214,10 @@ public class GridGeometry implements Serializable {
* (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
* to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.</div>
*
+ * <div class="note"><b>Upcoming API generalization:</b>
+ * the {@code extent} type of this method may be changed to {@code GridEnvelope} interface in a future Apache SIS version.
+ * This is pending <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>.</div>
+ *
* @param extent the valid extent of grid coordinates, or {@code null} if unknown.
* @param anchor {@linkplain PixelInCell#CELL_CENTER Cell center} for OGC conventions or
* {@linkplain PixelInCell#CELL_CORNER cell corner} for Java2D/JAI conventions.
@@ -227,7 +228,7 @@ public class GridGeometry implements Serializable {
* @throws TransformException if the math transform can not compute the geospatial envelope or the resolution
* from the grid envelope.
*/
- public GridGeometry(final GridEnvelope extent, final PixelInCell anchor, final MathTransform gridToCRS,
+ public GridGeometry(final GridExtent extent, final PixelInCell anchor, final MathTransform gridToCRS,
final CoordinateReferenceSystem crs) throws TransformException
{
if (gridToCRS != null) {
@@ -240,12 +241,12 @@ public class GridGeometry implements Serializable {
} else if (crs == null) {
ArgumentChecks.ensureNonNull("extent", extent);
}
- this.extent = GridExtent.castOrCopy(extent);
+ this.extent = extent;
this.gridToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CENTER);
this.cornerToCRS = PixelTranslation.translate(gridToCRS, anchor, PixelInCell.CELL_CORNER);
GeneralEnvelope env = null;
if (extent != null && gridToCRS != null) {
- env = this.extent.toCRS(cornerToCRS);
+ env = extent.toCRS(cornerToCRS);
env.setCoordinateReferenceSystem(crs);
} else if (crs != null) {
env = new GeneralEnvelope(crs);
@@ -262,7 +263,7 @@ public class GridGeometry implements Serializable {
if (mat != null) {
resolution = resolution(mat, 1);
} else if (extent != null && gridToCRS != null) {
- resolution = resolution(gridToCRS.derivative(this.extent.getCentroid()), 0);
+ resolution = resolution(gridToCRS.derivative(extent.getCentroid()), 0);
} else {
resolution = null;
}
@@ -362,11 +363,15 @@ public class GridGeometry implements Serializable {
* for {@link java.awt.image.BufferedImage}, but may be non-zero for arbitrary {@link RenderedImage}.
* A grid with 512 cells can have a minimum coordinate of 0 and maximum of 511.
*
+ * <div class="warning"><b>Upcoming API generalization:</b>
+ * the return type of this method may be changed to {@code GridEnvelope} interface in a future Apache SIS version.
+ * This is pending <a href="https://github.com/opengeospatial/geoapi/issues/36">GeoAPI update</a>.</div>
+ *
* @return the valid extent of grid coordinates (never {@code null}).
* @throws IncompleteGridGeometryException if this grid geometry has no extent —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #EXTENT})</code> returned {@code false}.
*/
- public GridEnvelope getExtent() throws IncompleteGridGeometryException {
+ public GridExtent getExtent() throws IncompleteGridGeometryException {
if (extent != null) {
return extent;
}
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
index de9b0d3..8950546 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -28,9 +28,6 @@ import org.junit.Test;
import static org.apache.sis.test.ReferencingAssert.*;
-// Branch-dependent imports
-import org.opengis.coverage.grid.GridEnvelope;
-
/**
* Tests the {@link GridGeometry} implementation.
@@ -44,7 +41,7 @@ public final strictfp class GridGeometryTest extends TestCase {
/**
* Verifies grid extent coordinates.
*/
- private static void assertExtentEquals(final GridEnvelope extent, final int[] low, final int[] high) {
+ private static void assertExtentEquals(final GridExtent extent, final long[] low, final long[] high) {
assertArrayEquals("extent.low", low, extent.getLow() .getCoordinateValues());
assertArrayEquals("extent.high", high, extent.getHigh().getCoordinateValues());
}
@@ -56,8 +53,8 @@ public final strictfp class GridGeometryTest extends TestCase {
*/
@Test
public void testSimple() throws TransformException {
- final int[] low = new int[] {100, 300, 3, 6};
- final int[] high = new int[] {200, 400, 4, 7};
+ final long[] low = new long[] {100, 300, 3, 6};
+ final long[] high = new long[] {200, 400, 4, 7};
final GridExtent extent = new GridExtent(low, high, true);
final MathTransform identity = MathTransforms.identity(4);
final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CORNER, identity, null);
@@ -102,8 +99,8 @@ public final strictfp class GridGeometryTest extends TestCase {
*/
@Test
public void testShifted() throws TransformException {
- final int[] low = new int[] { 0, 0, 2};
- final int[] high = new int[] {99, 199, 4};
+ final long[] low = new long[] { 0, 0, 2};
+ final long[] high = new long[] {99, 199, 4};
final GridExtent extent = new GridExtent(low, high, true);
final MathTransform identity = MathTransforms.identity(3);
final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, identity, null);
@@ -147,8 +144,8 @@ public final strictfp class GridGeometryTest extends TestCase {
@Test
public void testNonLinear() throws TransformException {
final GridExtent extent = new GridExtent(
- new int[] {0, 0, 2, 6},
- new int[] {100, 200, 3, 9}, false);
+ new long[] {0, 0, 2, 6},
+ new long[] {100, 200, 3, 9}, false);
final MathTransform horizontal = MathTransforms.linear(Matrices.create(3, 3, new double[] {
0.5, 0, 12,
0, 0.25, -2,
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 24/31: First draft of a GeoTIFF reader capable to compute the
GridGeometry.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit ceca8a2bb9c0298714b8cc07a65e943c86921e13
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed Jun 6 14:54:43 2018 +0000
First draft of a GeoTIFF reader capable to compute the GridGeometry.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833032 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/coverage/grid/GridGeometry.java | 25 ++
.../apache/sis/coverage/grid/PixelTranslation.java | 62 ++--
.../apache/sis/coverage/grid/GridGeometryTest.java | 25 +-
.../sis/coverage/grid/PixelTranslationTest.java | 21 +-
.../apache/sis/util/logging/WarningListeners.java | 8 +-
.../org/apache/sis/internal/geotiff/Resources.java | 5 +
.../sis/internal/geotiff/Resources.properties | 1 +
.../sis/internal/geotiff/Resources_fr.properties | 1 +
.../org/apache/sis/storage/geotiff/CRSBuilder.java | 126 ++++---
.../sis/storage/geotiff/GridGeometryBuilder.java | 368 +++++++++++++++++++++
.../sis/storage/geotiff/ImageFileDirectory.java | 184 +++++------
.../apache/sis/storage/geotiff/Localization.java | 118 +------
12 files changed, 619 insertions(+), 325 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index ac6777c..30dc210 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -16,6 +16,7 @@
*/
package org.apache.sis.coverage.grid;
+import java.util.Arrays;
import java.util.Objects;
import java.io.Serializable;
import java.awt.image.RenderedImage; // For javadoc only.
@@ -287,6 +288,30 @@ public class GridGeometry implements Serializable {
}
/**
+ * Creates a grid geometry with only an extent and a coordinate reference system.
+ * This constructor can be used when the <cite>grid to CRS</cite> transform is unknown.
+ *
+ * @param extent the valid extent of grid coordinates, or {@code null} if unknown.
+ * @param crs the coordinate reference system of the "real world" coordinates, or {@code null} if unknown.
+ * @throws NullPointerException if {@code extent} and {@code crs} arguments are both null.
+ */
+ public GridGeometry(final GridExtent extent, final CoordinateReferenceSystem crs) {
+ this.extent = extent;
+ gridToCRS = null;
+ cornerToCRS = null;
+ resolution = null;
+ nonLinears = 0;
+ if (crs == null) {
+ ArgumentChecks.ensureNonNull("extent", extent);
+ envelope = null;
+ } else {
+ final double[] coords = new double[crs.getCoordinateSystem().getDimension()];
+ Arrays.fill(coords, Double.NaN);
+ envelope = new ImmutableEnvelope(coords, coords, crs);
+ }
+ }
+
+ /**
* Returns the number of dimensions of the <em>grid</em>. This is typically the same
* than the number of {@linkplain #getEnvelope() envelope} dimensions or the number of
* {@linkplain #getCoordinateReferenceSystem() coordinate reference system} dimensions,
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index e1598a3..d63564b 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -55,11 +55,11 @@ import org.apache.sis.referencing.operation.transform.MathTransforms;
* {@preformat java
* final AffineTransform gridToCRS = ...;
* final PixelOrientation current = PixelOrientation.CENTER;
- * final PixelOrientation expected = PixelOrientation.UPPER_LEFT;
+ * final PixelOrientation desired = PixelOrientation.UPPER_LEFT;
*
- * // Switch the transform from 'current' to 'expected' convention.
+ * // Switch the transform from 'current' to 'desired' convention.
* final PixelTranslation source = getPixelTranslation(current);
- * final PixelTranslation target = getPixelTranslation(expected);
+ * final PixelTranslation target = getPixelTranslation(desired);
* gridToCRS.translate(target.dx - source.dx,
* target.dy - source.dy);
* }
@@ -224,30 +224,29 @@ public final class PixelTranslation extends Static implements Serializable {
* If the two given conventions are the same, then this method returns the given transform unchanged.
*
* <div class="note"><b>Example:</b>
- * if a given {@code gridToCRS} was mapping the pixel corner to "real world" coordinates, then a call to
- * <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER}, {@link PixelInCell#CELL_CENTER})</code>
- * will return a new transform performing the following steps:
- * <ol>
- * <li>Translate the grid coordinates by +0.5, so that the (0,0) coordinate in "pixel center" convention
- * map to (½,½) in "pixel corner" convention.</li>
- * <li>Apply the transform described by the "pixel corner" convention.</li>
- * </ol></div>
+ * if a given {@code gridToCRS} transform was mapping the <em>cell corner</em> to "real world" coordinates, then a call to
+ * <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER CELL_CORNER}, {@link PixelInCell#CELL_CENTER CELL_CENTER})</code>
+ * will return a new transform performing the following steps: first convert grid coordinates from <var>cell center</var>
+ * convention ({@code desired}) to <var>cell corner</var> convention ({@code current}), then concatenate the given
+ * {@code gridToCRS} transform which was designed for the <em>cell corner</em> convention.
+ * The above-cited <var>cell center</var> → <var>cell corner</var> conversion is done by translating the grid coordinates
+ * by +½, because the grid coordinates (0,0) relative to cell center is (½,½) relative to cell corner.</div>
*
* If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
- * Otherwise {@code current} and {@code expected} arguments must be non-null.
+ * Otherwise {@code current} and {@code desired} arguments must be non-null.
*
* @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
- * @param expected the pixel orientation of the desired transform.
- * @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
- * @throws IllegalArgumentException if {@code current} or {@code expected} is not a known code list value.
+ * @param desired the pixel orientation of the desired transform.
+ * @return the translation from {@code current} to {@code desired}, or {@code null} if {@code gridToCRS} was null.
+ * @throws IllegalArgumentException if {@code current} or {@code desired} is not a known code list value.
*/
- public static MathTransform translate(final MathTransform gridToCRS, final PixelInCell current, final PixelInCell expected) {
- if (gridToCRS == null || expected.equals(current)) {
+ public static MathTransform translate(final MathTransform gridToCRS, final PixelInCell current, final PixelInCell desired) {
+ if (gridToCRS == null || desired.equals(current)) {
return gridToCRS;
}
final int dimension = gridToCRS.getSourceDimensions();
- final double offset = getPixelTranslation(expected) - getPixelTranslation(current);
+ final double offset = getPixelTranslation(desired) - getPixelTranslation(current);
final int ci; // Cache index.
if (offset == -0.5) {
ci = 2*dimension - 2;
@@ -275,32 +274,27 @@ public final class PixelTranslation extends Static implements Serializable {
* The given transform can have any number of input and output dimensions, but only two of them will be converted.
*
* <div class="note"><b>Example:</b>
- * if a given {@code gridToCRS} was mapping the upper-left corner to "real world" coordinates, then a call to
- * <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT}, {@link PixelOrientation#CENTER}, 0, 1)</code>
- * will return a new transform performing the following steps:
- * <ol>
- * <li>Translate the grid coordinates by +0.5, so that the (0,0) coordinate in "pixel center" convention
- * map to (½,½) in "upper-left corner" convention. This translation is applied only in the specified
- * grid (source) dimensions; all other dimensions (if any) are left unchanged.</li>
- * <li>Apply the transform described by the "upper-left corner" convention.</li>
- * </ol></div>
+ * if a given {@code gridToCRS} transform was mapping the upper-left corner to "real world" coordinates, then a call to
+ * <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT UPPER_LEFT}, {@link PixelOrientation#CENTER CENTER}, 0, 1)</code>
+ * will return a new transform translating grid coordinates by +0.5 before to apply the given {@code gridToCRS} transform.
+ * See example in above {@link #translate(MathTransform, PixelInCell, PixelInCell) translate} method for more details.</div>
*
* If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
- * Otherwise {@code current} and {@code expected} arguments must be non-null.
+ * Otherwise {@code current} and {@code desired} arguments must be non-null.
*
* @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
- * @param expected the pixel orientation of the desired transform.
+ * @param desired the pixel orientation of the desired transform.
* @param xDimension the dimension of <var>x</var> coordinates (pixel columns). Often 0.
* @param yDimension the dimension of <var>y</var> coordinates (pixel rows). Often 1.
- * @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
- * @throws IllegalArgumentException if {@code current} or {@code expected} is not a known code list value.
+ * @return the translation from {@code current} to {@code desired}, or {@code null} if {@code gridToCRS} was null.
+ * @throws IllegalArgumentException if {@code current} or {@code desired} is not a known code list value.
*/
public static MathTransform translate(final MathTransform gridToCRS,
- final PixelOrientation current, final PixelOrientation expected,
+ final PixelOrientation current, final PixelOrientation desired,
final int xDimension, final int yDimension)
{
- if (gridToCRS == null || expected.equals(current)) {
+ if (gridToCRS == null || desired.equals(current)) {
return gridToCRS;
}
final int dimension = gridToCRS.getSourceDimensions();
@@ -314,7 +308,7 @@ public final class PixelTranslation extends Static implements Serializable {
throw illegalDimension("xDimension", "yDimension");
}
final PixelTranslation source = getPixelTranslation(current);
- final PixelTranslation target = getPixelTranslation(expected);
+ final PixelTranslation target = getPixelTranslation(desired);
final double dx = target.dx - source.dx;
final double dy = target.dy - source.dy;
MathTransform mt;
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
index 8950546..164907e 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -19,6 +19,7 @@ package org.apache.sis.coverage.grid;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
+import org.apache.sis.referencing.operation.matrix.Matrix3;
import org.apache.sis.referencing.operation.matrix.Matrix4;
import org.apache.sis.referencing.operation.matrix.Matrices;
import org.apache.sis.referencing.operation.transform.MathTransforms;
@@ -52,7 +53,7 @@ public final strictfp class GridGeometryTest extends TestCase {
* @throws TransformException if an error occurred while using the "grid to CRS" transform.
*/
@Test
- public void testSimple() throws TransformException {
+ public void testFromPixelCorner() throws TransformException {
final long[] low = new long[] {100, 300, 3, 6};
final long[] high = new long[] {200, 400, 4, 7};
final GridExtent extent = new GridExtent(low, high, true);
@@ -98,7 +99,7 @@ public final strictfp class GridGeometryTest extends TestCase {
* @throws TransformException if an error occurred while using the "grid to CRS" transform.
*/
@Test
- public void testShifted() throws TransformException {
+ public void testFromPixelCenter() throws TransformException {
final long[] low = new long[] { 0, 0, 2};
final long[] high = new long[] {99, 199, 4};
final GridExtent extent = new GridExtent(low, high, true);
@@ -137,6 +138,26 @@ public final strictfp class GridGeometryTest extends TestCase {
}
/**
+ * Tests construction from a <cite>grid to CRS</cite> having a 0.5 pixel translation.
+ * This translation happens in transform mapping <cite>pixel center</cite> when the
+ * corresponding <cite>pixel corner</cite> transformation is identity.
+ *
+ * @throws TransformException if an error occurred while using the "grid to CRS" transform.
+ */
+ @Test
+ public void testShifted() throws TransformException {
+ final long[] low = new long[] {100, 300};
+ final long[] high = new long[] {200, 400};
+ final GridExtent extent = new GridExtent(low, high, true);
+ final MathTransform identity = MathTransforms.linear(new Matrix3(
+ 1, 0, 0.5,
+ 0, 1, 0.5,
+ 0, 0, 1));
+ final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, identity, null);
+ assertTrue("gridToCRS.isIdentity", grid.getGridToCRS(PixelInCell.CELL_CORNER).isIdentity());
+ }
+
+ /**
* Tests construction with a non-linear component in the transform.
*
* @throws TransformException if an error occurred while using the "grid to CRS" transform.
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java
index cefeeb7..e4498f3 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java
@@ -19,6 +19,7 @@ package org.apache.sis.coverage.grid;
import org.opengis.metadata.spatial.PixelOrientation;
import org.opengis.referencing.datum.PixelInCell;
import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.matrix.Matrix3;
import org.apache.sis.referencing.operation.matrix.Matrix4;
@@ -52,20 +53,34 @@ public final strictfp class PixelTranslationTest extends TestCase {
}
/**
- * Tests {@link PixelTranslation#translate(MathTransform, PixelInCell, PixelInCell)}.
+ * Tests {@link PixelTranslation#translate(MathTransform, PixelInCell, PixelInCell)} with an identity transform.
+ * If grid coordinates (0,0) in "pixel center" convention map to (0,0) in "real world" coordinates,
+ * then grid coordinates (0,0) in "pixel corner" convention shall map to (-½, -½) in real world.
+ * That way, grid coordinates (½,½) in "pixel corner" convention still map to (0,0) in real world.
+ *
+ * @throws TransformException if an error occurred while transforming a test point.
*/
@Test
- public void testTranslatePixelInCell() {
+ public void testTranslatePixelInCell() throws TransformException {
final MathTransform mt = centerToCorner(3);
assertMatrixEquals("center → corner", new Matrix4(
1, 0, 0, -0.5,
0, 1, 0, -0.5,
0, 0, 1, -0.5,
0, 0, 0, 1), MathTransforms.getMatrix(mt), STRICT);
+ /*
+ * Just for making clear what we explained in javadoc comment: the real world (0,0,0) coordinates was in the center
+ * of cell (0,0,0). After we switched to "cell corner" convention, that center is (½,½,½) in grid coordinates but
+ * should still map (0,0,0) in "real world" coordinates.
+ */
+ final double[] coordinates = new double[] {0.5, 0.5, 0.5};
+ mt.transform(coordinates, 0, coordinates, 0, 1);
+ assertArrayEquals(new double[3], coordinates, STRICT);
}
/**
* Tests {@link PixelTranslation#translate(MathTransform, PixelOrientation, PixelOrientation, int, int)}.
+ * See {@link #testTranslatePixelInCell()} for discussion on expected values.
*/
@Test
public void testTranslatePixelOrientation() {
@@ -76,7 +91,7 @@ public final strictfp class PixelTranslationTest extends TestCase {
0, 0, 1), MathTransforms.getMatrix(mt), STRICT);
mt = PixelTranslation.translate(MathTransforms.identity(3), PixelOrientation.LOWER_LEFT, PixelOrientation.CENTER, 1, 2);
- assertMatrixEquals("center → corner", new Matrix4(
+ assertMatrixEquals("corner → center", new Matrix4(
1, 0, 0, 0.0,
0, 1, 0, +0.5,
0, 0, 1, -0.5,
diff --git a/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java b/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
index 47fcebd..ac8709b 100644
--- a/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
+++ b/core/sis-utility/src/main/java/org/apache/sis/util/logging/WarningListeners.java
@@ -71,7 +71,7 @@ import org.apache.sis.internal.util.UnmodifiableArrayList;
public class WarningListeners<S> implements Localized {
/**
* The declared source of warnings. This is not necessarily the real source,
- * but this is the source that the implementor wants to declare as public API.
+ * but this is the source that the implementer wants to declare as public API.
*/
private final S source;
@@ -95,7 +95,7 @@ public class WarningListeners<S> implements Localized {
* unless at least one listener is {@linkplain #addWarningListener registered}.
*
* @param source the declared source of warnings. This is not necessarily the real source,
- * but this is the source that the implementor wants to declare as public API.
+ * but this is the source that the implementer wants to declare as public API.
*/
public WarningListeners(final S source) {
ArgumentChecks.ensureNonNull("source", source);
@@ -108,7 +108,7 @@ public class WarningListeners<S> implements Localized {
* be duplicated for concurrency reasons.
*
* @param source the declared source of warnings. This is not necessarily the real source,
- * but this is the source that the implementor wants to declare as public API.
+ * but this is the source that the implementer wants to declare as public API.
* @param other the existing instance from which to copy the listeners, or {@code null} if none.
*
* @since 0.8
@@ -231,7 +231,7 @@ public class WarningListeners<S> implements Localized {
* If the stack trace is desired, then users can either:
* <ul>
* <li>invoke {@code warning(LogRecord)} directly, or</li>
- * <li>override {@code warning(LogRecord)} and invoke {@link LogRecord#setThrown(Throwable)} explicitely, or</li>
+ * <li>override {@code warning(LogRecord)} and invoke {@link LogRecord#setThrown(Throwable)} explicitly, or</li>
* <li>register a listener which will log the record itself.</li>
* </ul>
*
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
index 9bc187a..278ed2d 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.java
@@ -61,6 +61,11 @@ public final class Resources extends IndexedResourceBundle {
}
/**
+ * Can not compute the grid geometry of “{0}” TIFF file.
+ */
+ public static final short CanNotComputeGridGeometry_1 = 26;
+
+ /**
* TIFF file “{0}” has circular references in its chain of images.
*/
public static final short CircularImageReference_1 = 1;
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
index aa75321..219bc40 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources.properties
@@ -19,6 +19,7 @@
# Resources in this file are for "sis-geotiff" usage only and should not be used by any other module.
# For resources shared by all modules in the Apache SIS project, see "org.apache.sis.util.resources" package.
#
+CanNotComputeGridGeometry_1 = Can not compute the grid geometry of \u201c{0}\u201d TIFF file.
CircularImageReference_1 = TIFF file \u201c{0}\u201d has circular references in its chain of images.
ConstantValueRequired_3 = Apache SIS implementation requires that all \u201c{0}\u201d elements have the same value, but the element found in \u201c{1}\u201d are {2}.
ComputedValueForAttribute_2 = No value specified for the \u201c{0}\u201d TIFF tag. Computed the {1} value from other tags.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
index 669605a..b778c54 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/internal/geotiff/Resources_fr.properties
@@ -24,6 +24,7 @@
# U+202F NARROW NO-BREAK SPACE before ; ! and ?
# U+00A0 NO-BREAK SPACE before :
#
+CanNotComputeGridGeometry_1 = Ne peut pas calculer la g\u00e9om\u00e9trie de la grille du fichier TIFF \u00ab\u202f{0}\u202f\u00bb.
CircularImageReference_1 = Le fichier TIFF \u00ab\u202f{0}\u202f\u00bb a des r\u00e9f\u00e9rences circulaires dans sa cha\u00eene d\u2019images.
ConstantValueRequired_3 = L\u2019impl\u00e9mentation de Apache SIS requiert que tous les \u00e9l\u00e9ments de \u00ab\u202f{0}\u202f\u00bb aient la m\u00eame valeur, mais les \u00e9l\u00e9ments trouv\u00e9s dans \u00ab\u202f{1}\u202f\u00bb sont {2}.
ComputedValueForAttribute_2 = Aucune valeur n\u2019a \u00e9t\u00e9 sp\u00e9cifi\u00e9e pour le tag TIFF \u00ab\u202f{0}\u202f\u00bb. La valeur {1} a \u00e9t\u00e9 calcul\u00e9e \u00e0 partir des autres tags.
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
index 5cffea1..237fa2d 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/CRSBuilder.java
@@ -35,7 +35,6 @@ import javax.measure.quantity.Length;
import org.opengis.metadata.Identifier;
import org.opengis.metadata.spatial.CellGeometry;
-import org.opengis.metadata.spatial.PixelOrientation;
import org.opengis.parameter.ParameterValueGroup;
import org.opengis.parameter.ParameterNotFoundException;
import org.opengis.referencing.IdentifiedObject;
@@ -64,7 +63,6 @@ import org.apache.sis.internal.metadata.WKTKeywords;
import org.apache.sis.internal.referencing.CoordinateOperations;
import org.apache.sis.internal.referencing.NilReferencingObject;
import org.apache.sis.internal.referencing.ReferencingUtilities;
-import org.apache.sis.internal.storage.MetadataBuilder;
import org.apache.sis.internal.system.DefaultFactories;
import org.apache.sis.internal.util.Constants;
import org.apache.sis.internal.util.Utilities;
@@ -203,7 +201,7 @@ final class CRSBuilder {
* so we can easily detect at the end of the parsing process which GeoTIFF keys were
* unrecognized or ignored.
*/
- private final Map<Short,Object> geoKeys = new HashMap<>();
+ private final Map<Short,Object> geoKeys;
/**
* Factory for creating geodetic objects from EPSG codes, or {@code null} if not yet fetched.
@@ -247,6 +245,19 @@ final class CRSBuilder {
private Identifier lastName;
/**
+ * Suggested value for a general description of the transformation form grid coordinates to "real world" coordinates.
+ * This is computed by {@link #build(Vector, Vector, String)} and made available as additional information to the caller.
+ */
+ public String description;
+
+ /**
+ * {@code POINT} if {@link GeoKeys#RasterType} is {@link GeoCodes#RasterPixelIsPoint},
+ * {@code AREA} if it is {@link GeoCodes#RasterPixelIsArea}, or null if unspecified.
+ * This is computed by {@link #build(Vector, Vector, String)} and made available to the caller.
+ */
+ public CellGeometry cellGeometry;
+
+ /**
* {@code true} when an exception has been thrown but this {@code CRSBuilder} already reported a warning,
* so there is no need for the caller to report a warning again. {@code CRSBuilder} sometime reports warnings
* itself when it can provide a better warning message than what the caller can do.
@@ -260,6 +271,7 @@ final class CRSBuilder {
*/
CRSBuilder(final Reader reader) {
this.reader = reader;
+ geoKeys = new HashMap<>();
}
/**
@@ -483,7 +495,7 @@ final class CRSBuilder {
/**
* Verifies that a value found in the GeoTIFF file is approximatively equal to the expected value.
- * This method is invoked when a CRS component is defined both explicitely and by EPSG code,
+ * This method is invoked when a CRS component is defined both explicitly and by EPSG code,
* in which case we expect the given value to be equal to the value fetched from the EPSG database.
* If the values do not match, a warning is reported and the caller should use the EPSG value.
*
@@ -554,6 +566,8 @@ final class CRSBuilder {
/**
* Decodes all the given GeoTIFF keys, then creates a coordinate reference system.
* An overview of the key directory structure is given in {@linkplain CRSBuilder class javadoc}.
+ * The {@link #description} and {@link #cellGeometry} fields are set as a side-effect.
+ * A warning is emitted if any GeoTIFF tags were ignored.
*
* @param keyDirectory the GeoTIFF keys to be associated to values. Can not be null.
* @param numericParameters a vector of {@code double} parameters, or {@code null} if none.
@@ -566,7 +580,7 @@ final class CRSBuilder {
* @throws FactoryException if an error occurred during objects creation with the factories.
*/
@SuppressWarnings("null")
- final CoordinateReferenceSystem build(final Vector keyDirectory, final Vector numericParameters, final String asciiParameters)
+ public CoordinateReferenceSystem build(final Vector keyDirectory, final Vector numericParameters, final String asciiParameters)
throws FactoryException
{
final int numberOfKeys;
@@ -703,80 +717,44 @@ final class CRSBuilder {
geoKeys.put(key, value);
}
/*
- * At this point we finished copying all GeoTIFF keys in 'CRSBuilder.geoKeys' map.
+ * At this point we finished copying all GeoTIFF keys in the 'geoKeys' map. Before to create the CRS,
+ * store a few metadata. The first one is an ASCII reference to published documentation on the overall
+ * configuration of the GeoTIFF file. In practice it seems to be often the projected CRS name, despite
+ * GeoKeys.PCSCitation being already for that purpose.
+ */
+ description = getAsString(GeoKeys.Citation);
+ int code = getAsInteger(GeoKeys.RasterType);
+ switch (code) {
+ case GeoCodes.undefined: break;
+ case GeoCodes.RasterPixelIsArea: cellGeometry = CellGeometry.AREA; break;
+ case GeoCodes.RasterPixelIsPoint: cellGeometry = CellGeometry.POINT; break;
+ default: invalidValue(GeoKeys.RasterType, code); break;
+ }
+ /*
* First create the main coordinate reference system, as determined by 'ModelType'.
* Then if a vertical CRS exists and the main CRS is not geocentric (in which case
* adding a vertical CRS would make no sense), create a three-dimensional compound CRS.
*/
- CoordinateReferenceSystem crs;
+ CoordinateReferenceSystem crs = null;
final int crsType = getAsInteger(GeoKeys.ModelType);
switch (crsType) {
- case GeoCodes.undefined: return null;
- case GeoCodes.ModelTypeProjected: crs = createProjectedCRS(); break;
- case GeoCodes.ModelTypeGeocentric: return createGeocentricCRS(); // Ignore vertical CRS.
- case GeoCodes.ModelTypeGeographic: {
- crs = createGeographicCRS(true,
- createUnit(GeoKeys.AngularUnits, GeoKeys.AngularUnitSize, Angle.class, Units.DEGREE));
- break;
- }
- default: {
- warning(Resources.Keys.UnsupportedCoordinateSystemKind_1, crsType);
- return null;
- }
+ case GeoCodes.undefined: break;
+ case GeoCodes.ModelTypeProjected: crs = createProjectedCRS(); break;
+ case GeoCodes.ModelTypeGeocentric: crs = createGeocentricCRS(); break;
+ case GeoCodes.ModelTypeGeographic: crs = createGeographicCRS(); break;
+ default: warning(Resources.Keys.UnsupportedCoordinateSystemKind_1, crsType); break;
}
- final VerticalCRS vertical = createVerticalCRS();
- if (vertical != null) {
- crs = objectFactory().createCompoundCRS(Collections.singletonMap(IdentifiedObject.NAME_KEY, crs.getName()), crs, vertical);
- }
- return crs;
- }
-
- /**
- * Completes ISO 19115 metadata with some GeoTIFF values that are for documentation purposes.
- * Those values do not participate directly to the construction of the Coordinate Reference System objects.
- *
- * <p><b>Pre-requite:</b></p>
- * <ul>
- * <li>{@link #build(Vector, Vector, String)} must have been invoked before this method.</li>
- * <li>{@link ImageFileDirectory} must have filled its part of metadata before to invoke this method.</li>
- * <li>{@link MetadataBuilder#newGridRepresentation(MetadataBuilder.GridType)} should have been invoked
- * with the appropriate {@code GEORECTIFIED} or {@code GEOREFERENCEABLE} type.</li>
- * </ul>
- *
- * After execution, this method emits a warning for unprocessed GeoTIFF tags.
- *
- * @param metadata the helper class where to write metadata values.
- * @throws NumberFormatException if a numeric value was stored as a string and can not be parsed.
- */
- final void complete(final MetadataBuilder metadata) {
- /*
- * ASCII reference to published documentation on the overall configuration of the GeoTIFF file.
- * Often the projected CRS name, despite GeoKeys.PCSCitation being already for that purpose.
- * Checked first because this code is unlikely to throw an exception, while other parsings may
- * interrupt this method with an exception.
- */
- final String title = getAsString(GeoKeys.Citation);
- if (title != null) {
- metadata.setGridToCRS(title);
- }
- /*
- * Whether the pixel value is thought of as filling the cell area or is considered as point measurements at
- * the vertices of the grid (not in the interior of a cell). This is determined by the value associated to
- * GeoKeys.RasterType, which can be GeoCodes.RasterPixelIsArea or GeoCodes.RasterPixelIsPoint.
- */
- CellGeometry cg = null;
- PixelOrientation po = null;
- int code = getAsInteger(GeoKeys.RasterType);
- switch (code) {
- case GeoCodes.undefined: break;
- case GeoCodes.RasterPixelIsArea: cg = CellGeometry.AREA; po = PixelOrientation.CENTER; break;
- case GeoCodes.RasterPixelIsPoint: cg = CellGeometry.POINT; po = PixelOrientation.UPPER_LEFT; break;
- default: invalidValue(GeoKeys.RasterType, code); break;
+ if (crsType != GeoCodes.ModelTypeGeocentric) {
+ final VerticalCRS vertical = createVerticalCRS();
+ if (crs == null) {
+ crs = vertical;
+ } else if (vertical != null) {
+ crs = objectFactory().createCompoundCRS(Collections.singletonMap(IdentifiedObject.NAME_KEY, crs.getName()), crs, vertical);
+ }
}
- metadata.setCellGeometry(cg);
- metadata.setPointInPixel(po);
/*
- * Build a list of remaining GeoKeys.
+ * At this point we finished parsing all GeoTIFF tags, both for metadata purpose or for CRS construction.
+ * Emit a warning for unprocessed GeoTIFF tags. A single warning is emitted for all ignored tags.
*/
if (!geoKeys.isEmpty()) {
final StringJoiner joiner = new StringJoiner(", ");
@@ -785,6 +763,7 @@ final class CRSBuilder {
}
warning(Resources.Keys.IgnoredGeoKeys_1, joiner.toString());
}
+ return crs;
}
/**
@@ -1216,6 +1195,13 @@ final class CRSBuilder {
}
/**
+ * Creates the main CRS in the case where that CRS is geographic.
+ */
+ private GeographicCRS createGeographicCRS() throws FactoryException {
+ return createGeographicCRS(true, createUnit(GeoKeys.AngularUnits, GeoKeys.AngularUnitSize, Angle.class, Units.DEGREE));
+ }
+
+ /**
* Creates a geographic CRS from an EPSG code or from user-defined parameters.
* The GeoTIFF values used by this method are:
*
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
new file mode 100644
index 0000000..5badf79
--- /dev/null
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/GridGeometryBuilder.java
@@ -0,0 +1,368 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.storage.geotiff;
+
+import java.util.NoSuchElementException;
+import org.opengis.util.FactoryException;
+import org.opengis.util.NoSuchIdentifierException;
+import org.opengis.metadata.spatial.CellGeometry;
+import org.opengis.metadata.spatial.PixelOrientation;
+import org.opengis.parameter.ParameterNotFoundException;
+import org.opengis.referencing.datum.PixelInCell;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.operation.MathTransform;
+import org.opengis.referencing.operation.TransformException;
+import org.opengis.referencing.NoSuchAuthorityCodeException;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
+import org.apache.sis.referencing.operation.matrix.MatrixSIS;
+import org.apache.sis.referencing.operation.matrix.Matrices;
+import org.apache.sis.internal.storage.MetadataBuilder;
+import org.apache.sis.internal.geotiff.Resources;
+import org.apache.sis.internal.util.DoubleDouble;
+import org.apache.sis.coverage.grid.GridGeometry;
+import org.apache.sis.coverage.grid.GridExtent;
+import org.apache.sis.math.Vector;
+
+
+/**
+ * Helper class for creating a {@link GridGeometry} from GeoTIFF data.
+ * The coordinate reference system part is built by {@link CRSBuilder}.
+ *
+ * <div class="section">Pixel center versus pixel corner</div>
+ * The policy about whether the conversion map pixel corner or pixel center if GeoTIFF files does not seem
+ * totally clear. But the practice at least with GDAL seems to consider the following as equivalent:
+ *
+ * {@preformat text
+ * ModelTiepointTag = (0.0, 0.0, 0.0, -180.0, 90.0, 0.0)
+ * ModelPixelScaleTag = (0.002777777778, 0.002777777778, 0.0)
+ * GeoKeyDirectoryTag:
+ * GTModelTypeGeoKey = 2 (ModelTypeGeographic)
+ * GTRasterTypeGeoKey = 1 (RasterPixelIsArea)
+ * GeographicTypeGeoKey = 4326 (GCS_WGS_84)
+ * }
+ *
+ * and
+ *
+ * {@preformat text
+ * ModelTiepointTag = (-0.5, -0.5, 0.0, -180.0, 90.0, 0.0)
+ * ModelPixelScaleTag = (0.002777777778, 0.002777777778, 0.0)
+ * GeoKeyDirectoryTag:
+ * GTModelTypeGeoKey = 2 (ModelTypeGeographic)
+ * GTRasterTypeGeoKey = 2 (RasterPixelIsPoint)
+ * GeographicTypeGeoKey = 4326 (GCS_WGS_84)
+ * }
+ *
+ * The former is {@link PixelInCell#CELL_CORNER} convention while the later is {@link PixelInCell#CELL_CENTER}.
+ * Note that the translation coefficients in the <cite>grid to CRS</cite> matrix is {@code crs - grid × scale}.
+ * So compared to the {@code CELL_CORNER} case, the {@code CELL_CENTER} case has a translation of +0.5 × scale.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+final class GridGeometryBuilder {
+ /**
+ * The reader for which we will create coordinate reference systems.
+ * This is used for reporting warnings.
+ */
+ private final Reader reader;
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //// ////
+ //// Information to be set by ImageFileDirectory during GeoTIFF file parsing. ////
+ //// ////
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * References the {@link GeoKeys} needed for building the Coordinate Reference System.
+ */
+ public Vector keyDirectory;
+
+ /**
+ * The numeric values referenced by the {@link #keyDirectory}.
+ */
+ public Vector numericParameters;
+
+ /**
+ * The characters referenced by the {@link #keyDirectory}.
+ */
+ public String asciiParameters;
+
+ /**
+ * Raster model tie points. This vector contains ordinate values structured as (I,J,K, X,Y,Z) records.
+ * The (I,J,K) ordinate values specify the point at location (I,J) in raster space with pixel-value K,
+ * and (X,Y,Z) ordinate values specify the point in the Coordinate Reference System. In most cases the
+ * coordinate system is only two-dimensional, in which case both K and Z should be set to zero.
+ */
+ public Vector modelTiePoints;
+
+ /**
+ * The conversion from grid coordinates to CRS coordinates as an affine transform.
+ * The "grid to CRS" transform can be determined in different ways, from simpler to more complex:
+ *
+ * <ul>
+ * <li>By a combination of a single {@link #modelTiePoints} with the 3 values given in
+ * {@link Tags#ModelPixelScaleTag} as documented in the Javadoc of that tag.</li>
+ * <li>By a {@link Tags#ModelTransformation} giving all coefficients of the 4×4 matrix}.
+ * Note that the third row and the third column have all their value set to 0 if the
+ * space model (or the coordinate reference system) should be two-dimensional.</li>
+ * <li>By building a non-linear transformation from all {@link #modelTiePoints}.
+ * Such transformation can not be stored in a matrix, so will leave this field {@code null}.</li>
+ * </ul>
+ *
+ * By convention, the translation column is set to NaN values if it needs to be computed from the tie point.
+ */
+ private MatrixSIS affine;
+
+ /**
+ * {@code true} if {@link #affine} has been specified by a complete matrix ({@link Tags#ModelTransformation}),
+ * or {@code false} if it has been specified by the scale factors only ({@link Tags#ModelPixelScaleTag}).
+ */
+ private boolean completeMatrixSpecified;
+
+ /**
+ * Sets the {@link #affine} transform from a complete matrix.
+ *
+ * @param terms the matrix in a row-major fashion.
+ * @param size the matrix size, either 3 or 4.
+ */
+ public void setGridToCRS(final Vector terms, final int size) {
+ final int length = terms.size();
+ completeMatrixSpecified = true;
+ affine = Matrices.createZero(size, size);
+ affine.setElement(size-1, size-1, 1);
+ for (int i=0; i<length; i++) {
+ affine.setElement(i / size, i % size, terms.doubleValue(i));
+ }
+ }
+
+ /**
+ * Sets only the scale terms of the {@link #affine} transform.
+ * The translation terms are set to NaN, meaning they will need to be determined later.
+ */
+ public void setScaleFactors(final Vector terms) {
+ final int size = terms.size();
+ completeMatrixSpecified = false;
+ affine = Matrices.createZero(size+1, size+1);
+ affine.setElement(size, size, 1);
+ for (int i=0; i<size; i++) {
+ double e = terms.doubleValue(i);
+ if (i == 1) e = -e; // Make y scale factor negative.
+ affine.setElement(i, i, e);
+ affine.setElement(i, size, Double.NaN);
+ }
+ }
+
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////
+ //// ////
+ //// Information to be computed by GridGeometryBuilder based on above data. ////
+ //// ////
+ ////////////////////////////////////////////////////////////////////////////////////////
+
+ /**
+ * The grid geometry to be created by {@link #build(GridExtent)}.
+ */
+ public GridGeometry gridGeometry;
+
+ /**
+ * Suggested value for a general description of the transformation form grid coordinates to "real world" coordinates.
+ * This information is obtained as a side-effect of {@link #build(GridExtent)} call.
+ */
+ private String description;
+
+ /**
+ * {@code POINT} if {@link GeoKeys#RasterType} is {@link GeoCodes#RasterPixelIsPoint},
+ * {@code AREA} if it is {@link GeoCodes#RasterPixelIsArea}, or null if unspecified.
+ * This information is obtained as a side-effect of {@link #build(GridExtent)} call.
+ */
+ private CellGeometry cellGeometry;
+
+ /**
+ * Creates a new builder.
+ *
+ * @param reader where to report warnings if any.
+ */
+ GridGeometryBuilder(final Reader reader) {
+ this.reader = reader;
+ }
+
+ /**
+ * If {@link #affine} has been specified with only the scale factor, computes the translation terms now.
+ * If needed, this method computes the translation terms from the (usually singleton) tie point.
+ * This happen when the GeoTIFF file has a {@link Tags#ModelPixelScaleTag} and {@link Tags#ModelTiePoints}.
+ * The later should have a single record.
+ *
+ * @return {@code true} on success (including nothing to compute), or {@code false} if the computation attempt
+ * failed because of missing {@link Tags#ModelTiePoints}.
+ *
+ * @see ImageFileDirectory#validateMandatoryTags()
+ */
+ public boolean validateMandatoryTags() {
+ final MatrixSIS affine = this.affine;
+ if (affine == null || completeMatrixSpecified) {
+ return true;
+ }
+ final Vector modelTiePoints = this.modelTiePoints;
+ if (modelTiePoints != null) {
+ /*
+ * The GeoTIFF specification recommends that the first point is located at grid indices (0,0).
+ * But as a safety, we will nevertheless search in the grid for the point closest to origin.
+ * If the grid is affine, using the corner closest to (0,0) reduces rounding errors compared
+ * to using another corner. If the grid is not affine, then ModelPixelScaleTag should not have
+ * been defined for that file…
+ */
+ int nearest = 0; // Index of the record nearest to origin.
+ double distance = Double.POSITIVE_INFINITY; // Distance squared of the nearest record.
+ final int size = modelTiePoints.size();
+ for (int i=0; i<size; i += Localization.RECORD_LENGTH) {
+ double t;
+ final double d = (t = modelTiePoints.doubleValue(i )) * t
+ + (t = modelTiePoints.doubleValue(i + 1)) * t
+ + (t = modelTiePoints.doubleValue(i + 2)) * t;
+ if (d < distance) {
+ distance = d;
+ nearest = i;
+ if (d == 0) break; // Optimization for the standard case.
+ }
+ }
+ /*
+ * Grid to CRS conversion: crs = grid × scale + translation
+ * We rearrange as: translation = crs - grid × scale
+ * where: grid = modelTiePoints[i]
+ * crs = modelTiePoints[i + RECORD_LENGTH/2]
+ * scale = affine(i,i) — on the diagonal
+ */
+ if (distance != Double.POSITIVE_INFINITY) {
+ final DoubleDouble t = new DoubleDouble();
+ final int numDim = affine.getNumRow() - 1;
+ final int trCol = affine.getNumCol() - 1;
+ for (int j=0; j<numDim; j++) {
+ t.value = -modelTiePoints.doubleValue(nearest + j);
+ t.error = DoubleDouble.errorForWellKnownValue(t.value);
+ t.multiply(affine.getNumber(j, j));
+ t.add(modelTiePoints.doubleValue(nearest + j + Localization.RECORD_LENGTH / 2));
+ affine.setNumber(j, trCol, t);
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Creates the grid geometry and collect related metadata.
+ * This method shall be invoked exactly once after {@link #validateMandatoryTags()}.
+ * After this method call (if successful), {@link #gridGeometry} is guaranteed non-null
+ * and can be used as a flag for determining that the build has been completed.
+ *
+ * @param extent the image width and height in pixels. Must be two-dimensional.
+ * @return {@link #gridGeometry}, guaranteed non-null.
+ * @throws FactoryException if an error occurred while creating a CRS or a transform.
+ */
+ public GridGeometry build(final GridExtent extent) throws FactoryException {
+ CoordinateReferenceSystem crs = null;
+ if (keyDirectory != null) {
+ final CRSBuilder helper = new CRSBuilder(reader);
+ try {
+ crs = helper.build(keyDirectory, numericParameters, asciiParameters);
+ description = helper.description;
+ cellGeometry = helper.cellGeometry;
+ } catch (NoSuchIdentifierException | ParameterNotFoundException e) {
+ short key = Resources.Keys.UnsupportedProjectionMethod_1;
+ if (e instanceof NoSuchAuthorityCodeException) {
+ key = Resources.Keys.UnknownCRS_1;
+ }
+ reader.owner.warning(reader.resources().getString(key, reader.owner.getDisplayName()), e);
+ } catch (IllegalArgumentException | NoSuchElementException | ClassCastException e) {
+ if (!helper.alreadyReported) {
+ reader.owner.warning(null, e);
+ }
+ }
+ }
+ boolean pixelIsPoint = CellGeometry.POINT.equals(cellGeometry);
+ try {
+ final MathTransform gridToCRS;
+ if (affine != null) {
+ gridToCRS = MathTransforms.linear(affine);
+ } else {
+ gridToCRS = Localization.nonLinear(modelTiePoints);
+ pixelIsPoint = true;
+ }
+ gridGeometry = new GridGeometry(extent, pixelIsPoint ? PixelInCell.CELL_CENTER : PixelInCell.CELL_CORNER, gridToCRS, crs);
+ } catch (TransformException e) {
+ gridGeometry = new GridGeometry(extent, crs);
+ reader.owner.warning(null, e);
+ /*
+ * Note: we catch TransformExceptions because they may be caused by erroneous data in the GeoTIFF file,
+ * but let FactoryExceptions propagate because they are more likely to be a SIS configuration problem.
+ */
+ }
+ keyDirectory = null; // Not needed anymore, so let GC do its work.
+ numericParameters = null;
+ asciiParameters = null;
+ modelTiePoints = null;
+ affine = null;
+ return gridGeometry;
+ }
+
+ /**
+ * Completes ISO 19115 metadata with some GeoTIFF values inferred from the geotags.
+ *
+ * <p><b>Pre-requite:</b></p>
+ * <ul>
+ * <li>{@link #build(GridExtent)} must have been invoked successfully before this method.</li>
+ * <li>{@link ImageFileDirectory} must have filled its part of metadata before to invoke this method.</li>
+ * </ul>
+ *
+ * This method invokes {@link MetadataBuilder#newGridRepresentation(MetadataBuilder.GridType)}
+ * with the appropriate {@code GEORECTIFIED} or {@code GEOREFERENCEABLE} type.
+ *
+ * @param metadata the helper class where to write metadata values.
+ * @throws NumberFormatException if a numeric value was stored as a string and can not be parsed.
+ */
+ public void completeMetadata(final MetadataBuilder metadata) {
+ final boolean isGeorectified = (modelTiePoints == null) || (affine != null);
+ metadata.newGridRepresentation(isGeorectified ? MetadataBuilder.GridType.GEORECTIFIED
+ : MetadataBuilder.GridType.GEOREFERENCEABLE);
+ metadata.setGeoreferencingAvailability(affine != null, false, false);
+ if (gridGeometry != null && gridGeometry.isDefined(GridGeometry.CRS)) {
+ metadata.addReferenceSystem(gridGeometry.getCoordinateReferenceSystem());
+ }
+ metadata.setGridToCRS(description);
+ /*
+ * Whether the pixel value is thought of as filling the cell area or is considered as point measurements at
+ * the vertices of the grid (not in the interior of a cell). This is determined by the value associated to
+ * GeoKeys.RasterType, which can be GeoCodes.RasterPixelIsArea or GeoCodes.RasterPixelIsPoint.
+ *
+ * Note: the pixel orientation (UPPER_LEFT versus CENTER) should be kept consistent with the discussion in
+ * GridGeometryBuilder class javadoc.
+ */
+ metadata.setCellGeometry(cellGeometry);
+ final PixelOrientation po;
+ if (CellGeometry.POINT.equals(cellGeometry)) {
+ po = PixelOrientation.CENTER;
+ } else if (CellGeometry.AREA.equals(cellGeometry)) {
+ po = PixelOrientation.UPPER_LEFT;
+ } else {
+ return;
+ }
+ metadata.setPointInPixel(po);
+ }
+}
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
index c34c892..c3366b8 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java
@@ -22,24 +22,21 @@ import java.util.Arrays;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.LogRecord;
-import java.util.NoSuchElementException;
import java.nio.charset.Charset;
import javax.measure.Unit;
import javax.measure.quantity.Length;
+import org.opengis.metadata.Metadata;
import org.opengis.metadata.citation.DateType;
import org.opengis.util.FactoryException;
-import org.opengis.util.NoSuchIdentifierException;
-import org.opengis.parameter.ParameterNotFoundException;
-import org.opengis.referencing.NoSuchAuthorityCodeException;
-import org.opengis.referencing.operation.TransformException;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.referencing.operation.matrix.Matrices;
-import org.apache.sis.referencing.operation.matrix.MatrixSIS;
import org.apache.sis.internal.geotiff.Resources;
+import org.apache.sis.internal.storage.AbstractResource;
import org.apache.sis.internal.storage.MetadataBuilder;
import org.apache.sis.internal.storage.io.ChannelDataInput;
import org.apache.sis.storage.DataStoreException;
import org.apache.sis.storage.DataStoreContentException;
+import org.apache.sis.storage.GridCoverageResource;
+import org.apache.sis.coverage.grid.GridGeometry;
+import org.apache.sis.coverage.grid.GridExtent;
import org.apache.sis.math.Vector;
import org.apache.sis.measure.Units;
@@ -59,7 +56,7 @@ import org.apache.sis.measure.Units;
* @since 0.8
* @module
*/
-final class ImageFileDirectory {
+final class ImageFileDirectory extends AbstractResource implements GridCoverageResource {
/**
* Possible value for the {@link #tileTagFamily} field. That field tells whether image tiling
* was specified using the {@code Tile*} family of TIFF tags or the {@code Strip*} family.
@@ -314,57 +311,28 @@ final class ImageFileDirectory {
private Compression compression;
/**
- * References the {@link GeoKeys} needed for building the Coordinate Reference System.
- * This is a GeoTIFF extension to the TIFF specification.
- * Content will be parsed by {@link CRSBuilder}.
- */
- private Vector geoKeyDirectory;
-
- /**
- * The numeric values referenced by the {@link #geoKeyDirectory}.
- * This is a GeoTIFF extension to the TIFF specification.
- * Content will be parsed by {@link CRSBuilder}.
- */
- private Vector numericGeoParameters;
-
- /**
- * The characters referenced by the {@link #geoKeyDirectory}.
- * This is a GeoTIFF extension to the TIFF specification.
- * Content will be parsed by {@link CRSBuilder}.
- */
- private String asciiGeoParameters;
-
- /**
- * Raster model tie points. This vector contains ordinate values structured as (I,J,K, X,Y,Z) records.
- * The (I,J,K) ordinate values specify the point at location (I,J) in raster space with pixel-value K,
- * and (X,Y,Z) ordinate values specify the point in the Coordinate Reference System. In most cases the
- * coordinate system is only two-dimensional, in which case both K and Z should be set to zero.
- */
- private Vector modelTiePoints;
-
- /**
- * The conversion from grid coordinates to CRS coordinates. It can be determined in different ways,
- * from simpler to more complex:
+ * A helper class for building Coordinate Reference System and complete related metadata.
+ * Contains the following information:
*
* <ul>
- * <li>By a combination of a single {@link #modelTiePoints} with the 3 values given in
- * {@link Tags#ModelPixelScaleTag} as documented in the Javadoc of that tag.</li>
- * <li>By a {@link Tags#ModelTransformation} giving all coefficients of the 4×4 matrix}.
- * Note that the third row and the third column have all their value set to 0 if the
- * space model (or the coordinate reference system) should be two-dimensional.</li>
- * <li>By building a non-linear transformation from all {@link #modelTiePoints}.
- * Such transformation can not be stored in a matrix, so will leave this field {@code null}.</li>
+ * <li>{@link GridGeometryBuilder#keyDirectory}</li>
+ * <li>{@link GridGeometryBuilder#numericParameters}</li>
+ * <li>{@link GridGeometryBuilder#asciiParameters}</li>
+ * <li>{@link GridGeometryBuilder#modelTiePoints}</li>
* </ul>
- *
- * By convention, the translation column is set to NaN values if it needs to be computed from the tie point.
*/
- private MatrixSIS gridToCRS;
+ private GridGeometryBuilder referencing;
/**
- * {@code true} if {@link #gridToCRS} has been specified by a complete matrix ({@link Tags#ModelTransformation}),
- * or {@code false} if it has been specified by the scale factors only ({@link Tags#ModelPixelScaleTag}).
+ * Returns {@link #referencing}, created when first needed. We delay its creation since
+ * this object is not needed for ordinary TIFF files (i.e. without the GeoTIFF extension).
*/
- private boolean completeMatrixSpecified;
+ private GridGeometryBuilder referencing() {
+ if (referencing == null) {
+ referencing = new GridGeometryBuilder(reader);
+ }
+ return referencing;
+ }
/**
* Creates a new image file directory.
@@ -372,6 +340,7 @@ final class ImageFileDirectory {
* @param reader information about the input stream to read, the metadata and the character encoding.
*/
ImageFileDirectory(final Reader reader) {
+ super(reader.owner);
this.reader = reader;
}
@@ -697,14 +666,14 @@ final class ImageFileDirectory {
* The first 4 values are special, and contain GeoKey directory header information.
*/
case Tags.GeoKeyDirectory: {
- geoKeyDirectory = type.readVector(input(), count);
+ referencing().keyDirectory = type.readVector(input(), count);
break;
}
/*
* Stores all of the 'double' valued GeoKeys, referenced by the GeoKeyDirectory.
*/
case Tags.GeoDoubleParams: {
- numericGeoParameters = type.readVector(input(), count);
+ referencing().numericParameters = type.readVector(input(), count);
break;
}
/*
@@ -716,8 +685,8 @@ final class ImageFileDirectory {
final String[] values = type.readString(input(), count, encoding());
switch (values.length) {
case 0: break;
- case 1: asciiGeoParameters = values[0]; break;
- default: asciiGeoParameters = String.join("\u0000", values).concat("\u0000"); break;
+ case 1: referencing().asciiParameters = values[0]; break;
+ default: referencing().asciiParameters = String.join("\u0000", values).concat("\u0000"); break;
}
break;
}
@@ -736,21 +705,15 @@ final class ImageFileDirectory {
*/
case Tags.ModelTransformation: {
final Vector m = type.readVector(input(), count);
- final int size = m.size();
final int n;
- switch (size) {
+ switch (m.size()) {
case 6: // Assume 2D model with implicit [0 0 1] last row.
case 9: n = 3; break; // Assume 2D model with full 3×3 matrix.
case 12: // Assume 3D model with implicit [0 0 0 1] last row.
case 16: n = 4; break; // 3D model with full 4×4 matrix, as required by GeoTIFF spec.
default: return m;
}
- completeMatrixSpecified = true;
- gridToCRS = Matrices.createZero(n, n);
- gridToCRS.setElement(n-1, n-1, 1);
- for (int i=0; i<size; i++) {
- gridToCRS.setElement(i / n, i % n, m.doubleValue(i));
- }
+ referencing().setGridToCRS(m, n);
break;
}
/*
@@ -763,22 +726,14 @@ final class ImageFileDirectory {
if (size < 2 || size > 3) { // Length should be exactly 3, but we make this reader tolerant.
return m;
}
- completeMatrixSpecified = false;
- gridToCRS = Matrices.createZero(size+1, size+1);
- gridToCRS.setElement(size, size, 1);
- for (int i=0; i<size; i++) {
- double e = m.doubleValue(i);
- if (i == 1) e = -e; // Make y scale factor negative.
- gridToCRS.setElement(i, i, e);
- gridToCRS.setElement(i, size, Double.NaN);
- }
+ referencing().setScaleFactors(m);
break;
}
/*
* The mapping from pixel coordinates to CRS coordinates as a sequence of (I,J,K, X,Y,Z) records.
*/
case Tags.ModelTiePoints: {
- modelTiePoints = type.readVector(input(), count);
+ referencing().modelTiePoints = type.readVector(input(), count);
break;
}
@@ -1161,10 +1116,8 @@ final class ImageFileDirectory {
* If a "grid to CRS" conversion has been specified with only the scale factor, we need to compute
* the translation terms now.
*/
- if (gridToCRS != null && !completeMatrixSpecified) {
- if (!Localization.setTranslationTerms(gridToCRS, modelTiePoints)) {
- throw missingTag(Tags.ModelTiePoints);
- }
+ if (referencing != null && !referencing.validateMandatoryTags()) {
+ throw missingTag(Tags.ModelTiePoints);
}
}
@@ -1229,40 +1182,51 @@ final class ImageFileDirectory {
* in which case the CRS builder returns null. This is safe since all MetadataBuilder methods
* ignore null values (a design choice because this pattern come very often).
*/
- final boolean isGeorectified = (modelTiePoints == null) || (gridToCRS != null);
- metadata.newGridRepresentation(isGeorectified ? MetadataBuilder.GridType.GEORECTIFIED
- : MetadataBuilder.GridType.GEOREFERENCEABLE);
- metadata.setGeoreferencingAvailability(gridToCRS != null, false, false);
- CoordinateReferenceSystem crs = null;
- if (geoKeyDirectory != null) {
- final CRSBuilder helper = new CRSBuilder(reader);
- try {
- crs = helper.build(geoKeyDirectory, numericGeoParameters, asciiGeoParameters);
- metadata.addReferenceSystem(crs);
- helper.complete(metadata);
- } catch (NoSuchIdentifierException | ParameterNotFoundException e) {
- short key = Resources.Keys.UnsupportedProjectionMethod_1;
- if (e instanceof NoSuchAuthorityCodeException) {
- key = Resources.Keys.UnknownCRS_1;
- }
- reader.owner.warning(reader.resources().getString(key, reader.owner.getDisplayName()), e);
- } catch (IllegalArgumentException | NoSuchElementException | ClassCastException e) {
- if (!helper.alreadyReported) {
- reader.owner.warning(null, e);
- }
- }
+ if (referencing != null) {
+ getGridGeometry(); // For calculation of gridGeometry if not already done.
+ referencing.completeMetadata(metadata);
}
- try {
- if (!isGeorectified) {
- metadata.addGeolocation(new Localization(filename(), crs, modelTiePoints));
+ }
+
+ @Override
+ public Metadata getMetadata() throws DataStoreContentException {
+ /*
+ * TODO:
+ * - Modify ImageFileDirectory.completeMetadata(…) with the addition of a boolean telling that
+ * that we invoke this method for a single image instead than the whole image. Use that flag
+ * for skipping MetadataBuilder calls writing in metadata/identificationInfo/resourceFormat.
+ * - Invoke ImageFileDirectory.completeMetadata(…) if not already done and cache in a field.
+ * - Add a metadata utility method taking two Metadata in argument, search for properties that
+ * are equal and replace them by the same instance.
+ * - Invoke that method from here if GeoTiffStore already has a metadata, or conversely from
+ * GeoTiffStore if ImageResource already has a metadata.
+ */
+ return null;
+ }
+
+ /**
+ * Returns the grid envelope for this image.
+ */
+ private GridExtent extent() {
+ return new GridExtent(null, new long[] {imageWidth, imageHeight}, false);
+ }
+
+ /**
+ * Returns the grid geometry for this image.
+ */
+ @Override
+ public GridGeometry getGridGeometry() throws DataStoreContentException {
+ if (referencing != null) {
+ GridGeometry gridGeometry = referencing.gridGeometry;
+ if (gridGeometry == null) try {
+ gridGeometry = referencing.build(extent());
+ } catch (FactoryException e) {
+ throw new DataStoreContentException(reader.resources().getString(Resources.Keys.CanNotComputeGridGeometry_1, filename(), e));
}
- } catch (TransformException e) {
- reader.owner.warning(null, e);
+ return gridGeometry;
+ } else {
+ return new GridGeometry(extent(), null);
}
- geoKeyDirectory = null; // Not needed anymore, so let GC do its work.
- numericGeoParameters = null;
- asciiGeoParameters = null;
- modelTiePoints = null;
}
/**
diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
index 581e30d..dcd1d79 100644
--- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
+++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/Localization.java
@@ -21,21 +21,13 @@ import java.util.Set;
import java.util.Map;
import java.util.HashSet;
import java.util.LinkedHashMap;
-import java.util.Collection;
-import java.util.Collections;
import org.opengis.geometry.Envelope;
import org.opengis.util.FactoryException;
-import org.opengis.metadata.quality.DataQuality;
-import org.opengis.metadata.spatial.GeolocationInformation;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
-import org.opengis.referencing.crs.CoordinateReferenceSystem;
-import org.apache.sis.referencing.operation.matrix.MatrixSIS;
import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.transform.LinearTransform;
import org.apache.sis.referencing.operation.builder.LocalizationGridBuilder;
-import org.apache.sis.referencing.operation.AbstractCoordinateOperation;
-import org.apache.sis.internal.util.DoubleDouble;
import org.apache.sis.math.Vector;
@@ -43,47 +35,19 @@ import org.apache.sis.math.Vector;
* The conversion or transformation from pixel coordinates to model coordinates.
* The target CRS may be the image CRS if the image is "georeferenceable" instead of georeferenced.
*
- * This is a placeholder before a real {@code GridGeometry} class is ported to Apache SIS.
- * We implement {@code CoordinateOperation} for now for allowing access to the math transform from
- * outside this package, but we will probably not keep this class hierarchy in a future version.
- *
- * <div class="section">Pixel center versus pixel corner</div>
- * The policy about whether the conversion map pixel corner or pixel center does not seem totally clear.
- * But the following seems to be the practice at least with GDAL:
- *
- * {@preformat text
- * ModelTiepointTag = (0.0, 0.0, 0.0, -180.0, 90.0, 0.0)
- * ModelPixelScaleTag = (0.002777777778, 0.002777777778, 0.0)
- * GeoKeyDirectoryTag:
- * GTModelTypeGeoKey = 2 (ModelTypeGeographic)
- * GTRasterTypeGeoKey = 1 (RasterPixelIsArea)
- * GeographicTypeGeoKey = 4326 (GCS_WGS_84)
- * }
- *
- * and
- *
- * {@preformat text
- * ModelTiepointTag = (-0.5, -0.5, 0.0, -180.0, 90.0, 0.0)
- * ModelPixelScaleTag = (0.002777777778, 0.002777777778, 0.0)
- * GeoKeyDirectoryTag:
- * GTModelTypeGeoKey = 2 (ModelTypeGeographic)
- * GTRasterTypeGeoKey = 2 (RasterPixelIsPoint)
- * GeographicTypeGeoKey = 4326 (GCS_WGS_84)
- * }
- *
- * are considered equivalent.
+ * This code is provided in a separated class for making easier to move it to some shared location
+ * if another data store needs similar functionality in the future.
*
* @author Martin Desruisseaux (Geomatys)
* @version 1.0
* @since 0.8
* @module
*/
-@SuppressWarnings("serial")
-final class Localization extends AbstractCoordinateOperation implements GeolocationInformation {
+final class Localization {
/**
* Number of floating point values in each (I,J,K,X,Y,Z) record.
*/
- private static final int RECORD_LENGTH = 6;
+ static final int RECORD_LENGTH = 6;
/**
* The desired precision of coordinate transformations in units of pixels.
@@ -92,12 +56,19 @@ final class Localization extends AbstractCoordinateOperation implements Geolocat
private static final double PRECISION = 1E-6;
/**
- * Creates a new transformation from the information found by {@link ImageFileDirectory}.
+ * Do not allow instantiation of this class.
*/
- Localization(final String name, final CoordinateReferenceSystem crs, final Vector modelTiePoints)
- throws FactoryException, TransformException
- {
- super(Collections.singletonMap(NAME_KEY, name), null, crs, null, localizationGrid(modelTiePoints, null));
+ private Localization() {
+ }
+
+ /**
+ * Creates a new localization grid from the information found by {@link ImageFileDirectory}.
+ *
+ * @param modelTiePoints the tie points to use for computing {@code gridToCRS}.
+ * @return the grid geometry created from above properties. Never null.
+ */
+ static MathTransform nonLinear(final Vector modelTiePoints) throws FactoryException, TransformException {
+ return localizationGrid(modelTiePoints, null);
}
/**
@@ -253,61 +224,4 @@ final class Localization extends AbstractCoordinateOperation implements Geolocat
}
return Double.NaN;
}
-
- /**
- * Computes translation terms in the given matrix from the (usually singleton) tie point.
- * This method is invoked when the GeoTIFF file has a {@link Tags#ModelPixelScaleTag} and
- * {@link Tags#ModelTiePoints}. The later should have a single record.
- *
- * @param gridToCRS the matrix to update. That matrix shall contain the scale factors before to invoke this method.
- * @param modelTiePoints the vector of model tie points. Only the first point will be used.
- * @return {@code true} if the given vector is non-null and contains at least one complete record.
- */
- static boolean setTranslationTerms(final MatrixSIS gridToCRS, final Vector modelTiePoints) {
- if (modelTiePoints != null) {
- /*
- * The GeoTIFF specification recommends that the first point is located at grid indices (0,0).
- * But as a safety, we will nevertheless search in the grid for the point closest to origin.
- * If the grid is affine, using the corner closest to (0,0) reduces rounding errors compared
- * to using another corner. If the grid is not affine, then ModelPixelScaleTag should not have
- * been defined for that file…
- */
- int nearest = 0; // Index of the record nearest to origin.
- double distance = Double.POSITIVE_INFINITY; // Distance squared of the nearest record.
- final int size = modelTiePoints.size();
- for (int i=0; i<size; i += RECORD_LENGTH) {
- double t;
- final double d = (t = modelTiePoints.doubleValue(i )) * t
- + (t = modelTiePoints.doubleValue(i + 1)) * t
- + (t = modelTiePoints.doubleValue(i + 2)) * t;
- if (d < distance) {
- distance = d;
- nearest = i;
- if (d == 0) break; // Optimization for the standard case.
- }
- }
- if (distance != Double.POSITIVE_INFINITY) {
- final DoubleDouble t = new DoubleDouble();
- final int numDim = gridToCRS.getNumRow() - 1;
- final int trCol = gridToCRS.getNumCol() - 1;
- for (int j=0; j<numDim; j++) {
- t.value = -modelTiePoints.doubleValue(nearest + j);
- t.error = DoubleDouble.errorForWellKnownValue(t.value);
- t.divide(gridToCRS.getNumber(j, j));
- t.add(modelTiePoints.doubleValue(nearest + j + RECORD_LENGTH/2));
- gridToCRS.setNumber(j, trCol, t);
- }
- return true;
- }
- }
- return false;
- }
-
- /**
- * Provides an overall assessment of quality of geolocation information.
- */
- @Override
- public Collection<DataQuality> getQualityInfo() {
- return Collections.emptyList();
- }
}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 28/31: Update dependencies.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit ed17d87a78064c302be38aed2da5a68749b25aef
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Fri Jun 8 13:08:21 2018 +0000
Update dependencies.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833167 13f79535-47bb-0310-9956-ffa450edef68
---
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pom.xml b/pom.xml
index 35a2b31..d556ded 100644
--- a/pom.xml
+++ b/pom.xml
@@ -790,7 +790,7 @@
<!-- JavaDoc configuration. -->
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
- <version>3.0.0</version>
+ <version>3.0.1</version>
<configuration>
<source>${maven.compile.source}</source> <!-- Enables javadoc to handle language constructs present in target JDK. -->
<encoding>${project.build.sourceEncoding}</encoding> <!-- Encoding of Java source file. -->
@@ -908,7 +908,7 @@
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
- <version>9.4.7.v20170914</version>
+ <version>9.4.11.v20180605</version>
</plugin>
</plugins>
</pluginManagement>
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 14/31: Method renaming and javadoc.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 31ae4af5dfc5f9e4d631a7e6a706f7ca89d4eb7f
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Fri Jun 1 09:04:30 2018 +0000
Method renaming and javadoc.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832670 13f79535-47bb-0310-9956-ffa450edef68
---
.../org/apache/sis/coverage/grid/GridExtent.java | 10 +++-
.../org/apache/sis/coverage/grid/GridGeometry.java | 69 ++++++++++++----------
.../apache/sis/coverage/grid/GridGeometryTest.java | 8 +--
3 files changed, 49 insertions(+), 38 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
index 8cef725..8a02c13 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridExtent.java
@@ -264,11 +264,14 @@ public class GridExtent implements GridEnvelope, Serializable {
}
/**
- * Returns the median (or center) coordinates of this grid extent.
+ * Returns the grid coordinates of a representative point.
+ * This point may be used for estimating a {@linkplain GridGeometry#getResolution(boolean) grid resolution}.
+ * The default implementation returns the median (or center) coordinates of this grid extent,
+ * but subclasses can override this method if another point is considered more representative.
*
- * @return the coordinates of the grid center.
+ * @return the grid coordinates of a representative point.
*/
- public DirectPosition getMedian() {
+ public DirectPosition getCentroid() {
final int dimension = getDimension();
final GeneralDirectPosition center = new GeneralDirectPosition(dimension);
for (int i=0; i<dimension; i++) {
@@ -306,6 +309,7 @@ public class GridExtent implements GridEnvelope, Serializable {
*/
public GridExtent subExtent(final int lower, final int upper) {
final int dimension = getDimension();
+ if (lower == 0 && upper == dimension) return this;
ArgumentChecks.ensureValidIndexRange(dimension, lower, upper);
final int newDim = upper - lower;
if (newDim == dimension && getClass() == GridExtent.class) {
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
index 6bf983d..bde543a 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/GridGeometry.java
@@ -53,7 +53,7 @@ import org.opengis.coverage.grid.GridEnvelope;
* <li>An optional {@linkplain #getCoordinateReferenceSystem() Coordinate Reference System} (CRS)
* specified as part of the georeferenced envelope.
* This CRS is the target of the <cite>grid to CRS</cite> transform.</li>
- * <li>An <em>estimation</em> of {@linkplain #resolution(boolean) grid resolution} along each CRS axes,
+ * <li>An <em>estimation</em> of {@link #getResolution(boolean) grid resolution} along each CRS axes,
* computed from the <cite>grid to CRS</cite> transform and eventually from the grid extent.</li>
* <li>An {@linkplain #isConversionLinear indication of whether conversion for some axes is linear or not}.</li>
* </ul>
@@ -113,7 +113,7 @@ public class GridGeometry implements Serializable {
* A bitmask to specify the validity of the grid resolution.
*
* @see #isDefined(int)
- * @see #resolution(boolean)
+ * @see #getResolution(boolean)
*/
public static final int RESOLUTION = 16;
@@ -162,7 +162,7 @@ public class GridGeometry implements Serializable {
* Computed from {@link #gridToCRS}, eventually together with {@link #extent}.
*
* @see #RESOLUTION
- * @see #resolution(boolean)
+ * @see #getResolution(boolean)
*/
protected final double[] resolution;
@@ -212,6 +212,11 @@ public class GridGeometry implements Serializable {
* smallest values (closest to negative infinity).</li>
* </ul>
*
+ * <div class="note"><b>API note:</b>
+ * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+ * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
+ * to always think about wether their <cite>grid to CRS</cite> transform is mapping pixel corner or center.</div>
+ *
* @param extent the valid extent of grid coordinates, or {@code null} if unknown.
* @param anchor {@linkplain PixelInCell#CELL_CENTER Cell center} for OGC conventions or
* {@linkplain PixelInCell#CELL_CORNER cell corner} for Java2D/JAI conventions.
@@ -257,7 +262,7 @@ public class GridGeometry implements Serializable {
if (mat != null) {
resolution = resolution(mat, 1);
} else if (extent != null && gridToCRS != null) {
- resolution = resolution(gridToCRS.derivative(this.extent.getMedian()), 0);
+ resolution = resolution(gridToCRS.derivative(this.extent.getCentroid()), 0);
} else {
resolution = null;
}
@@ -395,6 +400,11 @@ public class GridGeometry implements Serializable {
* with inclusive lower coordinates and <strong>exclusive</strong> upper coordinates.</li>
* </ul>
*
+ * <div class="note"><b>API note:</b>
+ * there is no default value for {@code anchor} because experience shows that images shifted by ½ pixel
+ * (with pixels that may be tens of kilometres large) is a recurrent problem. We want to encourage developers
+ * to always think about wether the desired <cite>grid to CRS</cite> transform shall map pixel corner or center.</div>
+ *
* @param anchor the pixel part to map.
* @return the conversion from grid coordinates to "real world" coordinates (never {@code null}).
* @throws IllegalArgumentException if the given {@code anchor} is not a known code list value.
@@ -417,26 +427,6 @@ public class GridGeometry implements Serializable {
}
/**
- * Indicates whether the <cite>grid to CRS</cite> conversion is linear for all the specified CRS axes.
- * The conversion from grid coordinates to real world coordinates is often linear for some dimensions,
- * typically the horizontal ones at indices 0 and 1. But the vertical dimension (usually at index 2)
- * is often non-linear, for example with data at 0, 5, 10, 100 and 1000 metres.
- *
- * @param targets indices of CRS axes. This is not necessarily the same than indices of grid axes.
- * @return {@code true} if the conversion from grid coordinates to "real world" coordinates is linear
- * for all the given CRS dimension.
- */
- public boolean isConversionLinear(final int... targets) {
- final int dimension = getTargetDimension();
- long mask = 0;
- for (final int d : targets) {
- ArgumentChecks.ensureValidIndex(dimension, d);
- if (d < Long.SIZE) mask |= (1L << d);
- }
- return (nonLinears & mask) == 0;
- }
-
- /**
* Returns an <em>estimation</em> of the grid resolution, in units of the coordinate reference system axes.
* The length of the returned array is the number of CRS dimensions, with {@code resolution[0]}
* being the resolution along the first CRS axis, {@code resolution[1]} the resolution along the second CRS
@@ -448,20 +438,17 @@ public class GridGeometry implements Serializable {
*
* <ul>
* <li>{@link Double#NaN} if {@code allowEstimates} is {@code false}.</li>
- * <li>An arbitrary representative resolution otherwise. This is currently the resolution in the grid center,
- * but this arbitrary choice may change in any future Apache SIS version.</li>
+ * <li>An arbitrary representative resolution otherwise.
+ * Current implementation computes the resolution at {@linkplain GridExtent#getCentroid() grid center},
+ * but different implementations may use alternative algorithms.</li>
* </ul>
*
- * <div class="note"><b>API note:</b>
- * this method name does not have the {@code "get"} prefix because it does not return a supplied value.
- * The resolution is computed and may be representative of only a part of the grid.</div>
- *
* @param allowEstimates whether to provide some values even for resolutions that are not constant factors.
* @return an <em>estimation</em> of the grid resolution (never {@code null}).
* @throws IncompleteGridGeometryException if this grid geometry has no resolution —
* i.e. <code>{@linkplain #isDefined(int) isDefined}({@linkplain #RESOLUTION})</code> returned {@code false}.
*/
- public double[] resolution(final boolean allowEstimates) {
+ public double[] getResolution(final boolean allowEstimates) {
if (resolution != null) {
final double[] res = resolution.clone();
if (!allowEstimates) {
@@ -497,6 +484,26 @@ public class GridGeometry implements Serializable {
}
/**
+ * Indicates whether the <cite>grid to CRS</cite> conversion is linear for all the specified CRS axes.
+ * The conversion from grid coordinates to real world coordinates is often linear for some dimensions,
+ * typically the horizontal ones at indices 0 and 1. But the vertical dimension (usually at index 2)
+ * is often non-linear, for example with data at 0, 5, 10, 100 and 1000 metres.
+ *
+ * @param targets indices of CRS axes. This is not necessarily the same than indices of grid axes.
+ * @return {@code true} if the conversion from grid coordinates to "real world" coordinates is linear
+ * for all the given CRS dimension.
+ */
+ public boolean isConversionLinear(final int... targets) {
+ final int dimension = getTargetDimension();
+ long mask = 0;
+ for (final int d : targets) {
+ ArgumentChecks.ensureValidIndex(dimension, d);
+ if (d < Long.SIZE) mask |= (1L << d);
+ }
+ return (nonLinears & mask) == 0;
+ }
+
+ /**
* Guesses which target dimensions may be non-linear. We currently don't have an API for finding the non-linear dimensions.
* Current implementation assumes that everything else than {@code LinearTransform} and pass-through dimensions are non-linear.
* This is not always true (e.g. in a Mercator projection, the "longitude → easting" part is linear too), but should be okay
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
index 35787c6..de9b0d3 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/GridGeometryTest.java
@@ -90,7 +90,7 @@ public final strictfp class GridGeometryTest extends TestCase {
/*
* Verify other computed properties.
*/
- assertArrayEquals("resolution", new double[] {1, 1, 1, 1}, grid.resolution(false), STRICT);
+ assertArrayEquals("resolution", new double[] {1, 1, 1, 1}, grid.getResolution(false), STRICT);
assertTrue("isConversionLinear", grid.isConversionLinear(0, 1, 2, 3));
}
@@ -135,7 +135,7 @@ public final strictfp class GridGeometryTest extends TestCase {
/*
* Verify other computed properties.
*/
- assertArrayEquals("resolution", new double[] {1, 1, 1}, grid.resolution(false), STRICT);
+ assertArrayEquals("resolution", new double[] {1, 1, 1}, grid.getResolution(false), STRICT);
assertTrue("isConversionLinear", grid.isConversionLinear(0, 1, 2));
}
@@ -157,8 +157,8 @@ public final strictfp class GridGeometryTest extends TestCase {
final MathTransform temporal = MathTransforms.linear(3600, 60);
final MathTransform gridToCRS = MathTransforms.compound(horizontal, vertical, temporal);
final GridGeometry grid = new GridGeometry(extent, PixelInCell.CELL_CENTER, gridToCRS, null);
- assertArrayEquals("resolution", new double[] {0.5, 0.25, 6.0, 3600}, grid.resolution(true), STRICT);
- assertArrayEquals("resolution", new double[] {0.5, 0.25, Double.NaN, 3600}, grid.resolution(false), STRICT);
+ assertArrayEquals("resolution", new double[] {0.5, 0.25, 6.0, 3600}, grid.getResolution(true), STRICT);
+ assertArrayEquals("resolution", new double[] {0.5, 0.25, Double.NaN, 3600}, grid.getResolution(false), STRICT);
assertFalse("isConversionLinear", grid.isConversionLinear(0, 1, 2, 3));
assertTrue ("isConversionLinear", grid.isConversionLinear(0, 1, 3));
}
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 26/31: Move PassThroughTransform.create(…) method to MathTransforms.passThrough(…).
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 7c856886b41d80263472173a1c7af39ed74af696
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Fri Jun 8 13:06:22 2018 +0000
Move PassThroughTransform.create(…) method to MathTransforms.passThrough(…).
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1833165 13f79535-47bb-0310-9956-ffa450edef68
---
.../operation/DefaultPassThroughOperation.java | 5 +-
.../operation/transform/ConcatenatedTransform.java | 2 +-
.../transform/DefaultMathTransformFactory.java | 2 +-
.../operation/transform/MathTransforms.java | 45 ++++++++++++++-
.../operation/transform/PassThroughTransform.java | 64 ++++++++++------------
.../transform/ConcatenatedTransformTest.java | 2 +-
.../operation/transform/MathTransformsTest.java | 2 +-
.../transform/PassThroughTransformTest.java | 8 +--
.../transform/TransformSeparatorTest.java | 2 +-
9 files changed, 86 insertions(+), 46 deletions(-)
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
index cca675d..8593199 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/DefaultPassThroughOperation.java
@@ -27,6 +27,7 @@ import org.opengis.referencing.operation.CoordinateOperation;
import org.opengis.referencing.operation.PassThroughOperation;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.referencing.crs.CompoundCRS;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
import org.apache.sis.referencing.operation.transform.PassThroughTransform;
import org.apache.sis.internal.referencing.ReferencingUtilities;
import org.apache.sis.internal.metadata.MetadataUtilities;
@@ -109,7 +110,7 @@ public class DefaultPassThroughOperation extends AbstractCoordinateOperation imp
final int firstAffectedOrdinate,
final int numTrailingOrdinates)
{
- super(properties, sourceCRS, targetCRS, null, PassThroughTransform.create(
+ super(properties, sourceCRS, targetCRS, null, MathTransforms.passThrough(
firstAffectedOrdinate, operation.getMathTransform(), numTrailingOrdinates));
ArgumentChecks.ensureNonNull("operation", operation);
this.operation = operation;
@@ -350,7 +351,7 @@ public class DefaultPassThroughOperation extends AbstractCoordinateOperation imp
Errors.Keys.CanNotAssign_2, missing, Arrays.toString(ordinates)));
}
}
- transform = PassThroughTransform.create(ordinates[0] - 1, operation.getMathTransform(),
+ transform = MathTransforms.passThrough(ordinates[0] - 1, operation.getMathTransform(),
ReferencingUtilities.getDimension(sourceCRS) - ordinates[ordinates.length - 1]);
return;
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
index 8df182e..3f32b61 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransform.java
@@ -309,7 +309,7 @@ class ConcatenatedTransform extends AbstractMathTransform implements Serializabl
factory.createConcatenatedTransform(factory.createAffineTransform(sub), candidate.subTransform),
candidate.numTrailingOrdinates);
} else {
- return PassThroughTransform.create(
+ return MathTransforms.passThrough(
candidate.firstAffectedOrdinate,
create(MathTransforms.linear(sub), candidate.subTransform, factory),
candidate.numTrailingOrdinates);
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
index ee6ba2e..09868e3 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/DefaultMathTransformFactory.java
@@ -1347,7 +1347,7 @@ public class DefaultMathTransformFactory extends AbstractFactory implements Math
lastMethod.remove();
final MathTransform tr;
try {
- tr = PassThroughTransform.create(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
+ tr = MathTransforms.passThrough(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
} catch (IllegalArgumentException exception) {
throw new InvalidGeodeticParameterException(exception.getLocalizedMessage(), exception);
}
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MathTransforms.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MathTransforms.java
index d6ecdbd..c62765d 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MathTransforms.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/MathTransforms.java
@@ -220,6 +220,49 @@ public final class MathTransforms extends Static {
}
/**
+ * Creates a transform which passes through a subset of coordinates to another transform.
+ * This method returns a transform having the following dimensions:
+ *
+ * {@preformat java
+ * Source: firstAffectedOrdinate + subTransform.getSourceDimensions() + numTrailingOrdinates
+ * Target: firstAffectedOrdinate + subTransform.getTargetDimensions() + numTrailingOrdinates
+ * }
+ *
+ * Affected ordinates will range from {@code firstAffectedOrdinate} inclusive to
+ * {@code dimTarget - numTrailingOrdinates} exclusive.
+ *
+ * @param firstAffectedOrdinate index of the first affected ordinate.
+ * @param subTransform the sub-transform to apply on modified coordinates.
+ * @param numTrailingOrdinates number of trailing ordinates to pass through.
+ * @return a pass-through transform, potentially as a {@link PassThroughTransform} instance but not necessarily.
+ *
+ * @since 1.0
+ */
+ public static MathTransform passThrough(final int firstAffectedOrdinate,
+ final MathTransform subTransform,
+ final int numTrailingOrdinates)
+ {
+ ArgumentChecks.ensureNonNull ("subTransform", subTransform);
+ ArgumentChecks.ensurePositive("firstAffectedOrdinate", firstAffectedOrdinate);
+ ArgumentChecks.ensurePositive("numTrailingOrdinates", numTrailingOrdinates);
+ if (firstAffectedOrdinate == 0 && numTrailingOrdinates == 0) {
+ return subTransform;
+ }
+ if (subTransform.isIdentity()) {
+ final int dimension = subTransform.getSourceDimensions();
+ if (dimension == subTransform.getTargetDimensions()) {
+ return IdentityTransform.create(firstAffectedOrdinate + dimension + numTrailingOrdinates);
+ }
+ }
+ final Matrix matrix = getMatrix(subTransform);
+ if (matrix != null) {
+ return linear(PassThroughTransform.asMatrix(firstAffectedOrdinate, matrix, numTrailingOrdinates));
+ } else {
+ return PassThroughTransform.newInstance(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
+ }
+ }
+
+ /**
* Puts together a list of independent math transforms, each of them operating on a subset of ordinate values.
* This method is often used for defining 4-dimensional (<var>x</var>,<var>y</var>,<var>z</var>,<var>t</var>)
* transform as an aggregation of 3 simpler transforms operating on (<var>x</var>,<var>y</var>), (<var>z</var>)
@@ -254,7 +297,7 @@ public final class MathTransforms extends Static {
int firstAffectedOrdinate = 0;
for (int i=0; i<transforms.length; i++) {
MathTransform tr = transforms[i];
- tr = PassThroughTransform.create(firstAffectedOrdinate, tr, sum - (firstAffectedOrdinate += dimensions[i]));
+ tr = passThrough(firstAffectedOrdinate, tr, sum - (firstAffectedOrdinate += dimensions[i]));
if (compound == null) {
compound = tr;
} else {
diff --git a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
index bd5f381..4ada705 100644
--- a/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
+++ b/core/sis-referencing/src/main/java/org/apache/sis/referencing/operation/transform/PassThroughTransform.java
@@ -37,7 +37,7 @@ import static org.apache.sis.util.ArgumentChecks.*;
/**
* Transform which passes through a subset of ordinates to another transform.
- * This allows transforms to operate on a subset of ordinates.
+ * This allows transforms to operate on a subset of coordinate values.
*
* <div class="note"><b>Example:</b> giving (<var>latitude</var>, <var>longitude</var>, <var>height</var>) coordinates,
* {@code PassThroughTransform} can convert the height values from feet to meters without affecting the latitude and
@@ -45,7 +45,7 @@ import static org.apache.sis.util.ArgumentChecks.*;
*
* {@preformat java
* MathTransform feetToMetres = MathTransforms.linear(0.3048, 0); // One-dimensional conversion.
- * MathTransform tr = PassThroughTransform.create(2, feetToMetres, 0); // Three-dimensional conversion.
+ * MathTransform tr = MathTransforms.passThrough(2, feetToMetres, 0); // Three-dimensional conversion.
* }
* </div>
*
@@ -58,8 +58,9 @@ import static org.apache.sis.util.ArgumentChecks.*;
* Serialization should be used only for short term storage or RMI between applications running the same SIS version.
*
* @author Martin Desruisseaux (IRD, Geomatys)
- * @version 0.5
+ * @version 1.0
*
+ * @see MathTransforms#passThrough(int, MathTransform, int)
* @see MathTransforms#compound(MathTransform...)
*
* @since 0.5
@@ -99,7 +100,7 @@ public class PassThroughTransform extends AbstractMathTransform implements Seria
/**
* Constructor for sub-classes.
- * Users should invoke the static {@link #create(int, MathTransform, int)} factory method instead,
+ * Users should invoke the static {@link MathTransforms#passThrough(int, MathTransform, int)} factory method instead,
* since the most optimal pass-through transform for the given {@code subTransform} is not necessarily
* a {@code PassThroughTransform} instance.
*
@@ -107,7 +108,7 @@ public class PassThroughTransform extends AbstractMathTransform implements Seria
* @param subTransform the sub-transform to apply on modified coordinates.
* @param numTrailingOrdinates number of trailing ordinates to pass through.
*
- * @see #create(int, MathTransform, int)
+ * @see MathTransforms#passThrough(int, MathTransform, int)
*/
protected PassThroughTransform(final int firstAffectedOrdinate,
final MathTransform subTransform,
@@ -143,40 +144,35 @@ public class PassThroughTransform extends AbstractMathTransform implements Seria
* @param subTransform the sub-transform to apply on modified coordinates.
* @param numTrailingOrdinates number of trailing ordinates to pass through.
* @return a pass-through transform, not necessarily a {@code PassThroughTransform} instance.
+ *
+ * @deprecated Moved to {@link MathTransforms#passThrough(int, MathTransform, int)}.
*/
+ @Deprecated
public static MathTransform create(final int firstAffectedOrdinate,
final MathTransform subTransform,
final int numTrailingOrdinates)
{
- ensureNonNull ("subTransform", subTransform);
- ensurePositive("firstAffectedOrdinate", firstAffectedOrdinate);
- ensurePositive("numTrailingOrdinates", numTrailingOrdinates);
- if (firstAffectedOrdinate == 0 && numTrailingOrdinates == 0) {
- return subTransform;
- }
- /*
- * Optimizes the "Identity transform" case.
- */
- if (subTransform.isIdentity()) {
- final int dimension = subTransform.getSourceDimensions();
- if (dimension == subTransform.getTargetDimensions()) {
- return IdentityTransform.create(firstAffectedOrdinate + dimension + numTrailingOrdinates);
- }
- }
- /*
- * Special case for transformation backed by a matrix. Is is possible to use a
- * new matrix for such transform, instead of wrapping the sub-transform into a
- * PassThroughTransform object. It is faster and easier to concatenate.
- */
- Matrix matrix = MathTransforms.getMatrix(subTransform);
- if (matrix != null) {
- matrix = expand(MatrixSIS.castOrCopy(matrix), firstAffectedOrdinate, numTrailingOrdinates, 1);
- return MathTransforms.linear(matrix);
- }
- /*
- * Constructs the general PassThroughTransform object. An optimization is done right in
- * the constructor for the case where the sub-transform is already a PassThroughTransform.
- */
+ return MathTransforms.passThrough(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
+ }
+
+ /**
+ * Special case for transformation backed by a matrix. Is is possible to use a new matrix for such transform,
+ * instead of wrapping the sub-transform into a {@code PassThroughTransform} object. It is faster and easier
+ * to concatenate.
+ */
+ static Matrix asMatrix(final int firstAffectedOrdinate, final Matrix subTransform, final int numTrailingOrdinates) {
+ return expand(MatrixSIS.castOrCopy(subTransform), firstAffectedOrdinate, numTrailingOrdinates, 1);
+ }
+
+ /**
+ * Constructs the general {@code PassThroughTransform} object. An optimization is done right in
+ * the constructor for the case where the sub-transform is already a {@code PassThroughTransform}.
+ * It is caller's responsibility to ensure that the argument values are valid.
+ */
+ static PassThroughTransform newInstance(final int firstAffectedOrdinate,
+ final MathTransform subTransform,
+ final int numTrailingOrdinates)
+ {
int dim = subTransform.getSourceDimensions();
if (subTransform.getTargetDimensions() == dim) {
dim += firstAffectedOrdinate + numTrailingOrdinates;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransformTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransformTest.java
index bab34a4..fefe495 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransformTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/ConcatenatedTransformTest.java
@@ -118,7 +118,7 @@ public final strictfp class ConcatenatedTransformTest extends MathTransformTestC
@Test
public void testPassthrough() throws FactoryException {
final MathTransform kernel = new PseudoTransform(2, 3); // Any non-linear transform.
- final MathTransform passth = PassThroughTransform.create(0, kernel, 1);
+ final MathTransform passth = MathTransforms.passThrough(0, kernel, 1);
final Matrix4 matrix = new Matrix4();
transform = ConcatenatedTransform.create(MathTransforms.linear(matrix), passth, null);
assertSame("Identity transform should be ignored.", passth, transform);
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformsTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformsTest.java
index 625e773..9a3c6cf 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformsTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/MathTransformsTest.java
@@ -70,7 +70,7 @@ public final strictfp class MathTransformsTest extends TestCase {
swap.m00 = 0; swap.m01 = 1;
swap.m10 = 1; swap.m11 = 0;
MathTransform tr = ExponentialTransform1D.create(10, 1);
- tr = PassThroughTransform.create(1, tr, 1);
+ tr = MathTransforms.passThrough(1, tr, 1);
tr = new ConcatenatedTransformDirect(MathTransforms.linear(scale), tr); // See "implementation note" above.
tr = new ConcatenatedTransformDirect(tr, MathTransforms.linear(swap));
return tr;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/PassThroughTransformTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/PassThroughTransformTest.java
index 7a09bda..1f8acee 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/PassThroughTransformTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/PassThroughTransformTest.java
@@ -56,20 +56,20 @@ public final strictfp class PassThroughTransformTest extends MathTransformTestCa
private Random random;
/**
- * Verifies argument validation performed by {@link PassThroughTransform#create(int, MathTransform, int)}.
+ * Verifies argument validation performed by {@link MathTransforms#passThrough(int, MathTransform, int)}.
*/
@Test
public void testIllegalArgument() {
final MathTransform subTransform = MathTransforms.identity(1);
try {
- PassThroughTransform.create(-1, subTransform, 0);
+ MathTransforms.passThrough(-1, subTransform, 0);
fail("An illegal argument should have been detected");
} catch (IllegalArgumentException e) {
final String message = e.getMessage();
assertTrue(message, message.contains("firstAffectedOrdinate"));
}
try {
- PassThroughTransform.create(0, subTransform, -1);
+ MathTransforms.passThrough(0, subTransform, -1);
fail("An illegal argument should have been detected");
} catch (IllegalArgumentException e) {
final String message = e.getMessage();
@@ -134,7 +134,7 @@ public final strictfp class PassThroughTransformTest extends MathTransformTestCa
for (int firstAffectedOrdinate=0; firstAffectedOrdinate<=3; firstAffectedOrdinate++) {
for (int numTrailingOrdinates=0; numTrailingOrdinates<=3; numTrailingOrdinates++) {
final int numAdditionalOrdinates = firstAffectedOrdinate + numTrailingOrdinates;
- transform = PassThroughTransform.create(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
+ transform = MathTransforms.passThrough(firstAffectedOrdinate, subTransform, numTrailingOrdinates);
if (numAdditionalOrdinates == 0) {
assertSame("Failed to recognize that no passthrough was needed.", subTransform, transform);
continue;
diff --git a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/TransformSeparatorTest.java b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/TransformSeparatorTest.java
index 53866a0..64eb9fa 100644
--- a/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/TransformSeparatorTest.java
+++ b/core/sis-referencing/src/test/java/org/apache/sis/referencing/operation/transform/TransformSeparatorTest.java
@@ -210,7 +210,7 @@ public final strictfp class TransformSeparatorTest extends TestCase {
public void testPassThroughTransform() throws FactoryException {
final MathTransform nonLinear = new EllipsoidToCentricTransform(6378137, 6356752.314245179,
Units.METRE, false, EllipsoidToCentricTransform.TargetType.CARTESIAN);
- final TransformSeparator s = new TransformSeparator(PassThroughTransform.create(2, nonLinear, 3));
+ final TransformSeparator s = new TransformSeparator(MathTransforms.passThrough(2, nonLinear, 3));
/*
* Trivial case: no dimension specified, we should get the transform unchanged.
*/
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.
[sis] 08/31: Added documentation and tests for PixelTranslation.
Posted by de...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
commit 849744e515f42a2b11f1fac7231ae2b213c07915
Author: Martin Desruisseaux <de...@apache.org>
AuthorDate: Wed May 30 10:00:43 2018 +0000
Added documentation and tests for PixelTranslation.
git-svn-id: https://svn.apache.org/repos/asf/sis/branches/JDK8@1832524 13f79535-47bb-0310-9956-ffa450edef68
---
.../apache/sis/coverage/grid/PixelTranslation.java | 139 +++++++++++----------
.../sis/coverage/grid/PixelTranslationTest.java | 109 ++++++++++++++++
.../org/apache/sis/image/DefaultIteratorTest.java | 4 +-
.../org/apache/sis/test/suite/RasterTestSuite.java | 7 +-
4 files changed, 191 insertions(+), 68 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
index ab683b0..4be0985 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/grid/PixelTranslation.java
@@ -18,7 +18,6 @@ package org.apache.sis.coverage.grid;
import java.util.Map;
import java.util.HashMap;
-import java.util.Objects;
import java.io.Serializable;
import org.opengis.referencing.operation.Matrix;
@@ -83,26 +82,27 @@ public final class PixelTranslation extends Static implements Serializable {
private static final long serialVersionUID = -5671620211497720808L;
/**
- * Math transforms created by {@link #translate(MathTransform, PixelInCell, PixelInCell)}.
- * Each element in this array will be created when first needed.
+ * Math transforms created by {@link #translate(MathTransform, PixelInCell, PixelInCell)}
+ * for dimensions 1 to 6. Each element in this array will be created when first needed.
* Even indices are translations by -0.5 while odd indices are translations by +0.5.
*/
- private static final MathTransform[] translations = new MathTransform[16];
+ private static final MathTransform[] translations = new MathTransform[10];
/**
* The pixel orientation for this translation.
+ * Most common values are {@link PixelOrientation#UPPER_LEFT} and {@link PixelOrientation#CENTER}.
*/
public final PixelOrientation orientation;
/**
* The translation among the <var>x</var> axis relative to pixel center.
- * The value is typically in the [-0.5 .. +0.5] range.
+ * The value is typically −½, 0 or +½.
*/
public final double dx;
/**
* The translation among the <var>y</var> axis relative to pixel center.
- * The value is typically in the [-0.5 .. +0.5] range.
+ * The value is typically −½, 0 or +½.
*/
public final double dy;
@@ -135,7 +135,17 @@ public final class PixelTranslation extends Static implements Serializable {
}
/**
- * Returns the pixel orientation for the given {@code PixelInCell} code.
+ * Returns the pixel orientation which is equivalent to the given {@code PixelInCell} code.
+ * This equivalence can be used for converting <var>n</var>-dimensional parameters to the
+ * more specific two-dimensional case. This method implements the following mapping:
+ *
+ * <table class="sis">
+ * <caption>Pixel orientation equivalences</caption>
+ * <tr><th>Pixel in cell</th><th>Pixel orientation</th></tr>
+ * <tr><td>{@link PixelInCell#CELL_CENTER CELL_CENTER}</td><td>{@link PixelOrientation#CENTER CENTER}</td></tr>
+ * <tr><td>{@link PixelInCell#CELL_CORNER CELL_CORNER}</td><td>{@link PixelOrientation#UPPER_LEFT UPPER_LEFT}</td></tr>
+ * <tr><td>{@code null}</td><td>{@code null}</td></tr>
+ * </table>
*
* @param anchor the {@code PixelInCell} code, or {@code null}.
* @return the corresponding pixel orientation, or {@code null} if the argument was null.
@@ -156,18 +166,16 @@ public final class PixelTranslation extends Static implements Serializable {
/**
* Returns the position relative to the pixel center.
- * This method returns a value from the following table:
+ * This method is typically used for <var>n</var>-dimensional grids, where the number of dimension is unknown.
+ * The translation is determined from the following table, with the same value applied to all dimensions:
*
- * <table>
- * <caption>Translations for "pixel in cell" values</caption>
+ * <table class="sis">
+ * <caption>Translations</caption>
* <tr><th>Pixel in cell</th><th>offset</th></tr>
* <tr><td>{@link PixelInCell#CELL_CENTER CELL_CENTER}</td><td> 0.0</td></tr>
* <tr><td>{@link PixelInCell#CELL_CORNER CELL_CORNER}</td><td>-0.5</td></tr>
* </table>
*
- * This method is typically used for <var>n</var>-dimensional grids,
- * where the number of dimension is unknown.
- *
* @param anchor the "pixel in cell" value.
* @return the translation for the given "pixel in cell" value.
*/
@@ -184,11 +192,12 @@ public final class PixelTranslation extends Static implements Serializable {
/**
* Returns the specified position relative to the pixel center.
- * This method returns a value from the following table:
+ * This method can be used for grid restricted to 2 dimensions.
+ * The translation vector is determined from the following table:
*
- * <table>
- * <caption>Translations for "pixel orientation" values</caption>
- * <tr><th>Pixel orientation</th> <th> x </th><th> y </th></tr>
+ * <table class="sis">
+ * <caption>Translations</caption>
+ * <tr><th>Pixel orientation</th> <th> dx </th><th> dy </th></tr>
* <tr><td>{@link PixelOrientation#CENTER CENTER}</td> <td> 0.0</td><td> 0.0</td></tr>
* <tr><td>{@link PixelOrientation#UPPER_LEFT UPPER_LEFT}</td> <td>-0.5</td><td>-0.5</td></tr>
* <tr><td>{@link PixelOrientation#UPPER_RIGHT UPPER_RIGHT}</td><td>+0.5</td><td>-0.5</td></tr>
@@ -196,8 +205,6 @@ public final class PixelTranslation extends Static implements Serializable {
* <tr><td>{@link PixelOrientation#LOWER_RIGHT LOWER_RIGHT}</td><td>+0.5</td><td>+0.5</td></tr>
* </table>
*
- * This method can be used for grid restricted to 2 dimensions.
- *
* @param anchor the pixel orientation.
* @return the position relative to the pixel center.
* @throws IllegalArgumentException if the specified orientation is unknown.
@@ -212,82 +219,88 @@ public final class PixelTranslation extends Static implements Serializable {
}
/**
- * Returns the pixel orientation for the given offset, or {@code null} if none.
- * This is the reverse of {@link #getPixelTranslation(PixelOrientation)}.
+ * Converts a math transform from a "pixel in cell" convention to another "pixel in cell" convention.
+ * This method concatenates −½, 0 or +½ translations on <em>all</em> dimensions before the given transform.
+ * If the two given conventions are the same, then this method returns the given transform unchanged.
*
- * @param dx the translation along <var>x</var> axis.
- * @param dy the translation along <var>y</var> axis.
- * @return the pixel orientation of the given values, or {@code null} if none.
- */
- public static PixelOrientation getPixelOrientation(final double dx, final double dy) {
- for (final PixelTranslation candidate : ORIENTATIONS.values()) {
- if (candidate.dx == dx && candidate.dy == dy) {
- return candidate.orientation;
- }
- }
- return null;
- }
-
- /**
- * Translates the specified math transform according the specified pixel orientations.
+ * <div class="note"><b>Example:</b>
+ * if a given {@code gridToCRS} was mapping the pixel corner to "real world" coordinates, then a call to
+ * <code>translate(gridToCRS, {@link PixelInCell#CELL_CORNER}, {@link PixelInCell#CELL_CENTER})</code>
+ * will return a new transform performing the following steps:
+ * <ol>
+ * <li>Translate the grid coordinates by +0.5, so that the (0,0) coordinate in "pixel center" convention
+ * map to (½,½) in "pixel corner" convention.</li>
+ * <li>Apply the transform described by the "pixel corner" convention.</li>
+ * </ol></div>
+ *
+ * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+ * Otherwise {@code current} and {@code expected} arguments must be non-null.
*
- * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS.
+ * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
* @param expected the pixel orientation of the desired transform.
- * @return the translation from {@code current} to {@code expected}.
+ * @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
*/
public static MathTransform translate(final MathTransform gridToCRS, final PixelInCell current, final PixelInCell expected) {
- if (Objects.equals(current, expected)) {
+ if (gridToCRS == null || expected.equals(current)) {
return gridToCRS;
}
- if (gridToCRS == null) {
- return null;
- }
final int dimension = gridToCRS.getSourceDimensions();
final double offset = getPixelTranslation(expected) - getPixelTranslation(current);
- final int index;
+ final int ci; // Cache index.
if (offset == -0.5) {
- index = 2*dimension;
+ ci = 2*dimension - 2;
} else if (offset == 0.5) {
- index = 2*dimension + 1;
+ ci = 2*dimension - 1;
} else {
- index = translations.length;
+ ci = -1;
}
MathTransform mt;
- if (index >= translations.length) {
+ if (ci < 0 || ci >= translations.length) {
mt = translate(dimension, offset);
} else synchronized (translations) {
- mt = translations[index];
+ mt = translations[ci];
if (mt == null) {
mt = translate(dimension, offset);
- translations[index] = mt;
+ translations[ci] = mt;
}
}
return MathTransforms.concatenate(mt, gridToCRS);
}
/**
- * Translates the specified math transform according the specified pixel orientations.
+ * Converts a math transform from a "pixel orientation" convention to another "pixel orientation" convention.
+ * This method concatenates −½, 0 or +½ translations on <em>two</em> dimensions before the given transform.
+ * The given transform can have any number of input and output dimensions, but only two of them will be converted.
*
- * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS.
+ * <div class="note"><b>Example:</b>
+ * if a given {@code gridToCRS} was mapping the upper-left corner to "real world" coordinates, then a call to
+ * <code>translate(gridToCRS, {@link PixelOrientation#UPPER_LEFT}, {@link PixelOrientation#CENTER}, 0, 1)</code>
+ * will return a new transform performing the following steps:
+ * <ol>
+ * <li>Translate the grid coordinates by +0.5, so that the (0,0) coordinate in "pixel center" convention
+ * map to (½,½) in "upper-left corner" convention. This translation is applied only in the specified
+ * grid (source) dimensions; all other dimensions (if any) are left unchanged.</li>
+ * <li>Apply the transform described by the "upper-left corner" convention.</li>
+ * </ol></div>
+ *
+ * If the given {@code gridToCRS} is null, then this method ignores all other arguments and returns {@code null}.
+ * Otherwise {@code current} and {@code expected} arguments must be non-null.
+ *
+ * @param gridToCRS a math transform from <cite>pixel</cite> coordinates to any CRS, or {@code null}.
* @param current the pixel orientation of the given {@code gridToCRS} transform.
* @param expected the pixel orientation of the desired transform.
* @param xDimension the dimension of <var>x</var> coordinates (pixel columns). Often 0.
* @param yDimension the dimension of <var>y</var> coordinates (pixel rows). Often 1.
- * @return the translation from {@code current} to {@code expected}.
+ * @return the translation from {@code current} to {@code expected}, or {@code null} if {@code gridToCRS} was null.
*/
public static MathTransform translate(final MathTransform gridToCRS,
- final PixelOrientation current,
- final PixelOrientation expected,
- final int xDimension,
- final int yDimension)
+ final PixelOrientation current, final PixelOrientation expected,
+ final int xDimension, final int yDimension)
{
- if (Objects.equals(current, expected)) {
+ if (gridToCRS == null || expected.equals(current)) {
return gridToCRS;
}
- if (gridToCRS == null) {
- return null;
- }
final int dimension = gridToCRS.getSourceDimensions();
if (xDimension < 0 || xDimension >= dimension) {
throw illegalDimension("xDimension", xDimension);
@@ -304,12 +317,12 @@ public final class PixelTranslation extends Static implements Serializable {
final double dy = target.dy - source.dy;
MathTransform mt;
if (dimension == 2 && (xDimension | yDimension) == 1 && dx == dy && Math.abs(dx) == 0.5) {
- final int index = (dx >= 0) ? 5 : 4;
+ final int ci = (dx >= 0) ? 3 : 2;
synchronized (translations) {
- mt = translations[index];
+ mt = translations[ci];
if (mt == null) {
mt = translate(dimension, dx);
- translations[index] = mt;
+ translations[ci] = mt;
}
}
} else {
diff --git a/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java
new file mode 100644
index 0000000..cefeeb7
--- /dev/null
+++ b/core/sis-raster/src/test/java/org/apache/sis/coverage/grid/PixelTranslationTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.coverage.grid;
+
+import org.opengis.metadata.spatial.PixelOrientation;
+import org.opengis.referencing.datum.PixelInCell;
+import org.opengis.referencing.operation.MathTransform;
+import org.apache.sis.referencing.operation.transform.MathTransforms;
+import org.apache.sis.referencing.operation.matrix.Matrix3;
+import org.apache.sis.referencing.operation.matrix.Matrix4;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+import static org.opengis.test.Assert.*;
+
+
+/**
+ * Tests {@link PixelTranslation}.
+ *
+ * @author Martin Desruisseaux (IRD, Geomatys)
+ * @version 1.0
+ * @since 1.0
+ * @module
+ */
+public final strictfp class PixelTranslationTest extends TestCase {
+ /**
+ * Returns a transform from center to corner with the given number of dimensions.
+ */
+ private static MathTransform centerToCorner(final int dimension) {
+ return PixelTranslation.translate(MathTransforms.identity(dimension), PixelInCell.CELL_CENTER, PixelInCell.CELL_CORNER);
+ }
+
+ /**
+ * Returns a transform from center to corner in the two-dimensional case.
+ */
+ private static MathTransform centerToCorner2D() {
+ return PixelTranslation.translate(MathTransforms.identity(2), PixelOrientation.CENTER, PixelOrientation.UPPER_LEFT, 0, 1);
+ }
+
+ /**
+ * Tests {@link PixelTranslation#translate(MathTransform, PixelInCell, PixelInCell)}.
+ */
+ @Test
+ public void testTranslatePixelInCell() {
+ final MathTransform mt = centerToCorner(3);
+ assertMatrixEquals("center → corner", new Matrix4(
+ 1, 0, 0, -0.5,
+ 0, 1, 0, -0.5,
+ 0, 0, 1, -0.5,
+ 0, 0, 0, 1), MathTransforms.getMatrix(mt), STRICT);
+ }
+
+ /**
+ * Tests {@link PixelTranslation#translate(MathTransform, PixelOrientation, PixelOrientation, int, int)}.
+ */
+ @Test
+ public void testTranslatePixelOrientation() {
+ MathTransform mt = centerToCorner2D();
+ assertMatrixEquals("center → corner", new Matrix3(
+ 1, 0, -0.5,
+ 0, 1, -0.5,
+ 0, 0, 1), MathTransforms.getMatrix(mt), STRICT);
+
+ mt = PixelTranslation.translate(MathTransforms.identity(3), PixelOrientation.LOWER_LEFT, PixelOrientation.CENTER, 1, 2);
+ assertMatrixEquals("center → corner", new Matrix4(
+ 1, 0, 0, 0.0,
+ 0, 1, 0, +0.5,
+ 0, 0, 1, -0.5,
+ 0, 0, 0, 1), MathTransforms.getMatrix(mt), STRICT);
+ }
+
+ /**
+ * Verifies consistency of cached transforms when using translations inferred from {@link PixelInCell}.
+ */
+ @Test
+ public void testCache() {
+ MathTransform previous = null;
+ for (int dimension = 1; dimension <= 5; dimension++) {
+ final MathTransform mt = centerToCorner(dimension);
+ assertNotSame("Transforms with different number of dimensions.", previous, mt);
+ assertSame("Transforms with same number of dimensions", mt, centerToCorner(dimension));
+ previous = mt;
+ }
+ }
+
+ /**
+ * Verifies consistency of cached transforms when using translations inferred from {@link PixelOrientation}.
+ */
+ @Test
+ public void testCache2D() {
+ assertSame(centerToCorner(2), centerToCorner2D());
+ assertSame(PixelTranslation.translate(MathTransforms.identity(2), PixelInCell.CELL_CORNER, PixelInCell.CELL_CENTER),
+ PixelTranslation.translate(MathTransforms.identity(2), PixelOrientation.UPPER_LEFT, PixelOrientation.CENTER, 0, 1));
+ }
+}
diff --git a/core/sis-raster/src/test/java/org/apache/sis/image/DefaultIteratorTest.java b/core/sis-raster/src/test/java/org/apache/sis/image/DefaultIteratorTest.java
index 2fbd77f..d916eaf 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/image/DefaultIteratorTest.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/image/DefaultIteratorTest.java
@@ -41,8 +41,8 @@ import static org.junit.Assert.*;
*
* @author Rémi Maréchal (Geomatys)
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
public strictfp class DefaultIteratorTest extends TestCase {
diff --git a/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java b/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
index 1d4de31..24c99c4 100644
--- a/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
+++ b/core/sis-raster/src/test/java/org/apache/sis/test/suite/RasterTestSuite.java
@@ -25,12 +25,13 @@ import org.junit.BeforeClass;
* All tests from the {@code sis-raster} module, in approximative dependency order.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.8
- * @since 0.8
+ * @version 1.0
+ * @since 1.0
* @module
*/
@Suite.SuiteClasses({
- org.apache.sis.image.DefaultIteratorTest.class
+ org.apache.sis.image.DefaultIteratorTest.class,
+ org.apache.sis.coverage.grid.PixelTranslationTest.class
})
public final strictfp class RasterTestSuite extends TestSuite {
/**
--
To stop receiving notification emails like this one, please contact
desruisseaux@apache.org.