sis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From desruisse...@apache.org
Subject svn commit: r1795334 - in /sis/branches/JDK8/core: sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
Date Tue, 16 May 2017 15:58:40 GMT
Author: desruisseaux
Date: Tue May 16 15:58:40 2017
New Revision: 1795334

URL: http://svn.apache.org/viewvc?rev=1795334&view=rev
Log:
Give protected access to AbstractFeature.get|setOperationValue(…) for easier usage by subclasses
defined outside Apache SIS.

Modified:
    sis/branches/JDK8/core/sis-feature/src/main/java/org/apache/sis/feature/AbstractFeature.java
    sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java

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=1795334&r1=1795333&r2=1795334&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] Tue May 16 15:58:40 2017
@@ -248,6 +248,8 @@ public abstract class AbstractFeature im
 
     /**
      * Executes the parameterless operation of the given name and returns its result.
+     *
+     * @see #getOperationValue(String)
      */
     final Property getOperationResult(final String name) {
         /*
@@ -260,41 +262,6 @@ public abstract class AbstractFeature im
     }
 
     /**
-     * Executes the parameterless operation of the given name and returns the value of its
result.
-     */
-    final Object getOperationValue(final String name) {
-        final Operation operation = (Operation) type.getProperty(name);
-        if (operation instanceof LinkOperation) {
-            return getPropertyValue(((LinkOperation) operation).referentName);
-        }
-        final Property result = operation.apply(this, null);
-        if (result instanceof Attribute<?>) {
-            return getAttributeValue((Attribute<?>) result);
-        } else if (result instanceof FeatureAssociation) {
-            return getAssociationValue((FeatureAssociation) result);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Executes the parameterless operation of the given name and sets the value of its result.
-     */
-    final void setOperationValue(final String name, final Object value) {
-        final Operation operation = (Operation) type.getProperty(name);
-        if (operation instanceof LinkOperation) {
-            setPropertyValue(((LinkOperation) operation).referentName, value);
-        } else {
-            final Property result = operation.apply(this, null);
-            if (result != null) {
-                setPropertyValue(result, value);
-            } else {
-                throw new IllegalStateException(Resources.format(Resources.Keys.CanNotSetPropertyValue_1,
name));
-            }
-        }
-    }
-
-    /**
      * Returns the default value to be returned by {@link #getPropertyValue(String)}
      * for the property of the given name.
      *
@@ -387,6 +354,73 @@ public abstract class AbstractFeature im
     public abstract void setPropertyValue(final String name, final Object value) throws IllegalArgumentException;
 
     /**
+     * Executes the parameterless operation of the given name and returns the value of its
result.
+     * This is a convenience method for sub-classes where some properties may be operations
that
+     * {@linkplain AbstractOperation#getDependencies() depend} on other properties of this
{@code Feature} instance
+     * (for example a {@linkplain FeatureOperations#link link} to another property value).
+     * Invoking this method is equivalent to performing the following steps:
+     *
+     * {@preformat java
+     *     Operation operation = (Operation) type.getProperty(name);
+     *     Property result = operation.apply(this, null);
+     *     if (result instanceof Attribute<?>) {
+     *         return ...;                                      // the attribute value.
+     *     } else if (result instanceof FeatureAssociation) {
+     *         return ...;                                      // the associated feature.
+     *     } else {
+     *         return null;
+     *     }
+     * }
+     *
+     * @param  name  the name of the operation to execute. The caller is responsible to ensure
that the
+     *               property type for that name is an instance of {@link Operation}.
+     * @return the result value of the given operation, or {@code null} if none.
+     *
+     * @since 0.8
+     */
+    protected Object getOperationValue(final String name) {
+        final Operation operation = (Operation) type.getProperty(name);
+        if (operation instanceof LinkOperation) {
+            return getPropertyValue(((LinkOperation) operation).referentName);
+        }
+        final Property result = operation.apply(this, null);
+        if (result instanceof Attribute<?>) {
+            return getAttributeValue((Attribute<?>) result);
+        } else if (result instanceof FeatureAssociation) {
+            return getAssociationValue((FeatureAssociation) result);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Executes the parameterless operation of the given name and sets the value of its result.
+     * This method is the complement of {@link #getOperationValue(String)} for subclasses
where
+     * some properties may be operations. Not all operations accept assignments,
+     * but the {@linkplain FeatureOperations#link link} operation for instance does.
+     *
+     * @param  name   the name of the operation to execute. The caller is responsible to
ensure that the
+     *                property type for that name is an instance of {@link Operation}.
+     * @param  value  the value to assign to the result of the named operation.
+     * @throws IllegalStateException if the operation of the given name does not accept assignment.
+     *
+     * @since 0.8
+     */
+    protected void setOperationValue(final String name, final Object value) {
+        final Operation operation = (Operation) type.getProperty(name);
+        if (operation instanceof LinkOperation) {
+            setPropertyValue(((LinkOperation) operation).referentName, value);
+        } else {
+            final Property result = operation.apply(this, null);
+            if (result != null) {
+                setPropertyValue(result, value);
+            } else {
+                throw new IllegalStateException(Resources.format(Resources.Keys.CanNotSetPropertyValue_1,
name));
+            }
+        }
+    }
+
+    /**
      * Returns the value of the given attribute, as a singleton or as a collection depending
      * on the maximum number of occurrences.
      */

Modified: sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
URL: http://svn.apache.org/viewvc/sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java?rev=1795334&r1=1795333&r2=1795334&view=diff
==============================================================================
--- sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
[UTF-8] (original)
+++ sis/branches/JDK8/core/sis-metadata/src/test/java/org/apache/sis/metadata/sql/MetadataWriterTest.java
[UTF-8] Tue May 16 15:58:40 2017
@@ -19,11 +19,9 @@ package org.apache.sis.metadata.sql;
 import javax.sql.DataSource;
 import org.postgresql.ds.PGSimpleDataSource;
 import org.opengis.metadata.citation.Citation;
-import org.opengis.metadata.citation.Responsibility;
 import org.opengis.metadata.citation.PresentationForm;
 import org.opengis.metadata.citation.OnLineFunction;
 import org.opengis.metadata.citation.OnlineResource;
-import org.opengis.metadata.citation.Party;
 import org.opengis.metadata.citation.Role;
 import org.apache.sis.internal.metadata.sql.TestDatabase;
 import org.apache.sis.metadata.iso.citation.HardCodedCitations;
@@ -36,6 +34,10 @@ import org.junit.Test;
 
 import static org.junit.Assert.*;
 
+// Branch-dependent imports
+import org.opengis.metadata.citation.Party;
+import org.opengis.metadata.citation.Responsibility;
+
 
 /**
  * Creates a metadata database, stores a few elements and read them back.



Mime
View raw message