Author: desruisseaux
Date: Thu May 29 19:36:40 2014
New Revision: 1598380
URL: http://svn.apache.org/r1598380
Log:
DefaultAssociationRole now implements FeatureAssociationRole.
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/MultiValuedAssociation.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractAssociation.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -27,6 +27,7 @@ import org.apache.sis.util.resources.Err
// Branch-dependent imports
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -57,16 +58,16 @@ public abstract class AbstractAssociatio
/**
* Information about the association.
*/
- final DefaultAssociationRole role;
+ final FeatureAssociationRole role;
/**
* Creates a new association of the given role.
*
* @param role Information about the association.
*
- * @see #create(DefaultAssociationRole)
+ * @see #create(FeatureAssociationRole)
*/
- protected AbstractAssociation(final DefaultAssociationRole role) {
+ protected AbstractAssociation(final FeatureAssociationRole role) {
this.role = role;
}
@@ -76,7 +77,7 @@ public abstract class AbstractAssociatio
* @param role Information about the association.
* @return The new association.
*/
- public static AbstractAssociation create(final DefaultAssociationRole
role) {
+ public static AbstractAssociation create(final FeatureAssociationRole
role) {
ArgumentChecks.ensureNonNull("role", role);
return isSingleton(role.getMaximumOccurs())
? new SingletonAssociation(role)
@@ -90,7 +91,7 @@ public abstract class AbstractAssociatio
* @param value The initial value (may be {@code null}).
* @return The new association.
*/
- static AbstractAssociation create(final DefaultAssociationRole role, final
Object value) {
+ static AbstractAssociation create(final FeatureAssociationRole role, final
Object value) {
ArgumentChecks.ensureNonNull("role", role);
return isSingleton(role.getMaximumOccurs())
? new SingletonAssociation(role, (AbstractFeature) value)
@@ -99,7 +100,7 @@ public abstract class AbstractAssociatio
/**
* Returns the name of this association as defined by its {@linkplain
#getRole() role}.
- * This convenience method delegates to {@link
DefaultAssociationRole#getName()}.
+ * This convenience method delegates to {@link
FeatureAssociationRole#getName()}.
*
* @return The association name specified by its role.
*/
@@ -111,12 +112,9 @@ public abstract class AbstractAssociatio
/**
* Returns information about the association.
*
- * <div class="warning"><b>Warning:</b> In a future SIS version, the
return type may be changed
- * to {@code org.opengis.feature.AssociationRole}. This change is pending
GeoAPI revision.</div>
- *
* @return Information about the association.
*/
- public DefaultAssociationRole getRole() {
+ public FeatureAssociationRole getRole() {
return role;
}
@@ -225,7 +223,7 @@ public abstract class AbstractAssociatio
@Debug
@Override
public String toString() {
- final String pt = role.getTitleProperty();
+ final String pt = DefaultAssociationRole.getTitleProperty(role);
final Iterator<AbstractFeature> it = getValues().iterator();
return FieldType.toString("FeatureAssociation", role,
role.getValueType().getName(), new Iterator<Object>() {
@Override public boolean hasNext() {
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -32,6 +32,7 @@ import org.apache.sis.internal.util.Chec
import org.opengis.feature.PropertyType;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -175,8 +176,8 @@ public abstract class AbstractFeature im
final PropertyType pt = type.getProperty(name);
if (pt instanceof AttributeType<?>) {
return AbstractAttribute.create((AttributeType<?>) pt, value);
- } else if (pt instanceof DefaultAssociationRole) {
- return AbstractAssociation.create((DefaultAssociationRole) pt,
value);
+ } else if (pt instanceof FeatureAssociationRole) {
+ return AbstractAssociation.create((FeatureAssociationRole) pt,
value);
} else {
// Should never happen, unless the user gave us some mutable
FeatureType.
throw new
CorruptedObjectException(Errors.format(Errors.Keys.UnknownType_1, pt));
@@ -194,8 +195,8 @@ public abstract class AbstractFeature im
final PropertyType pt = type.getProperty(name);
if (pt instanceof AttributeType<?>) {
return AbstractAttribute.create((AttributeType<?>) pt);
- } else if (pt instanceof DefaultAssociationRole) {
- return AbstractAssociation.create((DefaultAssociationRole) pt);
+ } else if (pt instanceof FeatureAssociationRole) {
+ return AbstractAssociation.create((FeatureAssociationRole) pt);
} else {
throw unsupportedPropertyType(pt.getName());
}
@@ -213,7 +214,7 @@ public abstract class AbstractFeature im
final PropertyType pt = type.getProperty(name);
if (pt instanceof AttributeType<?>) {
return getDefaultValue((AttributeType<?>) pt);
- } else if (pt instanceof DefaultAssociationRole) {
+ } else if (pt instanceof FeatureAssociationRole) {
return null; // No default value for associations.
} else {
throw unsupportedPropertyType(pt.getName());
@@ -343,7 +344,7 @@ public abstract class AbstractFeature im
@SuppressWarnings("unchecked")
private static void setAssociationValue(final AbstractAssociation
association, final Object value) {
if (value != null) {
- final DefaultAssociationRole role = association.getRole();
+ final FeatureAssociationRole role = association.getRole();
final FeatureType base = role.getValueType();
if (value instanceof AbstractFeature) {
final FeatureType actual = ((AbstractFeature) value).getType();
@@ -413,9 +414,9 @@ public abstract class AbstractFeature im
if (value != null) {
return verifyAttributeValue((AttributeType<?>) pt, value);
}
- } else if (pt instanceof DefaultAssociationRole) {
+ } else if (pt instanceof FeatureAssociationRole) {
if (value != null) {
- return verifyAssociationValue((DefaultAssociationRole) pt,
value);
+ return verifyAssociationValue((FeatureAssociationRole) pt,
value);
}
} else {
throw unsupportedPropertyType(pt.getName());
@@ -455,7 +456,7 @@ public abstract class AbstractFeature im
*
* @param value The value, which shall be non-null.
*/
- private static Object verifyAssociationValue(final DefaultAssociationRole
role, final Object value) {
+ private static Object verifyAssociationValue(final FeatureAssociationRole
role, final Object value) {
final boolean isSingleton = Field.isSingleton(role.getMaximumOccurs());
if (value instanceof AbstractFeature) {
/*
@@ -480,7 +481,7 @@ public abstract class AbstractFeature im
/**
* Verifies if all values in the given collection are valid instances of
feature for the given association role.
*/
- private static void verifyAssociationValues(final DefaultAssociationRole
role, final Collection<?> values) {
+ private static void verifyAssociationValues(final FeatureAssociationRole
role, final Collection<?> values) {
final FeatureType base = role.getValueType();
int index = 0;
for (final Object value : values) {
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultAssociationRole.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -27,6 +27,7 @@ import static org.apache.sis.util.Argume
import org.opengis.feature.PropertyType;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -53,7 +54,7 @@ import org.opengis.feature.FeatureType;
*
* @see AbstractAssociation
*/
-public class DefaultAssociationRole extends FieldType {
+public class DefaultAssociationRole extends FieldType implements
FeatureAssociationRole {
/**
* For cross-version compatibility.
*/
@@ -131,30 +132,42 @@ public class DefaultAssociationRole exte
*
* @return The type of feature values.
*/
+ @Override
public final FeatureType getValueType() {
return valueType;
}
/**
* Returns the name of the property to use as a title for the associated
feature, or {@code null} if none.
- * This method search for the first attribute having a value class
assignable to {@link CharSequence}.
+ * This method searches for the first attribute having a value class
assignable to {@link CharSequence}.
+ */
+ static String getTitleProperty(final FeatureAssociationRole role) {
+ if (role instanceof DefaultAssociationRole) {
+ String p = ((DefaultAssociationRole) role).titleProperty; // No
synchronization - not a big deal if computed twice.
+ if (p != null) {
+ return p.isEmpty() ? null : p;
+ }
+ p = searchTitleProperty(role);
+ ((DefaultAssociationRole) role).titleProperty = (p != null) ? p :
"";
+ return p;
+ }
+ return searchTitleProperty(role);
+ }
+
+ /**
+ * Implementation of {@link #getTitleProperty(FeatureAssociationRole)} for
first search,
+ * or for non-SIS {@code FeatureAssociationRole} implementations.
*/
- final String getTitleProperty() {
- String p = titleProperty; // No synchronization - not a big deal if
computed twice.
- if (p == null) {
- p = "";
- for (final PropertyType type : valueType.getProperties(true)) {
- if (type instanceof AttributeType<?>) {
- final AttributeType<?> pt = (AttributeType<?>) type;
- if (pt.getMaximumOccurs() != 0 &&
CharSequence.class.isAssignableFrom(pt.getValueClass())) {
- p = pt.getName().toString();
- break;
- }
+ private static String searchTitleProperty(final FeatureAssociationRole
role) {
+ for (final PropertyType type :
role.getValueType().getProperties(true)) {
+ if (type instanceof AttributeType<?>) {
+ final AttributeType<?> pt = (AttributeType<?>) type;
+ if (pt.getMaximumOccurs() != 0 &&
CharSequence.class.isAssignableFrom(pt.getValueClass())) {
+ return pt.getName().toString();
}
}
- titleProperty = p;
}
- return p.isEmpty() ? null : p;
+ return null;
}
/**
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/DefaultFeatureType.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -40,6 +40,7 @@ import java.util.Objects;
import org.opengis.feature.PropertyType;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -500,12 +501,12 @@ public class DefaultFeatureType extends
return false;
}
}
- if (base instanceof DefaultAssociationRole) {
- if (!(other instanceof DefaultAssociationRole)) {
+ if (base instanceof FeatureAssociationRole) {
+ if (!(other instanceof FeatureAssociationRole)) {
return false;
}
- final DefaultAssociationRole p0 = (DefaultAssociationRole)
base;
- final DefaultAssociationRole p1 = (DefaultAssociationRole)
other;
+ final FeatureAssociationRole p0 = (FeatureAssociationRole)
base;
+ final FeatureAssociationRole p1 = (FeatureAssociationRole)
other;
if (p0.getMinimumOccurs() > p1.getMinimumOccurs() ||
p0.getMaximumOccurs() < p1.getMaximumOccurs())
{
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/FeatureFormat.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -37,6 +37,7 @@ import org.opengis.feature.IdentifiedTyp
import org.opengis.feature.PropertyType;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -222,8 +223,8 @@ header: for (int i=0; ; i++) {
valueClass = pt.getValueClass();
valueType = getFormat(Class.class).format(valueClass,
buffer, dummyFP).toString();
buffer.setLength(0);
- } else if (propertyType instanceof DefaultAssociationRole) {
- final DefaultAssociationRole pt = (DefaultAssociationRole)
propertyType;
+ } else if (propertyType instanceof FeatureAssociationRole) {
+ final FeatureAssociationRole pt = (FeatureAssociationRole)
propertyType;
minimumOccurs = pt.getMinimumOccurs();
maximumOccurs = pt.getMaximumOccurs();
valueType = toString(pt.getValueType().getName());
@@ -264,11 +265,15 @@ header: for (int i=0; ; i++) {
value = format.format(value, buffer, dummyFP);
} else if (value instanceof InternationalString) {
value = ((InternationalString)
value).toString(displayLocale);
- } else if (value instanceof AbstractFeature && propertyType
instanceof DefaultAssociationRole) {
- value = ((AbstractFeature) value).getPropertyValue(
- ((DefaultAssociationRole)
propertyType).getTitleProperty());
+ } else if (value instanceof AbstractFeature && propertyType
instanceof FeatureAssociationRole) {
+ final String p =
DefaultAssociationRole.getTitleProperty((FeatureAssociationRole) propertyType);
+ if (p != null) {
+ value = ((AbstractFeature) value).getPropertyValue(p);
+ }
+ }
+ if (value != null) {
+ table.append(value.toString());
}
- table.append(value.toString());
buffer.setLength(0);
}
table.nextLine();
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/MultiValuedAssociation.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/MultiValuedAssociation.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/MultiValuedAssociation.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/MultiValuedAssociation.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -23,6 +23,7 @@ import org.apache.sis.util.resources.Err
// Branch-dependent imports
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -63,7 +64,7 @@ final class MultiValuedAssociation exten
*
* @param role Information about the association.
*/
- public MultiValuedAssociation(final DefaultAssociationRole role) {
+ public MultiValuedAssociation(final FeatureAssociationRole role) {
super(role);
values = new CheckedArrayList<>(AbstractFeature.class);
}
@@ -74,7 +75,7 @@ final class MultiValuedAssociation exten
* @param role Information about the association.
* @param values The initial values, or {@code null} for initializing to
an empty list.
*/
- MultiValuedAssociation(final DefaultAssociationRole role, final Object
values) {
+ MultiValuedAssociation(final FeatureAssociationRole role, final Object
values) {
super(role);
if (values == null) {
this.values = new CheckedArrayList<>(AbstractFeature.class);
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/SingletonAssociation.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -16,8 +16,9 @@
*/
package org.apache.sis.feature;
-// Related to JDK7
+// Branch-dependent imports
import java.util.Objects;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -55,7 +56,7 @@ final class SingletonAssociation extends
*
* @param role Information about the association.
*/
- public SingletonAssociation(final DefaultAssociationRole role) {
+ public SingletonAssociation(final FeatureAssociationRole role) {
super(role);
assert isSingleton(role.getMaximumOccurs());
}
@@ -66,7 +67,7 @@ final class SingletonAssociation extends
* @param role Information about the association.
* @param value The initial value (may be {@code null}).
*/
- SingletonAssociation(final DefaultAssociationRole role, final
AbstractFeature value) {
+ SingletonAssociation(final FeatureAssociationRole role, final
AbstractFeature value) {
super(role);
assert isSingleton(role.getMaximumOccurs());
this.value = value;
Modified:
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/Validator.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -35,6 +35,7 @@ import org.apache.sis.util.resources.Err
import org.opengis.feature.PropertyType;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
+import org.opengis.feature.FeatureAssociationRole;
/**
@@ -116,9 +117,9 @@ final class Validator {
validate((AttributeType<?>) type, asList(value,
((AttributeType<?>) type).getMaximumOccurs()));
}
- if (type instanceof DefaultAssociationRole) {
- validate((DefaultAssociationRole) type, asList(value,
- ((DefaultAssociationRole) type).getMaximumOccurs()));
+ if (type instanceof FeatureAssociationRole) {
+ validate((FeatureAssociationRole) type, asList(value,
+ ((FeatureAssociationRole) type).getMaximumOccurs()));
}
}
@@ -145,7 +146,7 @@ final class Validator {
/**
* Verifies if the given value is valid for the given association role.
*/
- void validate(final DefaultAssociationRole role, final Collection<?>
values) {
+ void validate(final FeatureAssociationRole role, final Collection<?>
values) {
AbstractElement report = null;
for (final Object value : values) {
final FeatureType type = ((AbstractFeature) value).getType();
Modified:
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
URL:
http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java?rev=1598380&r1=1598379&r2=1598380&view=diff
==============================================================================
---
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
[UTF-8] (original)
+++
sis/branches/JDK8/core/sis-feature/src/test/java/org/apache/sis/feature/DefaultAssociationRoleTest.java
[UTF-8] Thu May 29 19:36:40 2014
@@ -52,12 +52,12 @@ public final strictfp class DefaultAssoc
}
/**
- * Tests {@link DefaultAssociationRole#getTitleProperty()}.
+ * Tests {@link
DefaultAssociationRole#getTitleProperty(FeatureAssociationRole)}.
*/
@Test
public void testGetTitleProperty() {
final DefaultAssociationRole twinTown = twinTown();
- assertEquals("city", twinTown.getTitleProperty());
+ assertEquals("city",
DefaultAssociationRole.getTitleProperty(twinTown));
}
/**