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 2023/07/01 11:20:33 UTC
[sis] 03/04: Add a placeholder for a JAXB adapter for expressions, then verifies that current JAXB annotations are valid.
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 d38b17c046b889b1457ca83b071bcc467a4dec02
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Fri Jun 30 10:46:13 2023 +0200
Add a placeholder for a JAXB adapter for expressions,
then verifies that current JAXB annotations are valid.
---
core/sis-portrayal/pom.xml | 5 ++
.../java/org/apache/sis/style/se1/ElseFilter.java | 51 ++++++++++++++++
.../apache/sis/style/se1/ExpressionAdapter.java | 50 +++++++++++++++
.../main/java/org/apache/sis/style/se1/Rule.java | 15 +++++
.../org/apache/sis/style/se1/package-info.java | 71 ++++++++++++++++++++++
.../java/org/apache/sis/style/se1/XmlTest.java | 50 +++++++++++++++
6 files changed, 242 insertions(+)
diff --git a/core/sis-portrayal/pom.xml b/core/sis-portrayal/pom.xml
index 521d22b4f7..d599f2e4fe 100644
--- a/core/sis-portrayal/pom.xml
+++ b/core/sis-portrayal/pom.xml
@@ -141,6 +141,11 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.glassfish.jaxb</groupId>
+ <artifactId>jaxb-runtime</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ElseFilter.java b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ElseFilter.java
new file mode 100644
index 0000000000..a6e4fce3f5
--- /dev/null
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ElseFilter.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.style.se1;
+
+import jakarta.xml.bind.annotation.XmlType;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+
+/**
+ * The element to marshall when no other rule matches the conditions.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.5
+ * @since 1.5
+ */
+@XmlType(name = "ElseFilterType")
+@XmlRootElement(name = "ElseFilter")
+final class ElseFilter {
+ /**
+ * The singleton instance.
+ */
+ static final ElseFilter INSTANCE = new ElseFilter();
+
+ /**
+ * Creates the singleton instance.
+ */
+ private ElseFilter() {
+ }
+
+ /**
+ * Returns a string representation of this element.
+ */
+ @Override
+ public String toString() {
+ return "ElseFilter";
+ }
+}
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ExpressionAdapter.java b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ExpressionAdapter.java
new file mode 100644
index 0000000000..97d24dfbaf
--- /dev/null
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/ExpressionAdapter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.style.se1;
+
+import jakarta.xml.bind.annotation.adapters.XmlAdapter;
+
+// Branch-dependent imports
+import org.opengis.feature.Feature;
+import org.opengis.filter.Expression;
+
+
+/**
+ * Adapter for expression in style.
+ * This is a place-holder for future work.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.5
+ * @since 1.5
+ */
+final class ExpressionAdapter extends XmlAdapter<String, Expression<Feature,?>> {
+ /**
+ * Creates an adapter.
+ */
+ public ExpressionAdapter() {
+ }
+
+ @Override
+ public String marshal(Expression<Feature,?> value) {
+ return null;
+ }
+
+ @Override
+ public Expression<Feature,?> unmarshal(String value) {
+ return null;
+ }
+}
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/Rule.java b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/Rule.java
index 8d72197b73..dd376e43ea 100644
--- a/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/Rule.java
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/Rule.java
@@ -281,6 +281,21 @@ public class Rule<R> extends StyleElement {
isElseFilter = value;
}
+ /**
+ * Invoked by JAXB at marshalling time for expressing the boolean {@code isElseFilter} value as an XML element.
+ */
+ @XmlElement(name = "ElseFilter")
+ private ElseFilter getElseFilter() {
+ return isElseFilter ? ElseFilter.INSTANCE : null;
+ }
+
+ /**
+ * Invoked at JAXB unmarshalling time when an {@code <ElseFilter/>} element is found.
+ */
+ private void setElseFilter(final ElseFilter value) {
+ isElseFilter = (value != null);
+ }
+
/**
* Returns the minimum value (inclusive) in the denominator of map scale at which this rule will apply.
* If, for example, this value was 10000, then this rule would only apply at scales of 1:<var>X</var>
diff --git a/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/package-info.java b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/package-info.java
new file mode 100644
index 0000000000..d70474e0f3
--- /dev/null
+++ b/core/sis-portrayal/src/main/java/org/apache/sis/style/se1/package-info.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/**
+ * Symbology encoding for styling map data independently of their source.
+ * The classes in this package are derived from
+ * OGC 05-077r4 — <a href="https://www.ogc.org/standard/se/">Symbology Encoding</a> Implementation Specification 1.1.0.
+ * That document defines an XML encoding that can be used for styling feature and coverage data.
+ * The root elements are
+ * {@link org.apache.sis.style.se1.FeatureTypeStyle} and
+ * {@link org.apache.sis.style.se1.CoverageStyle}.
+ * Those classes include different kinds of {@link org.apache.sis.style.se1.Symbolizer}.
+ *
+ * @todo Add {@code CoverageStyle}. May require a common parent with {@code FeatureTypeStyle}.
+ *
+ * <h2>Future evolution</h2>
+ * This package defines a XML encoding.
+ * It is not an abstract model for sophisticated styling.
+ * Apache SIS temporarily uses the classes of the XML encoding as a style API,
+ * but a future version may replace this API by a more abstract one.
+ * A good candidate may be ISO 19117:2012 — Portrayal.
+ * As of 2023, various OGC working groups are also working on new style API.
+ * The final form of such API has not yet been settled down.
+ *
+ * <h2>Synchronization</h2>
+ * Classes in this package are not thread-safe.
+ * Synchronization, if desired, must be done by the caller.
+ *
+ * @author Johann Sorel (Geomatys)
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.5
+ * @since 1.5
+ */
+@XmlSchema(location="https://schemas.opengis.net/se/1.1.0/FeatureStyle.xsd",
+ elementFormDefault=XmlNsForm.QUALIFIED, namespace=Namespaces.SE,
+ xmlns = {
+ @XmlNs(prefix = "se", namespaceURI = Namespaces.SE)
+})
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlJavaTypeAdapters({
+ @XmlJavaTypeAdapter(ExpressionAdapter.class),
+ @XmlJavaTypeAdapter(InternationalStringConverter.class),
+ @XmlJavaTypeAdapter(UnitAdapter.class)
+})
+package org.apache.sis.style.se1;
+
+import jakarta.xml.bind.annotation.XmlAccessType;
+import jakarta.xml.bind.annotation.XmlAccessorType;
+import jakarta.xml.bind.annotation.XmlNs;
+import jakarta.xml.bind.annotation.XmlNsForm;
+import jakarta.xml.bind.annotation.XmlSchema;
+import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
+import org.apache.sis.internal.jaxb.gco.InternationalStringConverter;
+import org.apache.sis.internal.jaxb.gco.UnitAdapter;
+import org.apache.sis.xml.Namespaces;
diff --git a/core/sis-portrayal/src/test/java/org/apache/sis/style/se1/XmlTest.java b/core/sis-portrayal/src/test/java/org/apache/sis/style/se1/XmlTest.java
new file mode 100644
index 0000000000..e3a72d8b48
--- /dev/null
+++ b/core/sis-portrayal/src/test/java/org/apache/sis/style/se1/XmlTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sis.style.se1;
+
+import jakarta.xml.bind.JAXBContext;
+import jakarta.xml.bind.JAXBException;
+import org.apache.sis.test.TestCase;
+import org.junit.Test;
+
+
+/**
+ * Test of XML marshalling.
+ * The current version only verifies that {@link JAXBContext} can be created.
+ * We do not yet have sufficient JAXB annotations and adapters for real marshalling.
+ *
+ * @author Martin Desruisseaux (Geomatys)
+ * @version 1.5
+ * @since 1.5
+ */
+public final class XmlTest extends TestCase {
+ /**
+ * Creates a new test case.
+ */
+ public XmlTest() {
+ }
+
+ /**
+ * Tests the creation of a JAXB context.
+ *
+ * @throws JAXBException if some invalid annotations were found.
+ */
+ @Test
+ public void testContext() throws JAXBException {
+ JAXBContext.newInstance(Symbolizer.class);
+ }
+}