Repository: incubator-juneau Updated Branches: refs/heads/master 713d55402 -> e42eac68c
Remove language-specific metadata references from core metadata classes. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/8d9596dc Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/8d9596dc Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/8d9596dc Branch: refs/heads/master Commit: 8d9596dc02e1b6719f04989fcfb57cceb324d1e7 Parents: d4f6cfa 51bb3c4 Author: jamesbognar <[email protected]> Authored: Thu Aug 25 12:33:31 2016 -0400 Committer: jamesbognar <[email protected]> Committed: Thu Aug 25 12:41:06 2016 -0400 ---------------------------------------------------------------------- .../main/java/org/apache/juneau/ClassMeta.java | 63 +++----------------- .../org/apache/juneau/html/HtmlClassMeta.java | 12 ++-- .../org/apache/juneau/jena/RdfClassMeta.java | 11 ++-- .../org/apache/juneau/jena/RdfSerializer.java | 17 +++--- .../org/apache/juneau/json/JsonClassMeta.java | 12 ++-- .../java/org/apache/juneau/json/JsonParser.java | 4 +- .../urlencoding/UrlEncodingClassMeta.java | 12 ++-- .../java/org/apache/juneau/xml/XmlBeanMeta.java | 9 +-- .../org/apache/juneau/xml/XmlClassMeta.java | 9 ++- .../java/org/apache/juneau/xml/XmlParser.java | 12 ++-- juneau-core/src/main/java/overview.html | 8 +++ 11 files changed, 68 insertions(+), 101 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/ClassMeta.java index 3fee68a,3fee68a..ae2bce5 --- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java @@@ -23,14 -23,14 +23,10 @@@ import java.net.URI import java.util.*; import org.apache.juneau.annotation.*; --import org.apache.juneau.html.*; import org.apache.juneau.internal.*; --import org.apache.juneau.jena.*; --import org.apache.juneau.json.*; import org.apache.juneau.transform.*; import org.apache.juneau.transform.Transform; --import org.apache.juneau.urlencoding.*; --import org.apache.juneau.xml.*; ++import org.apache.juneau.utils.*; /** * A wrapper class around the {@link Class} object that provides cached information @@@ -87,11 -87,11 +83,7 @@@ public final class ClassMeta<T> impleme isAbstract, // True if this class is abstract. isMemberClass; // True if this is a non-static member class. -- private XmlClassMeta xmlMeta; // Class-related metadata from the @Xml annotation found on this class or parent class. -- private JsonClassMeta jsonMeta; // Class-related metadata from the @Json annotation found on this class or parent class. -- private HtmlClassMeta htmlMeta; // Class-related metadata from the @Html annotation found on this class or parent class. -- private UrlEncodingClassMeta urlEncodingMeta; // Class-related metadata from the @UrlEncoding annotation found on this class or parent class. -- private RdfClassMeta rdfMeta; // Class-related metadata from the @Rdf annotation found on this class or parent class. ++ private MetadataMap extMeta = new MetadataMap(); // Extended metadata private Throwable initException; // Any exceptions thrown in the init() method. private boolean hasChildPojoTransforms; // True if this class or any subclass of this class has a PojoTransform associated with it. @@@ -154,12 -154,12 +146,6 @@@ this.hasChildPojoTransforms = beanContext.hasChildPojoTransforms(innerClass); -- this.xmlMeta = new XmlClassMeta(innerClass); -- this.jsonMeta = new JsonClassMeta(innerClass); -- this.htmlMeta = new HtmlClassMeta(innerClass); -- this.urlEncodingMeta = new UrlEncodingClassMeta(innerClass); -- this.rdfMeta = new RdfClassMeta(innerClass); -- Class c = innerClass; if (c.isPrimitive()) { @@@ -846,48 -846,48 +832,13 @@@ } /** -- * Returns the <ja>@Xml</ja> annotation defined on this class, superclass, or interface of this class. -- * -- * @return XML metadata on this class. Never <jk>null</jk>. -- */ -- public XmlClassMeta getXmlMeta() { -- return xmlMeta; -- } -- -- /** -- * Returns metadata from the <ja>@Json</ja> annotation defined on this class, superclass, or interface of this class. -- * -- * @return JSON metadata on this class. Never <jk>null</jk>. -- */ -- public JsonClassMeta getJsonMeta() { -- return jsonMeta; -- } -- -- /** -- * Returns metadata from the <ja>@Html</ja> annotation defined on this class, superclass, or interface of this class. -- * -- * @return HTML metadata on this class. Never <jk>null</jk>. -- */ -- public HtmlClassMeta getHtmlMeta() { -- return htmlMeta; -- } -- -- /** -- * Returns metadata from the <ja>@UrlEncoding</ja> annotation defined on this class, superclass, or interface of this class. -- * -- * @return URL-Encoding metadata on this class. Never <jk>null</jk>. -- */ -- public UrlEncodingClassMeta getUrlEncodingMeta() { -- return urlEncodingMeta; -- } -- -- /** -- * Returns metadata from the <ja>@Rdf</ja> annotation defined on this class, superclass, or interface of this class. ++ * Returns the language-specified extended metadata on this class. * -- * @return RDF metadata on this class. Never <jk>null</jk>. ++ * @param c The name of the metadata class to create. ++ * @return Extended metadata on this class. Never <jk>null</jk>. */ -- public RdfClassMeta getRdfMeta() { -- return rdfMeta; ++ public <M extends ClassMetaExtended> M getExtendedMeta(Class<M> c) { ++ return extMeta.get(c, this); } /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/html/HtmlClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/html/HtmlClassMeta.java index 02dc609,02dc609..6533a85 --- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlClassMeta.java @@@ -12,15 -12,15 +12,16 @@@ ***************************************************************************************************************************/ package org.apache.juneau.html; ++import org.apache.juneau.*; import org.apache.juneau.html.annotation.*; --import org.apache.juneau.internal.*; ++import org.apache.juneau.internal.*; /** * Metadata on classes specific to the HTML serializers and parsers pulled from the {@link Html @Html} annotation on the class. * * @author James Bognar ([email protected]) */ --public class HtmlClassMeta { ++public class HtmlClassMeta extends ClassMetaExtended { private final Html html; private final boolean asXml, noTables, noTableHeaders, asPlainText; @@@ -28,10 -28,10 +29,11 @@@ /** * Constructor. * -- * @param c The class that this annotation is defined on. ++ * @param cm The class that this annotation is defined on. */ -- public HtmlClassMeta(Class<?> c) { -- this.html = ReflectionUtils.getAnnotation(Html.class, c); ++ public HtmlClassMeta(ClassMeta<?> cm) { ++ super(cm); ++ this.html = ReflectionUtils.getAnnotation(Html.class, getInnerClass()); if (html != null) { asXml = html.asXml(); noTables = html.noTables(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/jena/RdfClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/jena/RdfClassMeta.java index fcfcfc9,fcfcfc9..7686b7f --- a/juneau-core/src/main/java/org/apache/juneau/jena/RdfClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/jena/RdfClassMeta.java @@@ -14,16 -14,16 +14,17 @@@ package org.apache.juneau.jena import java.util.*; ++import org.apache.juneau.*; import org.apache.juneau.internal.*; import org.apache.juneau.jena.annotation.*; --import org.apache.juneau.xml.*; ++import org.apache.juneau.xml.*; /** * Metadata on classes specific to the RDF serializers and parsers pulled from the {@link Rdf @Rdf} annotation on the class. * * @author James Bognar ([email protected]) */ --public class RdfClassMeta { ++public class RdfClassMeta extends ClassMetaExtended { private final Rdf rdf; private final RdfCollectionFormat collectionFormat; @@@ -32,9 -32,9 +33,11 @@@ /** * Constructor. * -- * @param c The class that this annotation is defined on. ++ * @param cm The class that this annotation is defined on. */ -- public RdfClassMeta(Class<?> c) { ++ public RdfClassMeta(ClassMeta<?> cm) { ++ super(cm); ++ Class<?> c = getInnerClass(); this.rdf = ReflectionUtils.getAnnotation(Rdf.class, c); if (rdf != null) { collectionFormat = rdf.collectionFormat(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java index d5d97ee,d5d97ee..dc6aa74 --- a/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java @@@ -242,10 -242,10 +242,11 @@@ public class RdfSerializer extends Writ } else if (gType.isCollection() || gType.isArray() || (wType != null && wType.isCollection())) { Collection c = session.sort(gType.isCollection() ? (Collection)o : toList(gType.getInnerClass(), o)); RdfCollectionFormat f = session.getCollectionFormat(); -- if (gType.getRdfMeta().getCollectionFormat() != RdfCollectionFormat.DEFAULT) -- f = gType.getRdfMeta().getCollectionFormat(); -- if (bpm != null && bpm.getRdfMeta().getCollectionFormat() != RdfCollectionFormat.DEFAULT) -- f = bpm.getRdfMeta().getCollectionFormat(); ++ RdfClassMeta rcm = gType.getExtendedMeta(RdfClassMeta.class); ++ if (rcm.getCollectionFormat() != RdfCollectionFormat.DEFAULT) ++ f = rcm.getCollectionFormat(); ++ if (bpm != null && bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat() != RdfCollectionFormat.DEFAULT) ++ f = bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat(); switch (f) { case BAG: n = serializeToContainer(session, c, gType, m.createBag()); break; case LIST: n = serializeToList(session, c, gType); break; @@@ -335,9 -335,9 +336,9 @@@ continue; BeanPropertyMeta bpm = bpv.getMeta(); -- Namespace ns = bpm.getRdfMeta().getNamespace(); ++ Namespace ns = bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getNamespace(); if (ns == null && session.isUseXmlNamespaces()) -- ns = bpm.getXmlMeta().getNamespace(); ++ ns = bpm.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(); if (ns == null) ns = session.getJuneauBpNs(); else if (session.isAutoDetectNamespaces()) @@@ -375,9 -375,9 +376,9 @@@ for (Object e : c) { Namespace ns = null; if (bpm != null) { -- ns = bpm.getRdfMeta().getNamespace(); ++ ns = bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getNamespace(); if (ns == null && session.isUseXmlNamespaces()) -- ns = bpm.getXmlMeta().getNamespace(); ++ ns = bpm.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(); } if (ns == null) ns = session.getJuneauBpNs(); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/json/JsonClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/json/JsonClassMeta.java index 80d64d8,80d64d8..5b67b0c --- a/juneau-core/src/main/java/org/apache/juneau/json/JsonClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonClassMeta.java @@@ -12,15 -12,15 +12,16 @@@ ***************************************************************************************************************************/ package org.apache.juneau.json; ++import org.apache.juneau.*; import org.apache.juneau.internal.*; --import org.apache.juneau.json.annotation.*; ++import org.apache.juneau.json.annotation.*; /** * Metadata on classes specific to the JSON serializers and parsers pulled from the {@link Json @Json} annotation on the class. * * @author James Bognar ([email protected]) */ --public class JsonClassMeta { ++public class JsonClassMeta extends ClassMetaExtended { private final Json json; private final String wrapperAttr; @@@ -28,10 -28,10 +29,11 @@@ /** * Constructor. * -- * @param c The class that this annotation is defined on. ++ * @param cm The class that this annotation is defined on. */ -- public JsonClassMeta(Class<?> c) { -- this.json = ReflectionUtils.getAnnotation(Json.class, c); ++ public JsonClassMeta(ClassMeta<?> cm) { ++ super(cm); ++ this.json = ReflectionUtils.getAnnotation(Json.class, getInnerClass()); if (json != null) { wrapperAttr = StringUtils.nullIfEmpty(json.wrapperAttr()); } else { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java index 2ee9ace,2ee9ace..07d58ef --- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java +++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java @@@ -107,9 -107,9 +107,9 @@@ public final class JsonParser extends R PojoTransform<T,Object> transform = (PojoTransform<T,Object>)nt.getPojoTransform(); ClassMeta<?> ft = nt.getTransformedClassMeta(); session.setCurrentClass(ft); -- String wrapperAttr = ft.getJsonMeta().getWrapperAttr(); ++ String wrapperAttr = ft.getExtendedMeta(JsonClassMeta.class).getWrapperAttr(); -- Object o = null; ++ Object o = null; skipCommentsAndSpace(session, r); if (wrapperAttr != null) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java index 6667632,6667632..e2978ff --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingClassMeta.java @@@ -12,15 -12,15 +12,16 @@@ ***************************************************************************************************************************/ package org.apache.juneau.urlencoding; ++import org.apache.juneau.*; import org.apache.juneau.internal.*; --import org.apache.juneau.urlencoding.annotation.*; ++import org.apache.juneau.urlencoding.annotation.*; /** * Metadata on classes specific to the URL-Encoding serializers and parsers pulled from the {@link UrlEncoding @UrlEncoding} annotation on the class. * * @author James Bognar ([email protected]) */ --public class UrlEncodingClassMeta { ++public class UrlEncodingClassMeta extends ClassMetaExtended { private final UrlEncoding urlEncoding; private final boolean expandedParams; @@@ -28,10 -28,10 +29,11 @@@ /** * Constructor. * -- * @param c The class that this annotation is defined on. ++ * @param cm The class that this annotation is defined on. */ -- public UrlEncodingClassMeta(Class<?> c) { -- this.urlEncoding = ReflectionUtils.getAnnotation(UrlEncoding.class, c); ++ public UrlEncodingClassMeta(ClassMeta<?> cm) { ++ super(cm); ++ this.urlEncoding = ReflectionUtils.getAnnotation(UrlEncoding.class, getInnerClass()); if (urlEncoding != null) { expandedParams = urlEncoding.expandedParams(); } else { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java index abb424a,abb424a..1c594ab --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java @@@ -30,17 -30,17 +30,12 @@@ public class XmlBeanMeta extends BeanMe private final XmlContentHandler<?> xmlContentHandler; // Class used to convert bean to XML content. private final Map<String,BeanPropertyMeta> childElementProperties; // Properties defined with @Xml.childName annotation. -- public XmlBeanMeta(BeanMeta<?> beanMeta) { -- this(beanMeta, null); -- } -- /** * Constructor. * * @param beanMeta The metadata on the bean that this metadata applies to. -- * @param pNames Only look at these property names. If <jk>null</jk>, apply to all bean properties. */ -- public XmlBeanMeta(BeanMeta<?> beanMeta, String[] pNames) { ++ public XmlBeanMeta(BeanMeta<?> beanMeta) { super(beanMeta); Class<?> c = beanMeta.getClassMeta().getInnerClass(); @@@ -49,7 -49,7 +44,7 @@@ XmlContentHandler<?> tXmlContentHandler = null; Map<String,BeanPropertyMeta> tChildElementProperties = new LinkedHashMap<String,BeanPropertyMeta>(); -- for (BeanPropertyMeta p : beanMeta.getPropertyMetas(pNames)) { ++ for (BeanPropertyMeta p : beanMeta.getPropertyMetas()) { XmlFormat xf = p.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(); if (xf == XmlFormat.ATTR) tXmlAttrs.put(p.getName(), p); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/xml/XmlClassMeta.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/xml/XmlClassMeta.java index 1e23d9e,1e23d9e..025d2a5 --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlClassMeta.java @@@ -14,6 -14,6 +14,7 @@@ package org.apache.juneau.xml import java.util.*; ++import org.apache.juneau.*; import org.apache.juneau.internal.*; import org.apache.juneau.xml.annotation.*; @@@ -23,7 -23,7 +24,7 @@@ * * @author James Bognar ([email protected]) */ --public class XmlClassMeta { ++public class XmlClassMeta extends ClassMetaExtended { private final Namespace namespace; private final Xml xml; @@@ -34,9 -34,9 +35,11 @@@ /** * Constructor. * -- * @param c The class that this annotation is defined on. ++ * @param cm The class that this annotation is defined on. */ -- public XmlClassMeta(Class<?> c) { ++ public XmlClassMeta(ClassMeta<?> cm) { ++ super(cm); ++ Class<?> c = getInnerClass(); this.namespace = findNamespace(c); this.xml = ReflectionUtils.getAnnotation(Xml.class, c); if (xml != null) { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java index 0ed36b9,0ed36b9..cebfb1a --- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java +++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java @@@ -146,10 -146,10 +146,10 @@@ public class XmlParser extends ReaderPa parseIntoMap(session, r, m, string(), object()); o = ft.newInstanceFromObjectMap(outer, m); } else if (ft.canCreateNewBean(outer)) { -- if (ft.getXmlMeta().getFormat() == XmlFormat.COLLAPSED) { ++ if (ft.getExtendedMeta(XmlClassMeta.class).getFormat() == XmlFormat.COLLAPSED) { String fieldName = r.getLocalName(); -- BeanMap m = bc.newBeanMap(outer, ft.getInnerClass()); -- BeanPropertyMeta bpm = m.getMeta().getXmlMeta().getPropertyMeta(fieldName); ++ BeanMap<?> m = bc.newBeanMap(outer, ft.getInnerClass()); ++ BeanPropertyMeta bpm = m.getMeta().getExtendedMeta(XmlBeanMeta.class).getPropertyMeta(fieldName); ClassMeta<?> cm = m.getMeta().getClassMeta(); Object value = parseAnything(session, cm, currAttr, r, m.getBean(false), false); setName(cm, value, currAttr); @@@ -274,8 -274,8 +274,8 @@@ } private <T> BeanMap<T> parseIntoBean(XmlParserSession session, XMLStreamReader r, BeanMap<T> m) throws Exception { -- BeanMeta bMeta = m.getMeta(); -- XmlBeanMeta xmlMeta = bMeta.getXmlMeta(); ++ BeanMeta<?> bMeta = m.getMeta(); ++ XmlBeanMeta xmlMeta = bMeta.getExtendedMeta(XmlBeanMeta.class); for (int i = 0; i < r.getAttributeCount(); i++) { String key = session.decodeString(r.getAttributeLocalName(i)); @@@ -324,7 -324,7 +324,7 @@@ } } else { session.setCurrentProperty(pMeta); -- XmlFormat xf = pMeta.getXmlMeta().getXmlFormat(); ++ XmlFormat xf = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(); if (xf == COLLAPSED) { ClassMeta<?> et = pMeta.getClassMeta().getElementType(); Object value = parseAnything(session, et, currAttr, r, m.getBean(false), false); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/8d9596dc/juneau-core/src/main/java/overview.html ---------------------------------------------------------------------- diff --cc juneau-core/src/main/java/overview.html index b11e25d,b11e25d..4acf5c5 --- a/juneau-core/src/main/java/overview.html +++ b/juneau-core/src/main/java/overview.html @@@ -4770,6 -4770,6 +4770,14 @@@ <li>New {@link org.apache.juneau.html.HtmlSerializerContext#URI_ANCHOR} option for {@link org.apache.juneau.html.HtmlSerializerContext#HTML_uriAnchorText}. </ul> </li> ++ <li>Removed generics from {@link org.apache.juneau.BeanPropertyMeta}. ++ <li>Introduced new classes to eliminate the references to language-specific metadata in the core metadata classes: ++ <ul> ++ <li>{@link org.apache.juneau.ClassMetaExtended} / {@link org.apache.juneau.ClassMeta#getExtendedMeta(Class)} ++ <li>{@link org.apache.juneau.BeanMetaExtended} / {@link org.apache.juneau.BeanMeta#getExtendedMeta(Class)} ++ <li>{@link org.apache.juneau.BeanPropertyMetaExtended} / {@link org.apache.juneau.BeanPropertyMetaMeta#getExtendedMeta(Class)} ++ </ul> ++ </li> </ul> <h6 class='topic'>org.apache.juneau.server</h6>
