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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit e7224f42c7740de987be726f9deed03914b2a1da
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Fri Apr 27 20:41:08 2018 +0200

    ISIS-1942 New Facet: XmlAccessorTypeFacet
    
    also adds XmlTransient to the list the 'Annotations' scanner searches
    fields for
---
 .../isis/core/metamodel/facets/Annotations.java    |  2 +
 ...pterFacetFactory.java => JaxbFacetFactory.java} | 55 ++++++++++++++++++----
 .../facets/jaxb/XmlAccessorTypeFacet.java          | 31 ++++++++++++
 .../facets/jaxb/XmlAccessorTypeFacetAbstract.java  | 40 ++++++++++++++++
 .../facets/jaxb/XmlAccessorTypeFacetDefault.java   | 33 +++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java          |  4 +-
 6 files changed, 154 insertions(+), 11 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
index 972f06e..1b92a47 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Annotations.java
@@ -33,6 +33,7 @@ import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 import javax.validation.constraints.Pattern;
+import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.isis.applib.annotation.Collection;
@@ -583,6 +584,7 @@ public final class Annotations  {
                     javax.annotation.Nullable.class,
                     Title.class,
                     XmlJavaTypeAdapter.class,
+                    XmlTransient.class,
                     javax.jdo.annotations.Column.class
             )
     );
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
similarity index 90%
rename from 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
rename to 
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
index 1477cb8..b3fe9f0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlJavaTypeAdapterFacetFactory.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/JaxbFacetFactory.java
@@ -23,7 +23,10 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.List;
+import java.util.Optional;
 
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlTransient;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -51,7 +54,7 @@ import com.google.common.collect.Lists;
 /**
  * just adds a validator
  */
-public class XmlJavaTypeAdapterFacetFactory extends FacetFactoryAbstract
+public class JaxbFacetFactory extends FacetFactoryAbstract
             implements MetaModelValidatorRefiner {
 
     public static final String 
ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_NOT_ABSTRACT =
@@ -74,42 +77,74 @@ public class XmlJavaTypeAdapterFacetFactory extends 
FacetFactoryAbstract
             "isis.reflector.validator.jaxbViewModelDateTimeTypeAdapter";
     public static final boolean 
ISIS_REFLECTOR_VALIDATOR_JAXB_VIEW_MODEL_DATE_TIME_TYPE_ADAPTER_DEFAULT = true;
 
-    public XmlJavaTypeAdapterFacetFactory() {
+    public JaxbFacetFactory() {
         super(FeatureType.OBJECTS_AND_PROPERTIES);
     }
+    
+    // -- CLASS CONTEXT
 
     @Override
     public void process(final ProcessClassContext processClassContext) {
+       processXmlJavaTypeAdapter(processClassContext);
+       processXmlAccessorTypeFacet(processClassContext);
+    }
+    
+    private void processXmlJavaTypeAdapter(final ProcessClassContext 
processClassContext) {
         final Class<?> cls = processClassContext.getCls();
 
         final XmlJavaTypeAdapter annotation = Annotations.getAnnotation(cls, 
XmlJavaTypeAdapter.class);
         if(annotation == null) {
             return;
         }
-
+        
         final FacetHolder holder = processClassContext.getFacetHolder();
         final XmlJavaTypeAdapterFacetDefault facet = new 
XmlJavaTypeAdapterFacetDefault(holder,
                 annotation.value(), getSpecificationLoader());
 
         FacetUtil.addFacet(facet);
     }
+    
+    private void processXmlAccessorTypeFacet(final ProcessClassContext 
processClassContext) {
+        final Class<?> cls = processClassContext.getCls();
+
+        final XmlAccessorType annotation = Annotations.getAnnotation(cls, 
XmlAccessorType.class);
+        if(annotation == null) {
+            return;
+        }
+        
+        final FacetHolder holder = processClassContext.getFacetHolder();
+        final XmlAccessorTypeFacetDefault facet = 
+                       new XmlAccessorTypeFacetDefault(holder, 
annotation.value());
+
+        FacetUtil.addFacet(facet);
+    }
+    
+    // -- METHOD CONTEXT
 
     @Override
     public void process(final ProcessMethodContext processMethodContext) {
-
-        processXmlJavaTypeAdapter(processMethodContext);
-        processXmlTransient(processMethodContext);
+       
+       //[ahuber] accessType not yet used, but could be in future extensions
+       final Optional<XmlAccessorTypeFacet> accessorTypeFacet = 
+                       
Optional.ofNullable(processMethodContext.getFacetHolder().getFacet(XmlAccessorTypeFacet.class));
+       final XmlAccessType accessType = accessorTypeFacet
+                       .map(facet->facet.value())
+                       .orElse(XmlAccessType.PUBLIC_MEMBER); // the 
annotation's default value
+       // ---
+
+        processXmlJavaTypeAdapter(processMethodContext, accessType);
+        processXmlTransient(processMethodContext, accessType);
 
     }
 
-    private void processXmlJavaTypeAdapter(final ProcessMethodContext 
processMethodContext) {
+    private void processXmlJavaTypeAdapter(final ProcessMethodContext 
processMethodContext, XmlAccessType accessType) {
         final Method method = processMethodContext.getMethod();
 
         final XmlJavaTypeAdapter annotation = 
Annotations.getAnnotation(method, XmlJavaTypeAdapter.class);
         if(annotation == null) {
             return;
         }
-
+        
         final FacetHolder holder = processMethodContext.getFacetHolder();
         final XmlJavaTypeAdapterFacetDefault facet = new 
XmlJavaTypeAdapterFacetDefault(holder,
                 annotation.value(), getSpecificationLoader());
@@ -117,7 +152,7 @@ public class XmlJavaTypeAdapterFacetFactory extends 
FacetFactoryAbstract
         FacetUtil.addFacet(facet);
     }
 
-    private void processXmlTransient(final ProcessMethodContext 
processMethodContext) {
+    private void processXmlTransient(final ProcessMethodContext 
processMethodContext, XmlAccessType accessType) {
         final Method method = processMethodContext.getMethod();
 
         final XmlTransient annotation = Annotations.getAnnotation(method, 
XmlTransient.class);
@@ -130,6 +165,8 @@ public class XmlJavaTypeAdapterFacetFactory extends 
FacetFactoryAbstract
 
         FacetUtil.addFacet(facet);
     }
+    
+    // -- 
 
     @Override
     public void refineMetaModelValidator(
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacet.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacet.java
new file mode 100644
index 0000000..14b2c16
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacet.java
@@ -0,0 +1,31 @@
+/*
+ *  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 javax.xml.bind.annotation.XmlAccessType;
+
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
+
+/**
+ * Corresponds to <tt>@XmlAccessorType(value=...)</tt> annotation.
+ */
+public interface XmlAccessorTypeFacet extends SingleValueFacet<XmlAccessType> {
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetAbstract.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetAbstract.java
new file mode 100644
index 0000000..76b0741
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetAbstract.java
@@ -0,0 +1,40 @@
+/*
+ *  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 javax.xml.bind.annotation.XmlAccessType;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
+
+public abstract class XmlAccessorTypeFacetAbstract
+        extends SingleValueFacetAbstract<XmlAccessType> implements 
XmlAccessorTypeFacet {
+
+    public static Class<XmlAccessorTypeFacet> type() {
+        return XmlAccessorTypeFacet.class;
+    }
+
+    public XmlAccessorTypeFacetAbstract(
+            final FacetHolder holder,
+            final XmlAccessType xmlAccessType) {
+        super(type(), xmlAccessType, holder);
+    }
+
+}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetDefault.java
new file mode 100644
index 0000000..ac3fa44
--- /dev/null
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/jaxb/XmlAccessorTypeFacetDefault.java
@@ -0,0 +1,33 @@
+/*
+ *  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 javax.xml.bind.annotation.XmlAccessType;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class XmlAccessorTypeFacetDefault extends XmlAccessorTypeFacetAbstract {
+
+    public XmlAccessorTypeFacetDefault(
+            final FacetHolder holder,
+            final XmlAccessType xmlAccessType) {
+        super(holder, xmlAccessType);
+    }
+}
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 2ada9d0..6456948 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
@@ -42,7 +42,7 @@ import 
org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToR
 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.XmlJavaTypeAdapterFacetFactory;
+import org.apache.isis.core.metamodel.facets.jaxb.JaxbFacetFactory;
 import 
org.apache.isis.core.metamodel.facets.members.cssclass.annotprop.CssClassFacetOnActionFromConfiguredRegexFactory;
 import 
org.apache.isis.core.metamodel.facets.members.cssclassfa.annotprop.CssClassFaFacetOnMemberFactory;
 import 
org.apache.isis.core.metamodel.facets.members.describedas.annotprop.DescribedAsFacetOnMemberFactory;
@@ -297,7 +297,7 @@ public final class ProgrammingModelFacetsJava5 extends 
ProgrammingModelAbstract
         addFactory(new CopyImmutableFacetOntoMembersFactory());
 
         addFactory(new RecreatableObjectFacetFactory());
-        addFactory(new XmlJavaTypeAdapterFacetFactory());
+        addFactory(new JaxbFacetFactory());
         addFactory(new MixinFacetForMixinAnnotationFactory());
 
 

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.

Reply via email to