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 2019/01/07 20:12:51 UTC
[sis] 02/02: Make easier for external applications to extend
SampleDimension.Builder.
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 97e5b065ab939f99f410022c75a951b7c8f002f9
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Mon Jan 7 19:07:29 2019 +0100
Make easier for external applications to extend SampleDimension.Builder.
---
.../java/org/apache/sis/coverage/Category.java | 45 ++++++++++++++++++----
.../java/org/apache/sis/coverage/CategoryList.java | 2 +-
.../org/apache/sis/coverage/SampleDimension.java | 12 +++++-
3 files changed, 49 insertions(+), 10 deletions(-)
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/Category.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/Category.java
index 1f0a7e3..7f94c5b 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/Category.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/Category.java
@@ -171,20 +171,51 @@ public class Category implements Serializable {
final Category converse;
/**
- * Creates a copy of the given category except for the {@link #toConverse} function which is set to identity.
- * This is used only if a user specify a {@code ConvertedCategory} to {@link SampleDimension} constructor.
- * Such converted category can only come from another {@code SampleDimension} and may have inconsistent
- * information for the new sample dimension that the user is creating.
+ * Creates a copy of the given category. This constructor is provided for subclasses
+ * wanting to extent an existing category with custom information.
*
* @param copy the category to copy.
*/
- Category(final Category copy) {
+ protected Category(final Category copy) {
name = copy.name;
range = copy.range;
minimum = copy.minimum;
maximum = copy.maximum;
- toConverse = identity();
- converse = this;
+ toConverse = copy.toConverse;
+ if (copy.converse == copy) {
+ converse = this;
+ } else {
+ converse = new Category(copy.converse, this);
+ }
+ }
+
+ /**
+ * Creates a copy of the given category except for the {@link #converse} and {@link #toConverse} fields.
+ * This constructor serves two purposes:
+ * <ul>
+ * <li>If {@code caller} is null, then {@link #toConverse} is is set to identity.
+ * This is used only if a user specify a {@code ConvertedCategory} to {@link SampleDimension} constructor.
+ * Such converted category can only come from another {@code SampleDimension} and may have inconsistent
+ * information for the new sample dimension that the user is creating.</li>
+ * <li>If {@code caller} is non-null, then {@link #toConverse} is set to the same transform than {@code copy} and
+ * {@link #converse} is set to {@code caller}. This is used only as a complement for the copy constructor.</li>
+ * </ul>
+ *
+ * @param copy the category to copy.
+ * @param caller the converse, or {@code null} for {@code this}.
+ */
+ Category(final Category copy, final Category caller) {
+ name = copy.name;
+ range = copy.range;
+ minimum = copy.minimum;
+ maximum = copy.maximum;
+ if (caller != null) {
+ toConverse = copy.toConverse;
+ converse = caller;
+ } else {
+ toConverse = identity();
+ converse = this;
+ }
}
/**
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/CategoryList.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/CategoryList.java
index 13d7818..f008311 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/CategoryList.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/CategoryList.java
@@ -150,7 +150,7 @@ final class CategoryList extends AbstractList<Category> implements MathTransform
for (int i=0; i<categories.length; i++) {
final Category c = categories[i];
if (c instanceof ConvertedCategory) {
- categories[i] = new Category(c);
+ categories[i] = new Category(c, null);
}
}
}
diff --git a/core/sis-raster/src/main/java/org/apache/sis/coverage/SampleDimension.java b/core/sis-raster/src/main/java/org/apache/sis/coverage/SampleDimension.java
index 6294919..7cda99c 100644
--- a/core/sis-raster/src/main/java/org/apache/sis/coverage/SampleDimension.java
+++ b/core/sis-raster/src/main/java/org/apache/sis/coverage/SampleDimension.java
@@ -517,9 +517,17 @@ public class SampleDimension implements Serializable {
private Number background;
/**
- * The categories for this sample dimension.
+ * The categories for the sample dimension to create.
+ * This list is modified by the following methods:
+ *
+ * <ul>
+ * <li>{@link #setBackground(CharSequence, Number)}</li>
+ * <li>{@link #addQualitative(CharSequence, NumberRange)}</li>
+ * <li>{@link #addQuantitative(CharSequence, NumberRange, MathTransform1D, Unit)}</li>
+ * <li>{@link #clear()}</li>
+ * </ul>
*/
- private final List<Category> categories;
+ protected final List<Category> categories;
/**
* The ordinal NaN values used for this sample dimension.