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.