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 2017/04/19 21:57:12 UTC
svn commit: r1791995 [2/2] - in /sis/trunk: ./
core/sis-feature/src/main/java/org/apache/sis/feature/
core/sis-feature/src/main/java/org/apache/sis/feature/builder/
core/sis-feature/src/main/java/org/apache/sis/internal/feature/
core/sis-feature/src/te...
Modified: sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/ScalarTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/ScalarTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/ScalarTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/ScalarTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -82,7 +82,7 @@ public final strictfp class ScalarTest e
/**
* Tests {@link Scalar#multiply(Quantity)}, {@link Scalar#divide(Quantity)} and {@link Quantity#inverse()}.
- * Those tests depend on proper working of {@link Units#quantity(double, Unit)}, which depends in turn on
+ * Those tests depend on proper working of {@link Quantities#create(double, Unit)}, which depends in turn on
* proper declarations of {@link ScalarFactory} in {@link Units} initialization.
*/
@Test
Modified: sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/test/java/org/apache/sis/measure/UnitFormatTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -265,6 +265,7 @@ public final strictfp class UnitFormatTe
assertSame(Units.DEGREE, f.parse("degree"));
assertSame(Units.DEGREE, f.parse("degrees"));
assertSame(Units.DEGREE, f.parse("decimal degrees"));
+ assertSame(Units.DEGREE, f.parse("Degrees North"));
assertSame(Units.DEGREE, f.parse("degrees north"));
assertSame(Units.DEGREE, f.parse("degree north"));
assertSame(Units.DEGREE, f.parse("degrees_east"));
Modified: sis/trunk/core/sis-utility/src/test/java/org/apache/sis/util/iso/NamesTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/core/sis-utility/src/test/java/org/apache/sis/util/iso/NamesTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/core/sis-utility/src/test/java/org/apache/sis/util/iso/NamesTest.java [UTF-8] (original)
+++ sis/trunk/core/sis-utility/src/test/java/org/apache/sis/util/iso/NamesTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -27,6 +27,7 @@ import org.opengis.util.NameSpace;
import org.opengis.util.ScopedName;
import org.apache.sis.util.UnknownNameException;
import org.apache.sis.internal.system.DefaultFactories;
+import org.apache.sis.test.DependsOnMethod;
import org.apache.sis.test.DependsOn;
import org.apache.sis.test.TestCase;
import org.junit.Test;
@@ -38,13 +39,28 @@ import static org.junit.Assert.*;
* Tests the {@link Names} class.
*
* @author Martin Desruisseaux (Geomatys)
- * @version 0.5
+ * @version 0.8
* @since 0.5
* @module
*/
@DependsOn(DefaultNameFactoryTest.class)
public final strictfp class NamesTest extends TestCase {
/**
+ * Tests {@link Names#createScopedName(GenericName, String, CharSequence)}.
+ */
+ @Test
+ @DependsOnMethod("testCreateLocalName")
+ public void testCreateScopedName() {
+ final LocalName scope = Names.createLocalName("Apache", null, "sis");
+ final ScopedName name = Names.createScopedName(scope, null, "identifier");
+ assertSame ("path()", scope, name.path());
+ assertEquals("tail()", "identifier", name.tail().toString());
+ assertEquals("toString()", "sis:identifier", name.toString());
+ assertEquals("full", "Apache:sis:identifier", name.toFullyQualifiedName().toString());
+ assertEquals("tail().full", "Apache:sis:identifier", name.tail().toFullyQualifiedName().toString());
+ }
+
+ /**
* Tests {@link Names#createLocalName(CharSequence, String, CharSequence)}.
*/
@Test
Modified: sis/trunk/pom.xml
URL: http://svn.apache.org/viewvc/sis/trunk/pom.xml?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/pom.xml (original)
+++ sis/trunk/pom.xml Wed Apr 19 21:57:11 2017
@@ -610,7 +610,7 @@ Apache SIS is a free software, Java lang
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.19.1</version>
+ <version>2.20</version>
<configuration>
<includes>
<include>**/*TestSuite.java</include>
Modified: sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureNaming.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureNaming.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureNaming.java [UTF-8] (original)
+++ sis/trunk/storage/sis-storage/src/main/java/org/apache/sis/storage/FeatureNaming.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -103,11 +103,12 @@ import org.apache.sis.internal.jdk8.JDK8
public class FeatureNaming<E> {
/**
* All aliases found for all names given to the {@link #add(DataStore, GenericName, Object)} method.
- * Keys are aliases (never the explicitely given names) and values are names for which the key is an alias.
+ * Keys are aliases and values are the complete names for which the key is an alias.
* Each {@code List<String>} instance contains exactly one name if there is no ambiguity.
* If the list contains more than one name, this means that the alias is ambiguous.
*
- * <p>Note that this map always have less entries than {@link #values} map.</p>
+ * <p>For saving space in common cases, a missing entry in this map is interpreted as synonymous of
+ * {@code (name, Collections.singletonList(name))} entry.</p>
*/
private final Map<String, List<String>> aliases;
@@ -188,27 +189,47 @@ public class FeatureNaming<E> {
ArgumentChecks.ensureNonNull("name", name);
ArgumentChecks.ensureNonNull("value", value);
final String key = name.toString();
- if (JDK8.putIfAbsent(values, key, value) != null) {
- throw new IllegalNameException(locale(store), Resources.Keys.FeatureAlreadyPresent_2, name(store), key);
+ final E previous = values.put(key, value);
+ if (previous != null) {
+ final List<String> fullNames = aliases.get(key); // Null is synonymous of singletonList(key).
+ if (fullNames == null || fullNames.contains(key)) {
+ /*
+ * If we already had a value for the given name and if that value was associated to a user-specified
+ * name (not to an alias of that name), then we have a name collision. Restore the previous value.
+ */
+ if (values.put(key, previous) != value) {
+ throw new ConcurrentModificationException(name(store).toString()); // Paranoiac check.
+ }
+ throw new IllegalNameException(locale(store), Resources.Keys.FeatureAlreadyPresent_2, name(store), key);
+ }
+ CollectionsExt.addToMultiValuesMap(aliases, key, key);
}
+ /*
+ * At this point we associated the value to the given name. Now try to associate the same value to all aliases.
+ * In this process, we may discover that some slots are already filled by other values.
+ */
while (name instanceof ScopedName) {
name = ((ScopedName) name).tail();
final String alias = name.toString();
- if (CollectionsExt.addToMultiValuesMap(aliases, alias, key).size() > 1) {
+ final List<String> fullNames = CollectionsExt.addToMultiValuesMap(aliases, alias, key);
+ if (fullNames.size() > 1) {
/*
* If there is more than one GenericName for the same alias, we have an ambiguity.
- * Remove any value associated to that alias. The 'get' method in this class will
- * know that the value is missing because of ambiguous name.
+ * Remove any value associated to that alias, unless the value was associated to
+ * exactly the user-specified name (not an alias). The 'get' method in this class
+ * will know when the value is missing because of ambiguous name.
*/
- values.remove(alias);
- } else if (values.put(alias, value) != null) {
+ if (!fullNames.contains(alias)) {
+ values.remove(alias);
+ }
+ } else if (JDK8.putIfAbsent(values, alias, value) != null) {
/*
- * If no previous GenericName existed for that alias, then no value should exist for that alias.
- * If a previous value existed, then (assuming that we do not have a bug in our algorithm) this
- * object changed in a concurrent thread during this method execution. We do not try to detect
- * all such errors, but this check is an easy one to perform opportunistically.
+ * If a value already existed for that alias but the alias was not declared in the 'aliases' map,
+ * this means that the list was implicitly Collections.singletonList(key). Since we now have an
+ * additional value, we need to add explicitly the previously implicit value.
*/
- throw new ConcurrentModificationException(name(store).toString());
+ assert !fullNames.contains(alias) : alias;
+ CollectionsExt.addToMultiValuesMap(aliases, alias, alias);
}
}
}
@@ -225,16 +246,28 @@ public class FeatureNaming<E> {
* representation, but for which {@link ScopedName#tail()} returns different values.
*/
public boolean remove(final DataStore store, GenericName name) throws IllegalNameException {
- ArgumentChecks.ensureNonNull("name", name);
+ ArgumentChecks.ensureNonNull("name", name);
final String key = name.toString();
if (values.remove(key) == null) {
return false;
}
+ List<String> remaining = CollectionsExt.removeFromMultiValuesMap(aliases, key, key);
+ if (remaining != null && remaining.size() == 1) {
+ /*
+ * If there is exactly one remaining element, that element is a non-ambiguous alias.
+ * So we can associate the value to that alias.
+ */
+ final String select = remaining.get(0);
+ assert !select.equals(key) : select; // Should have been removed by removeFromMultiValuesMap(\u2026).
+ if (values.put(key, values.get(select)) != null) {
+ throw new ConcurrentModificationException(name(store).toString()); // Paranoiac check.
+ }
+ }
boolean error = false;
while (name instanceof ScopedName) {
name = ((ScopedName) name).tail();
final String alias = name.toString();
- final List<String> remaining = CollectionsExt.removeFromMultiValuesMap(aliases, alias, key);
+ remaining = CollectionsExt.removeFromMultiValuesMap(aliases, alias, key);
/*
* The list of remaining GenericNames may be empty but should never be null unless the tail
* is inconsistent with the one found by the 'add(\u2026) method. Otherwise if there is exactly
Modified: sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/storage/FeatureNamingTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/storage/FeatureNamingTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/storage/FeatureNamingTest.java [UTF-8] (original)
+++ sis/trunk/storage/sis-storage/src/test/java/org/apache/sis/storage/FeatureNamingTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -23,6 +23,7 @@ import org.apache.sis.util.iso.Names;
import org.junit.Test;
import static org.junit.Assert.*;
+import org.opengis.util.LocalName;
/**
@@ -125,6 +126,39 @@ public final strictfp class FeatureNamin
}
/**
+ * Tests two names having the same tip, but where only one of the two names have a namespace.
+ *
+ * @throws IllegalNameException if an unexpected error occurred while adding or getting an element.
+ */
+ @Test
+ @DependsOnMethod("testAmbiguity")
+ public void testQualifiedAndUnqualifiedName() throws IllegalNameException {
+ final DataStoreMock store = new DataStoreMock("testDataStore");
+ final LocalName local = Names.createLocalName(null, null, "A");
+ FeatureNaming<Integer> map = new FeatureNaming<>();
+ map.add(store, local, 3);
+ map.add(store, A, 2);
+ map.add(store, B, 5);
+ map.add(store, otherA, 7);
+ assertEquals("B", Integer.valueOf(5), map.get(store, "B"));
+ assertEquals("A", Integer.valueOf(3), map.get(store, "A"));
+ assertEquals("myNS:A", Integer.valueOf(2), map.get(store, "myNS:A"));
+ assertEquals("other:A", Integer.valueOf(7), map.get(store, "other:A"));
+ /*
+ * Same tests, but with elements added in different order.
+ */
+ map = new FeatureNaming<>();
+ map.add(store, otherA, 7);
+ map.add(store, B, 5);
+ map.add(store, A, 2);
+ map.add(store, local, 3);
+ assertEquals("B", Integer.valueOf(5), map.get(store, "B"));
+ assertEquals("A", Integer.valueOf(3), map.get(store, "A"));
+ assertEquals("myNS:A", Integer.valueOf(2), map.get(store, "myNS:A"));
+ assertEquals("other:A", Integer.valueOf(7), map.get(store, "other:A"));
+ }
+
+ /**
* Tests removing an entry. It should change the state about whether an alias is ambiguous or not.
*
* @throws IllegalNameException if an unexpected error occurred while adding or getting an element.
Modified: sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/GroupAsPolylineOperation.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -164,7 +164,7 @@ class GroupAsPolylineOperation extends A
boolean isFirst = true;
geometry = new Polyline();
for (final Object child : (Collection<?>) feature.getPropertyValue(association)) {
- addGeometry(geometry, ((AbstractFeature) child).getPropertyValue("@geometry"), isFirst);
+ addGeometry(geometry, ((AbstractFeature) child).getPropertyValue("sis:geometry"), isFirst);
isFirst = false;
}
}
Modified: sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Reader.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Reader.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Reader.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Reader.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -109,7 +109,7 @@ final class Reader extends StaxStreamRea
* Returns {@code true} if the given namespace is a GPX namespace or is null.
*/
private static boolean isGPX(final String ns) {
- return (ns == null) || ns.startsWith(Tags.NAMESPACE + "/GPX/");
+ return (ns == null) || ns.startsWith(Tags.NAMESPACE);
}
/**
@@ -414,8 +414,8 @@ parse: while (reader.hasNext()) {
(lat == null) ? Attributes.LATITUDE : Attributes.LONGITUDE, tagName));
}
final AbstractFeature feature = ((Store) owner).types.wayPoint.newInstance();
- feature.setPropertyValue("@identifier", index);
- feature.setPropertyValue("@geometry", new Point(parseDouble(lon), parseDouble(lat)));
+ feature.setPropertyValue("sis:identifier", index);
+ feature.setPropertyValue("sis:geometry", new Point(parseDouble(lon), parseDouble(lat)));
List<Link> links = null;
while (true) {
/*
@@ -479,7 +479,7 @@ parse: while (reader.hasNext()) {
private AbstractFeature parseRoute(final int index) throws Exception {
assert reader.isStartElement() && Tags.ROUTES.equals(reader.getLocalName());
final AbstractFeature feature = ((Store) owner).types.route.newInstance();
- feature.setPropertyValue("@identifier", index);
+ feature.setPropertyValue("sis:identifier", index);
List<AbstractFeature> wayPoints = null;
List<Link> links = null;
while (true) {
@@ -535,7 +535,7 @@ parse: while (reader.hasNext()) {
private AbstractFeature parseTrackSegment(final int index) throws Exception {
assert reader.isStartElement() && Tags.TRACK_SEGMENTS.equals(reader.getLocalName());
final AbstractFeature feature = ((Store) owner).types.trackSegment.newInstance();
- feature.setPropertyValue("@identifier", index);
+ feature.setPropertyValue("sis:identifier", index);
List<AbstractFeature> wayPoints = null;
while (true) {
/*
@@ -578,7 +578,7 @@ parse: while (reader.hasNext()) {
private AbstractFeature parseTrack(final int index) throws Exception {
assert reader.isStartElement() && Tags.TRACKS.equals(reader.getLocalName());
final AbstractFeature feature = ((Store) owner).types.track.newInstance();
- feature.setPropertyValue("@identifier", index);
+ feature.setPropertyValue("sis:identifier", index);
List<AbstractFeature> segments = null;
List<Link> links = null;
while (true) {
Modified: sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Tags.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Tags.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Tags.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Tags.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -33,17 +33,22 @@ final class Tags extends Static {
/**
* GPX scope name used for feature type names.
*/
- static final String NAMESPACE = "http://www.topografix.com";
+ static final String PREFIX = "gpx";
+
+ /**
+ * GPX XML namespace (common root to all versions).
+ */
+ static final String NAMESPACE = "http://www.topografix.com/GPX/";
/**
* GPX 1.0 XML namespace (v1.0).
*/
- static final String NAMESPACE_V10 = "http://www.topografix.com/GPX/1/0";
+ static final String NAMESPACE_V10 = NAMESPACE + "1/0";
/**
* GPX 1.1 XML namespace (v1.1).
*/
- static final String NAMESPACE_V11 = "http://www.topografix.com/GPX/1/1";
+ static final String NAMESPACE_V11 = NAMESPACE + "1/1";
/** Main GPX XML tags. */ static final String GPX = "gpx";
/** A tag used a bit everywhere. */ static final String NAME = "name";
Modified: sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Types.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -21,7 +21,7 @@ import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import com.esri.core.geometry.Point;
-import org.opengis.util.LocalName;
+import org.opengis.util.ScopedName;
import org.opengis.util.NameFactory;
import org.opengis.util.FactoryException;
import org.opengis.metadata.citation.OnlineResource;
@@ -108,55 +108,55 @@ final class Types extends Static {
* @throws FactoryException if an error occurred while creating an "envelope bounds" operation.
*/
Types(final NameFactory factory, final Locale locale) throws FactoryException, IllegalNameException {
- final LocalName geomName = AttributeConvention.GEOMETRY_PROPERTY;
+ final ScopedName geomName = AttributeConvention.GEOMETRY_PROPERTY;
final Map<String,?> geomInfo = Collections.singletonMap(AbstractIdentifiedType.NAME_KEY, geomName);
final Map<String,?> envpInfo = Collections.singletonMap(AbstractIdentifiedType.NAME_KEY, AttributeConvention.ENVELOPE_PROPERTY);
/*
* The parent of all FeatureTypes to be created in this constructor.
- * This parent has a single property, "@identifier" of type Integer,
+ * This parent has a single property, "sis:identifier" of type Integer,
* which is not part of GPX specification.
*
- * http://www.topografix.com/GPX/GPXEntity
- * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
- * \u2502 Name \u2502 Type \u2502 Cardinality \u2502
- * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
- * \u2502 @identifier \u2502 Integer \u2502 [1 \u2026 1] \u2502 SIS-specific property
- * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
+ * GPXEntity
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
+ * \u2502 Name \u2502 Type \u2502 Cardinality \u2502
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
+ * \u2502 sis:identifier \u2502 Integer \u2502 [1 \u2026 1] \u2502 SIS-specific property
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
*/
FeatureTypeBuilder builder = new FeatureTypeBuilder(null, factory, locale);
- builder.setDefaultScope(Tags.NAMESPACE).setName("GPXEntity").setAbstract(true);
+ builder.setNameSpace(Tags.PREFIX).setName("GPXEntity").setAbstract(true);
builder.addAttribute(Integer.class).setName(AttributeConvention.IDENTIFIER_PROPERTY);
final DefaultFeatureType parent = builder.build();
/*
- * http://www.topografix.com/GPX/WayPoint \u21fe GPXEntity
- * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
- * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
- * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
- * \u2502 @identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @geometry \u2502 Point \u2502 (lat,lon) attributes \u2502 [1 \u2026 1] \u2502
- * \u2502 ele \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 time \u2502 Temporal \u2502 xsd:dateTime \u2502 [0 \u2026 1] \u2502
- * \u2502 magvar \u2502 Double \u2502 gpx:degreesType \u2502 [0 \u2026 1] \u2502
- * \u2502 geoidheight \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
- * \u2502 sym \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 fix \u2502 Fix \u2502 gpx:fixType \u2502 [0 \u2026 1] \u2502
- * \u2502 sat \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
- * \u2502 hdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 vdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 pdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 ageofdgpsdata \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
- * \u2502 dgpsid \u2502 Integer \u2502 gpx:dgpsStationType \u2502 [0 \u2026 1] \u2502
- * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
+ * WayPoint \u21fe GPXEntity
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
+ * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
+ * \u2502 sis:identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:geometry \u2502 Point \u2502 (lat,lon) attributes \u2502 [1 \u2026 1] \u2502
+ * \u2502 ele \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 time \u2502 Temporal \u2502 xsd:dateTime \u2502 [0 \u2026 1] \u2502
+ * \u2502 magvar \u2502 Double \u2502 gpx:degreesType \u2502 [0 \u2026 1] \u2502
+ * \u2502 geoidheight \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2502 sym \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 fix \u2502 Fix \u2502 gpx:fixType \u2502 [0 \u2026 1] \u2502
+ * \u2502 sat \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
+ * \u2502 hdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 vdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 pdop \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 ageofdgpsdata \u2502 Double \u2502 xsd:decimal \u2502 [0 \u2026 1] \u2502
+ * \u2502 dgpsid \u2502 Integer \u2502 gpx:dgpsStationType \u2502 [0 \u2026 1] \u2502
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
*/
builder = new FeatureTypeBuilder(null, factory, locale).setSuperTypes(parent);
- builder.setDefaultScope(Tags.NAMESPACE).setName("WayPoint");
+ builder.setNameSpace(Tags.PREFIX).setName("WayPoint");
builder.addAttribute(Point.class).setName(geomName)
.setCRS(CommonCRS.WGS84.normalizedGeographic())
.addRole(AttributeRole.DEFAULT_GEOMETRY);
@@ -181,26 +181,26 @@ final class Types extends Static {
builder.addAttribute(Integer .class).setName(Tags.DGPS_ID);
wayPoint = builder.build();
/*
- * http://www.topografix.com/GPX/Route \u21fe GPXEntity
- * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
- * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
- * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
- * \u2502 @identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
- * \u2502 number \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
- * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 rtept \u2502 WayPoint \u2502 gpx:wptType \u2502 [0 \u2026 \u221e] \u2502
- * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
+ * Route \u21fe GPXEntity
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
+ * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
+ * \u2502 sis:identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2502 number \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
+ * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 rtept \u2502 WayPoint \u2502 gpx:wptType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
*/
GroupAsPolylineOperation groupOp = new GroupPointsAsPolylineOperation(geomInfo, Tags.ROUTE_POINTS);
builder = new FeatureTypeBuilder(null, factory, locale).setSuperTypes(parent);
- builder.setDefaultScope(Tags.NAMESPACE).setName("Route");
+ builder.setNameSpace(Tags.PREFIX).setName("Route");
builder.addProperty(groupOp);
builder.addProperty(FeatureOperations.envelope(envpInfo, null, groupOp));
builder.setDefaultCardinality(0, 1);
@@ -214,45 +214,45 @@ final class Types extends Static {
builder.addAssociation(wayPoint).setName(Tags.ROUTE_POINTS).setMaximumOccurs(Integer.MAX_VALUE);
route = builder.build();
/*
- * http://www.topografix.com/GPX/TrackSegment \u21fe GPXEntity
- * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
- * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
- * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
- * \u2502 @identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 trkpt \u2502 WayPoint \u2502 gpx:wptType \u2502 [0 \u2026 \u221e] \u2502
- * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
+ * TrackSegment \u21fe GPXEntity
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
+ * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
+ * \u2502 sis:identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 trkpt \u2502 WayPoint \u2502 gpx:wptType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
*/
groupOp = new GroupPointsAsPolylineOperation(geomInfo, Tags.TRACK_POINTS);
builder = new FeatureTypeBuilder(null, factory, locale).setSuperTypes(parent);
- builder.setDefaultScope(Tags.NAMESPACE).setName("TrackSegment");
+ builder.setNameSpace(Tags.PREFIX).setName("TrackSegment");
builder.addProperty(groupOp);
builder.addProperty(FeatureOperations.envelope(envpInfo, null, groupOp));
builder.setDefaultCardinality(0, 1);
builder.addAssociation(wayPoint).setName(Tags.TRACK_POINTS).setMaximumOccurs(Integer.MAX_VALUE);
trackSegment = builder.build();
/*
- * http://www.topografix.com/GPX/Track \u21fe GPXEntity
- * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
- * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
- * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
- * \u2502 @identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 @geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
- * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
- * \u2502 number \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
- * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
- * \u2502 trkseg \u2502 TrackSegment \u2502 gpx:trksegType \u2502 [0 \u2026 \u221e] \u2502
- * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
+ * Track \u21fe GPXEntity
+ * \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510
+ * \u2502 Name \u2502 Type \u2502 XML type \u2502 Cardinality \u2502
+ * \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524
+ * \u2502 sis:identifier \u2502 Integer \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:envelope \u2502 Envelope \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 sis:geometry \u2502 Polyline \u2502 \u2502 [1 \u2026 1] \u2502
+ * \u2502 name \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 cmt \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 desc \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 src \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 link \u2502 OnlineResource \u2502 gpx:linkType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2502 number \u2502 Integer \u2502 xsd:nonNegativeInteger \u2502 [0 \u2026 1] \u2502
+ * \u2502 type \u2502 String \u2502 xsd:string \u2502 [0 \u2026 1] \u2502
+ * \u2502 trkseg \u2502 TrackSegment \u2502 gpx:trksegType \u2502 [0 \u2026 \u221e] \u2502
+ * \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518
*/
groupOp = new GroupAsPolylineOperation(geomInfo, Tags.TRACK_SEGMENTS);
builder = new FeatureTypeBuilder(null, factory, locale).setSuperTypes(parent);
- builder.setDefaultScope(Tags.NAMESPACE).setName("Track");
+ builder.setNameSpace(Tags.PREFIX).setName("Track");
builder.addProperty(groupOp);
builder.addProperty(FeatureOperations.envelope(envpInfo, null, groupOp));
builder.setDefaultCardinality(0, 1);
Modified: sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Writer.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Writer.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Writer.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/main/java/org/apache/sis/internal/storage/gpx/Writer.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -191,7 +191,7 @@ final class Writer extends StaxStreamWri
*/
private void writeWayPoint(final AbstractFeature feature, final String tagName) throws XMLStreamException, JAXBException {
if (feature != null) {
- final Point pt = (Point) feature.getPropertyValue("@geometry");
+ final Point pt = (Point) feature.getPropertyValue("sis:geometry");
writer.writeStartElement(tagName);
writer.writeAttribute(Attributes.LATITUDE, Double.toString(pt.getY()));
writer.writeAttribute(Attributes.LONGITUDE, Double.toString(pt.getX()));
Modified: sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/ReaderTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/ReaderTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/ReaderTest.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/ReaderTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -23,6 +23,7 @@ import com.esri.core.geometry.Point;
import com.esri.core.geometry.Polyline;
import org.opengis.geometry.Envelope;
import org.opengis.metadata.content.FeatureCatalogueDescription;
+import org.apache.sis.setup.OptionKey;
import org.apache.sis.storage.gps.Fix;
import org.apache.sis.storage.StorageConnector;
import org.apache.sis.storage.DataStoreException;
@@ -334,12 +335,12 @@ public final strictfp class ReaderTest e
verifyPoint((AbstractFeature) points.get(1), 1, v11);
verifyPoint((AbstractFeature) points.get(2), 2, v11);
- final Polyline p = (Polyline) f.getPropertyValue("@geometry");
+ final Polyline p = (Polyline) f.getPropertyValue("sis:geometry");
assertEquals("pointCount", 3, p.getPointCount());
assertEquals("point(0)", new Point(15, 10), p.getPoint(0));
assertEquals("point(1)", new Point(25, 20), p.getPoint(1));
assertEquals("point(2)", new Point(35, 30), p.getPoint(2));
- assertEnvelopeEquals(15, 35, 10, 30, (Envelope) f.getPropertyValue("@envelope"));
+ assertEnvelopeEquals(15, 35, 10, 30, (Envelope) f.getPropertyValue("sis:envelope"));
}
/**
@@ -358,7 +359,7 @@ public final strictfp class ReaderTest e
assertTrue( "links.isEmpty()", ((Collection<?>) f.getPropertyValue("link" )).isEmpty());
assertTrue("points.isEmpty()", ((Collection<?>) f.getPropertyValue(dep)).isEmpty());
- assertNull("@envelope", f.getPropertyValue("@envelope"));
+ assertNull("sis:envelope", f.getPropertyValue("sis:envelope"));
}
/**
@@ -438,12 +439,12 @@ public final strictfp class ReaderTest e
verifyPoint((AbstractFeature) points.get(2), 2, v11);
assertTrue(((Collection<?>) seg2.getPropertyValue("trkpt")).isEmpty());
- final Polyline p = (Polyline) f.getPropertyValue("@geometry");
+ final Polyline p = (Polyline) f.getPropertyValue("sis:geometry");
assertEquals("pointCount", 3, p.getPointCount());
assertEquals("point(0)", new Point(15, 10), p.getPoint(0));
assertEquals("point(1)", new Point(25, 20), p.getPoint(1));
assertEquals("point(2)", new Point(35, 30), p.getPoint(2));
- assertEnvelopeEquals(15, 35, 10, 30, (Envelope) f.getPropertyValue("@envelope"));
+ assertEnvelopeEquals(15, 35, 10, 30, (Envelope) f.getPropertyValue("sis:envelope"));
}
/**
@@ -454,12 +455,12 @@ public final strictfp class ReaderTest e
* @param v11 {@code true} for GPX 1.1, or {@code false} for GPX 1.0.
*/
private static void verifyPoint(final AbstractFeature f, final int index, final boolean v11) {
- assertEquals("@identifier", index + 1, f.getPropertyValue("@identifier"));
+ assertEquals("sis:identifier", index + 1, f.getPropertyValue("sis:identifier"));
switch (index) {
case 0: {
assertEquals(Instant.parse("2010-01-10T00:00:00Z"), f.getPropertyValue("time"));
- assertEquals("x", 15.0, ((Point) f.getPropertyValue("@geometry")).getX(), STRICT);
- assertEquals("y", 10.0, ((Point) f.getPropertyValue("@geometry")).getY(), STRICT);
+ assertEquals("x", 15.0, ((Point) f.getPropertyValue("sis:geometry")).getX(), STRICT);
+ assertEquals("y", 10.0, ((Point) f.getPropertyValue("sis:geometry")).getY(), STRICT);
assertEquals("ele", 140.0, f.getPropertyValue("ele"));
assertEquals("magvar", 35.0, f.getPropertyValue("magvar"));
assertEquals("geoidheight", 112.32, f.getPropertyValue("geoidheight"));
@@ -483,12 +484,12 @@ public final strictfp class ReaderTest e
assertStringEquals("http://first-address2.org", links.get(1));
assertStringEquals("http://first-address3.org", links.get(2));
}
- assertEnvelopeEquals(15, 15, 10, 10, (Envelope) f.getPropertyValue("@envelope"));
+ assertEnvelopeEquals(15, 15, 10, 10, (Envelope) f.getPropertyValue("sis:envelope"));
break;
}
case 1: {
- assertEquals("x", 25, ((Point)f.getPropertyValue("@geometry")).getX(), STRICT);
- assertEquals("y", 20, ((Point)f.getPropertyValue("@geometry")).getY(), STRICT);
+ assertEquals("x", 25, ((Point)f.getPropertyValue("sis:geometry")).getX(), STRICT);
+ assertEquals("y", 20, ((Point)f.getPropertyValue("sis:geometry")).getY(), STRICT);
assertNull("ele", f.getPropertyValue("ele"));
assertNull("time", f.getPropertyValue("time"));
assertNull("magvar", f.getPropertyValue("magvar"));
@@ -507,13 +508,13 @@ public final strictfp class ReaderTest e
assertNull("ageofdgpsdata", f.getPropertyValue("ageofdgpsdata"));
assertNull("dgpsid", f.getPropertyValue("dgpsid"));
assertTrue("links.isEmpty()", ((List<?>) f.getPropertyValue("link")).isEmpty());
- assertEnvelopeEquals(25, 25, 20, 20, (Envelope) f.getPropertyValue("@envelope"));
+ assertEnvelopeEquals(25, 25, 20, 20, (Envelope) f.getPropertyValue("sis:envelope"));
break;
}
case 2: {
assertEquals(Instant.parse("2010-01-30T00:00:00Z"), f.getPropertyValue("time"));
- assertEquals("x", 35.0, ((Point) f.getPropertyValue("@geometry")).getX(), STRICT);
- assertEquals("y", 30.0, ((Point) f.getPropertyValue("@geometry")).getY(), STRICT);
+ assertEquals("x", 35.0, ((Point) f.getPropertyValue("sis:geometry")).getX(), STRICT);
+ assertEquals("y", 30.0, ((Point) f.getPropertyValue("sis:geometry")).getY(), STRICT);
assertEquals("ele", 150.0, f.getPropertyValue("ele"));
assertEquals("magvar", 25.0, f.getPropertyValue("magvar"));
assertEquals("geoidheight", 142.32, f.getPropertyValue("geoidheight"));
@@ -536,7 +537,7 @@ public final strictfp class ReaderTest e
if (v11) {
assertStringEquals("http://third-address2.org", links.get(1));
}
- assertEnvelopeEquals(35, 35, 30, 30, (Envelope) f.getPropertyValue("@envelope"));
+ assertEnvelopeEquals(35, 35, 30, 30, (Envelope) f.getPropertyValue("sis:envelope"));
break;
}
default: {
@@ -565,7 +566,9 @@ public final strictfp class ReaderTest e
* Using the URL makes easier for the data store to read the same data more than once.
*/
private static Store createFromURL() throws DataStoreException {
- return new Store(provider, new StorageConnector(ReaderTest.class.getResource("1.1/route.xml")));
+ final StorageConnector connector = new StorageConnector(ReaderTest.class.getResource("1.1/route.xml"));
+ connector.setOption(OptionKey.URL_ENCODING, "UTF-8");
+ return new Store(provider, connector);
}
/**
Modified: sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java
URL: http://svn.apache.org/viewvc/sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java?rev=1791995&r1=1791994&r2=1791995&view=diff
==============================================================================
--- sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java [UTF-8] (original)
+++ sis/trunk/storage/sis-xmlstore/src/test/java/org/apache/sis/internal/storage/gpx/WriterTest.java [UTF-8] Wed Apr 19 21:57:11 2017
@@ -252,7 +252,7 @@ public final strictfp class WriterTest e
* Appear also in "route.xml" and "track.xml" files.
*/
final AbstractFeature point1 = types.wayPoint.newInstance();
- point1.setPropertyValue("@geometry", new Point(15, 10));
+ point1.setPropertyValue("sis:geometry", new Point(15, 10));
point1.setPropertyValue("time", Instant.parse("2010-01-10T00:00:00Z"));
point1.setPropertyValue("name", "first point");
point1.setPropertyValue("cmt", "first comment");
@@ -274,7 +274,7 @@ public final strictfp class WriterTest e
new Link(new URI("http://first-address2.org")),
new Link(new URI("http://first-address3.org"))));
final AbstractFeature point3 = types.wayPoint.newInstance();
- point3.setPropertyValue("@geometry", new Point(35, 30));
+ point3.setPropertyValue("sis:geometry", new Point(35, 30));
point3.setPropertyValue("time", Instant.parse("2010-01-30T00:00:00Z"));
point3.setPropertyValue("name", "third point");
point3.setPropertyValue("cmt", "third comment");
@@ -295,7 +295,7 @@ public final strictfp class WriterTest e
point3.setPropertyValue("link", Arrays.asList(new Link(new URI("http://third-address1.org")),
new Link(new URI("http://third-address2.org"))));
final AbstractFeature point2 = types.wayPoint.newInstance();
- point2.setPropertyValue("@geometry", new Point(25, 20));
+ point2.setPropertyValue("sis:geometry", new Point(25, 20));
final List<AbstractFeature> wayPoints = Arrays.asList(point1, point2, point3);
final List<AbstractFeature> features;
switch (type) {