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 6f65c2bacd120b81235735611fb0480383e9670e Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Sat Sep 23 14:00:05 2023 +0200 Remove the boolean return value in WritableFeatureSet.removeIf(Predicate) https://issues.apache.org/jira/browse/SIS-560 --- .../org/apache/sis/storage/gpx/WritableStore.java | 7 ++++--- .../sis/storage/xml/stream/RewriteOnUpdate.java | 22 +++++----------------- .../org/apache/sis/storage/gpx/UpdaterTest.java | 4 +--- .../org/apache/sis/storage/WritableFeatureSet.java | 14 ++------------ 4 files changed, 12 insertions(+), 35 deletions(-) diff --git a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java index a04fc2742e..2fd3599554 100644 --- a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java +++ b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/gpx/WritableStore.java @@ -40,7 +40,7 @@ import org.opengis.feature.FeatureType; * * @author Johann Sorel (Geomatys) * @author Martin Desruisseaux (Geomatys) - * @version 1.3 + * @version 1.4 * @since 1.3 */ public final class WritableStore extends Store implements WritableFeatureSet { @@ -95,9 +95,10 @@ public final class WritableStore extends Store implements WritableFeatureSet { * @throws DataStoreException if the feature stream cannot be obtained or updated. */ @Override - public synchronized boolean removeIf(final Predicate<? super Feature> filter) throws DataStoreException { + public synchronized void removeIf(final Predicate<? super Feature> filter) throws DataStoreException { try (Updater updater = updater()) { - return updater.removeIf(filter); + updater.removeIf(filter); + updater.flush(); } } diff --git a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java index cf1e77ac84..60ba5e50a4 100644 --- a/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java +++ b/endorsed/src/org.apache.sis.storage.xml/main/org/apache/sis/storage/xml/stream/RewriteOnUpdate.java @@ -161,29 +161,17 @@ public abstract class RewriteOnUpdate implements AutoCloseable { * Removes all feature instances from the {@code FeatureSet} which matches the given predicate. * * @param filter a predicate which returns {@code true} for feature instances to be removed. - * @return {@code true} if any elements were removed. * @throws DataStoreException if the feature stream cannot be obtained or updated. */ - public boolean removeIf(final Predicate<? super Feature> filter) throws DataStoreException { + public void removeIf(final Predicate<? super Feature> filter) throws DataStoreException { ArgumentChecks.ensureNonNull("filter", filter); - if (isEmpty()) { - return false; + if (!isEmpty()) { + filtered = filtered().filter((feature) -> { + return !filter.test(feature); + }); } - filtered = filtered().filter((feature) -> { - boolean r = filter.test(feature); - if (r) modified = true; - return !r; - }); - modified = false; - flush(); // Need immediate execution for getting the boolean value. - return modified; } - /** - * A flag telling whether {@link #removeIf(Predicate)} removed at least one feature. - */ - private boolean modified; - /** * Updates all feature instances from the {@code FeatureSet} which match the given predicate. * If the given operator returns {@code null}, then the filtered feature is removed. diff --git a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java index 7d7f9c4ff1..d15c85c75a 100644 --- a/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java +++ b/endorsed/src/org.apache.sis.storage.xml/test/org/apache/sis/storage/gpx/UpdaterTest.java @@ -165,14 +165,12 @@ public final class UpdaterTest extends TestCase { Files.copy(in, file, StandardCopyOption.REPLACE_EXISTING); } assertTrue(containsLat20()); - final boolean result; try (final WritableStore store = create()) { - result = store.removeIf((feature) -> { + store.removeIf((feature) -> { Object point = feature.getPropertyValue("sis:geometry"); return ((Point) point).getY() == 20; }); } - assertTrue(result); assertFalse(containsLat20()); } diff --git a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java index c6641cc256..14820d87da 100644 --- a/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java +++ b/endorsed/src/org.apache.sis.storage/main/org/apache/sis/storage/WritableFeatureSet.java @@ -32,7 +32,7 @@ import org.opengis.feature.FeatureType; * or {@linkplain #replaceIf(Predicate, UnaryOperator) replace} feature instances. * * @author Johann Sorel (Geomatys) - * @version 1.0 + * @version 1.4 * @since 1.0 */ public interface WritableFeatureSet extends FeatureSet { @@ -80,21 +80,11 @@ public interface WritableFeatureSet extends FeatureSet { /** * Removes all feature instances from this {@code FeatureSet} which matches the given predicate. * - * <div class="warning"><b>Possible API change:</b> - * The {@code boolean} return type may be removed in a future version. - * It currently exists for compatibility with the {@link java.util.Collection#removeIf(Predicate)} method - * if an implementation chooses to implements {@code WritableFeatureSet} and {@link java.util.Collection} - * in same time. But this is not recommended, and the current method signature is a blocker for deferred - * method execution. Telling if there is any feature to remove requires immediate execution of the filter, - * while an implementation may want to wait in case the filtering can be combined with other operations - * such as {@code add(…)} or {@code replaceIf(…)}. - * See <a href="https://issues.apache.org/jira/browse/SIS-560">SIS-560 on issue tracker</a>.</div> - * * @param filter a predicate which returns {@code true} for feature instances to be removed. * @return {@code true} if any elements were removed. * @throws DataStoreException if an error occurred while removing features. */ - boolean removeIf(Predicate<? super Feature> filter) throws DataStoreException; + void removeIf(Predicate<? super Feature> filter) throws DataStoreException; /** * Updates all feature instances from this {@code FeatureSet} which match the given predicate.