You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2018/01/11 14:34:13 UTC

[isis] 01/04: ISIS-1814: adds support for @XmlTransient when validating for presence of @XmlJavaTypeAdapter on a LocalDate

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch maint-1.16.1
in repository https://gitbox.apache.org/repos/asf/isis.git

commit dff3bb7762405cd22dcfc0f1ce1b64921992ca55
Author: Dan Haywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jan 11 15:10:14 2018 +0100

    ISIS-1814: adds support for @XmlTransient when validating for presence of @XmlJavaTypeAdapter on a LocalDate
---
 ...ry.java => XmlJavaTypeAdapterFacetFactory.java} | 32 +++++++++++++++++--
 .../metamodel/facets/jaxb/XmlTransientFacet.java   | 29 +++++++++++++++++
 .../facets/jaxb/XmlTransientFacetAbstract.java     | 37 ++++++++++++++++++++++
 .../facets/jaxb/XmlTransientFacetDefault.java      | 30 ++++++++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java          |  4 +--
 5 files changed, 127 insertions(+), 5 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbXmlJavaTypeAdapterFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
similarity index 92%
rename from core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbXmlJavaTypeAdapterFacetFactory.java
rename to core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
index 64112aa..8f102cc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbXmlJavaTypeAdapterFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
@@ -24,6 +24,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import com.google.common.collect.Lists;
@@ -51,7 +52,7 @@ import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
 /**
  * just adds a validator
  */
-public class JaxbXmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
+public class XmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
             implements MetaModelValidatorRefiner {
 
     public static final String ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_NOT_ABSTRACT =
@@ -74,7 +75,7 @@ public class JaxbXmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
             "isis.reflector.validator.jaxbViewModelDateTimeTypeAdapter";
     public static final boolean ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_DATE_TIME_TYPE_ADAPTER_DEFAULT = true;
 
-    public JaxbXmlJavaTypeAdapterFacetFactory() {
+    public XmlJavaTypeAdapterFacetFactory() {
         super(FeatureType.OBJECTS_AND_PROPERTIES);
     }
 
@@ -97,6 +98,12 @@ public class JaxbXmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
 
+        processXmlJavaTypeAdapter(processMethodContext);
+        processXmlTransient(processMethodContext);
+
+    }
+
+    private void processXmlJavaTypeAdapter(final ProcessMethodContext processMethodContext) {
         final Method method = processMethodContext.getMethod();
 
         final XmlJavaTypeAdapter annotation = Annotations.getAnnotation(method, XmlJavaTypeAdapter.class);
@@ -109,7 +116,20 @@ public class JaxbXmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
                 annotation.value(), getSpecificationLoader());
 
         FacetUtil.addFacet(facet);
+    }
+
+    private void processXmlTransient(final ProcessMethodContext processMethodContext) {
+        final Method method = processMethodContext.getMethod();
+
+        final XmlTransient annotation = Annotations.getAnnotation(method, XmlTransient.class);
+        if(annotation == null) {
+            return;
+        }
+
+        final FacetHolder holder = processMethodContext.getFacetHolder();
+        final XmlTransientFacet facet = new XmlTransientFacetDefault(holder);
 
+        FacetUtil.addFacet(facet);
     }
 
     @Override
@@ -261,8 +281,14 @@ public class JaxbXmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
                 return;
             }
 
+            final XmlTransientFacet xmlTransientFacet =
+                    property.getFacet(XmlTransientFacet.class);
+            if(xmlTransientFacet != null) {
+                return;
+            }
+
             // else
-            validationFailures.add("JAXB view model '%s' property '%s' is of type '%s' but is not annotated with @XmlJavaTypeAdapter.  The field/method must be annotated with @XmlJavaTypeAdapter(org.apache.isis.schema.utils.jaxbadapters.XxxAdapter.ForJaxb.class) or equivalent.",
+            validationFailures.add("JAXB view model '%s' property '%s' is of type '%s' but is not annotated with @XmlJavaTypeAdapter.  The field/method must be annotated with @XmlJavaTypeAdapter(org.apache.isis.schema.utils.jaxbadapters.XxxAdapter.ForJaxb.class) or equivalent, or be ignored by being annotated with @XmlTransient.",
                     objectSpec.getFullIdentifier(),
                     property.getId(),
                     jodaType.getName());
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacet.java
new file mode 100644
index 0000000..f12049f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacet.java
@@ -0,0 +1,29 @@
+/*
+ *  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.isis.core.metamodel.facets.jaxb;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+/**
+ * Corresponds to <tt>@XmlTransient</tt> annotation.
+ */
+public interface XmlTransientFacet extends Facet {
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetAbstract.java
new file mode 100644
index 0000000..e1d70c4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetAbstract.java
@@ -0,0 +1,37 @@
+/*
+ *  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.isis.core.metamodel.facets.jaxb;
+
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public abstract class XmlTransientFacetAbstract
+        extends FacetAbstract implements XmlTransientFacet {
+
+    public static Class<XmlTransientFacet> type() {
+        return XmlTransientFacet.class;
+    }
+
+    public XmlTransientFacetAbstract(
+            final FacetHolder holder) {
+        super(type(), holder, Derivation.NOT_DERIVED);
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetDefault.java
new file mode 100644
index 0000000..7545d15
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlTransientFacetDefault.java
@@ -0,0 +1,30 @@
+/*
+ *  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.isis.core.metamodel.facets.jaxb;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class XmlTransientFacetDefault extends XmlTransientFacetAbstract {
+
+    public XmlTransientFacetDefault(
+            final FacetHolder holder) {
+        super(holder);
+    }
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 5e750eb..4435bca 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -45,7 +45,7 @@ import org.apache.isis.core.metamodel.facets.collections.paged.PagedFacetOnColle
 import org.apache.isis.core.metamodel.facets.collections.parented.ParentedFacetSinceCollectionFactory;
 import org.apache.isis.core.metamodel.facets.collections.sortedby.annotation.SortedByFacetAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.fallback.FallbackFacetFactory;
-import org.apache.isis.core.metamodel.facets.jaxb.JaxbXmlJavaTypeAdapterFacetFactory;
+import org.apache.isis.core.metamodel.facets.jaxb.XmlJavaTypeAdapterFacetFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnMemberFactory;
 import org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFactory;
@@ -370,7 +370,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(new ImmutableFacetMarkerInterfaceFactory());
 
         addFactory(new RecreatableObjectFacetFactory());
-        addFactory(new JaxbXmlJavaTypeAdapterFacetFactory());
+        addFactory(new XmlJavaTypeAdapterFacetFactory());
         addFactory(new MixinFacetForMixinAnnotationFactory());
 
 

-- 
To stop receiving notification emails like this one, please contact
"commits@isis.apache.org" <co...@isis.apache.org>.