http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java index aefcb6e..e84e593 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/WriterSerializer.java @@ -40,6 +40,14 @@ import org.apache.juneau.annotation.*; */ public abstract class WriterSerializer extends Serializer { + /** + * Constructor. + * @param propertyStore The property store containing all the settings for this object. + */ + protected WriterSerializer(PropertyStore propertyStore) { + super(propertyStore); + } + @Override /* Serializer */ public boolean isWriterSerializer() { return true;
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/serializer/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/package.html b/juneau-core/src/main/java/org/apache/juneau/serializer/package.html index 06fcb84..00e5568 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/package.html @@ -125,7 +125,7 @@ } </p> <p> - Serializer that take advantage of the entire {@link org.apache.juneau.CoreApi} interface to be able to serialize arbitrary beans and POJOs is + Serializer that take advantage of the entire {@link org.apache.juneau.CoreObject} interface to be able to serialize arbitrary beans and POJOs is considerably more complex and outside the scope of this document.<br> If developing such a serializer, the best course of action would be to replicate what occurs in the {@link org.apache.juneau.json.JsonSerializer} class. </p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java index a3a94b5..707402e 100644 --- a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializer.java @@ -43,6 +43,15 @@ import org.apache.juneau.xml.*; @Produces(value="text/xml+soap",contentType="text/xml") public final class SoapXmlSerializer extends XmlSerializer { + /** + * Constructor. + * @param propertyStore The property store containing all the settings for this object. + */ + public SoapXmlSerializer(PropertyStore propertyStore) { + super(propertyStore); + } + + //-------------------------------------------------------------------------------- // Overridden methods //-------------------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java new file mode 100644 index 0000000..cbf8e36 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/soap/SoapXmlSerializerBuilder.java @@ -0,0 +1,590 @@ +// *************************************************************************************************************************** +// * 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.juneau.soap; + +import static org.apache.juneau.soap.SoapXmlSerializerContext.*; + +import java.util.*; + +import org.apache.juneau.*; +import org.apache.juneau.xml.*; + +/** + * Builder class for building instances of soap/xml serializers. + */ +public class SoapXmlSerializerBuilder extends XmlSerializerBuilder { + + /** + * Constructor, default settings. + */ + public SoapXmlSerializerBuilder() { + super(); + } + + /** + * Constructor. + * @param propertyStore The initial configuration settings for this builder. + */ + public SoapXmlSerializerBuilder(PropertyStore propertyStore) { + super(propertyStore); + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializer build() { + return new SoapXmlSerializer(propertyStore); + } + + + //-------------------------------------------------------------------------------- + // Properties + //-------------------------------------------------------------------------------- + + /** + * <b>Configuration property:</b> The <code>SOAPAction</code> HTTP header value to set on responses. + * <p> + * <ul> + * <li><b>Name:</b> <js>"SoapXmlSerializer.SOAPAction"</js> + * <li><b>Data type:</b> <code>String</code> + * <li><b>Default:</b> <js>"http://www.w3.org/2003/05/soap-envelope"</js> + * </ul> + * <p> + * <h5 class='section'>Notes:</h5> + * <ul> + * <li>This is equivalent to calling <code>property(<jsf>SOAPXML_SOAPAction</jsf>, value)</code>. + * <li>This introduces a slight performance penalty. + * </ul> + * + * @param value The new value for this property. + * @return This object (for method chaining). + * @see SoapXmlSerializerContext#SOAPXML_SOAPAction + */ + public SoapXmlSerializerBuilder uriAnchorText(String value) { + return property(SOAPXML_SOAPAction, value); + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder enableNamespaces(boolean value) { + super.enableNamespaces(value); + return this; + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder autoDetectNamespaces(boolean value) { + super.autoDetectNamespaces(value); + return this; + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder addNamespaceUrisToRoot(boolean value) { + super.addNamespaceUrisToRoot(value); + return this; + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder defaultNamespace(String value) { + super.defaultNamespace(value); + return this; + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder xsNamespace(Namespace value) { + super.xsNamespace(value); + return this; + } + + @Override /* XmlSerializerBuilder */ + public SoapXmlSerializerBuilder namespaces(Namespace...values) { + super.namespaces(values); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder maxDepth(int value) { + super.maxDepth(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder initialDepth(int value) { + super.initialDepth(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder detectRecursions(boolean value) { + super.detectRecursions(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder ignoreRecursions(boolean value) { + super.ignoreRecursions(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder useWhitespace(boolean value) { + super.useWhitespace(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder ws() { + super.ws(); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder addBeanTypeProperties(boolean value) { + super.addBeanTypeProperties(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder quoteChar(char value) { + super.quoteChar(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder sq() { + super.sq(); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder trimNullProperties(boolean value) { + super.trimNullProperties(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder trimEmptyCollections(boolean value) { + super.trimEmptyCollections(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder trimEmptyMaps(boolean value) { + super.trimEmptyMaps(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder trimStrings(boolean value) { + super.trimStrings(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder relativeUriBase(String value) { + super.relativeUriBase(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder absolutePathUriBase(String value) { + super.absolutePathUriBase(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder sortCollections(boolean value) { + super.sortCollections(value); + return this; + } + + @Override /* SerializerBuilder */ + public SoapXmlSerializerBuilder sortMaps(boolean value) { + super.sortMaps(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beansRequireDefaultConstructor(boolean value) { + super.beansRequireDefaultConstructor(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beansRequireSerializable(boolean value) { + super.beansRequireSerializable(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beansRequireSettersForGetters(boolean value) { + super.beansRequireSettersForGetters(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beansRequireSomeProperties(boolean value) { + super.beansRequireSomeProperties(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanMapPutReturnsOldValue(boolean value) { + super.beanMapPutReturnsOldValue(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanConstructorVisibility(Visibility value) { + super.beanConstructorVisibility(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanClassVisibility(Visibility value) { + super.beanClassVisibility(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanFieldVisibility(Visibility value) { + super.beanFieldVisibility(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder methodVisibility(Visibility value) { + super.methodVisibility(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder useJavaBeanIntrospector(boolean value) { + super.useJavaBeanIntrospector(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder useInterfaceProxies(boolean value) { + super.useInterfaceProxies(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder ignoreUnknownBeanProperties(boolean value) { + super.ignoreUnknownBeanProperties(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder ignoreUnknownNullBeanProperties(boolean value) { + super.ignoreUnknownNullBeanProperties(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder ignorePropertiesWithoutSetters(boolean value) { + super.ignorePropertiesWithoutSetters(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnGetters(boolean value) { + super.ignoreInvocationExceptionsOnGetters(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder ignoreInvocationExceptionsOnSetters(boolean value) { + super.ignoreInvocationExceptionsOnSetters(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder sortProperties(boolean value) { + super.sortProperties(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder notBeanPackages(String...values) { + super.notBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder notBeanPackages(Collection<String> values) { + super.notBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setNotBeanPackages(String...values) { + super.setNotBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setNotBeanPackages(Collection<String> values) { + super.setNotBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeNotBeanPackages(String...values) { + super.removeNotBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeNotBeanPackages(Collection<String> values) { + super.removeNotBeanPackages(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder notBeanClasses(Class<?>...values) { + super.notBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder notBeanClasses(Collection<Class<?>> values) { + super.notBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setNotBeanClasses(Class<?>...values) { + super.setNotBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setNotBeanClasses(Collection<Class<?>> values) { + super.setNotBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeNotBeanClasses(Class<?>...values) { + super.removeNotBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeNotBeanClasses(Collection<Class<?>> values) { + super.removeNotBeanClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanFilters(Class<?>...values) { + super.beanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanFilters(Collection<Class<?>> values) { + super.beanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setBeanFilters(Class<?>...values) { + super.setBeanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setBeanFilters(Collection<Class<?>> values) { + super.setBeanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeBeanFilters(Class<?>...values) { + super.removeBeanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeBeanFilters(Collection<Class<?>> values) { + super.removeBeanFilters(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder pojoSwaps(Class<?>...values) { + super.pojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder pojoSwaps(Collection<Class<?>> values) { + super.pojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setPojoSwaps(Class<?>...values) { + super.setPojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setPojoSwaps(Collection<Class<?>> values) { + super.setPojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removePojoSwaps(Class<?>...values) { + super.removePojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removePojoSwaps(Collection<Class<?>> values) { + super.removePojoSwaps(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder implClasses(Map<Class<?>,Class<?>> values) { + super.implClasses(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public <T> SoapXmlSerializerBuilder implClass(Class<T> interfaceClass, Class<? extends T> implClass) { + super.implClass(interfaceClass, implClass); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanDictionary(Class<?>...values) { + super.beanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanDictionary(Collection<Class<?>> values) { + super.beanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setBeanDictionary(Class<?>...values) { + super.setBeanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder setBeanDictionary(Collection<Class<?>> values) { + super.setBeanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeFromBeanDictionary(Class<?>...values) { + super.removeFromBeanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeFromBeanDictionary(Collection<Class<?>> values) { + super.removeFromBeanDictionary(values); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder beanTypePropertyName(String value) { + super.beanTypePropertyName(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder defaultParser(Class<?> value) { + super.defaultParser(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder locale(Locale value) { + super.locale(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder timeZone(TimeZone value) { + super.timeZone(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder mediaType(MediaType value) { + super.mediaType(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder debug(boolean value) { + super.debug(value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder property(String name, Object value) { + super.property(name, value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder properties(Map<String,Object> properties) { + super.properties(properties); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder addToProperty(String name, Object value) { + super.addToProperty(name, value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder putToProperty(String name, Object key, Object value) { + super.putToProperty(name, key, value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder putToProperty(String name, Object value) { + super.putToProperty(name, value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder removeFromProperty(String name, Object value) { + super.removeFromProperty(name, value); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder classLoader(ClassLoader classLoader) { + super.classLoader(classLoader); + return this; + } + + @Override /* CoreObjectBuilder */ + public SoapXmlSerializerBuilder apply(PropertyStore copyFrom) { + super.apply(copyFrom); + return this; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java b/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java index c9561e6..85b830f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java +++ b/juneau-core/src/main/java/org/apache/juneau/svl/MapVar.java @@ -13,6 +13,7 @@ package org.apache.juneau.svl; import static org.apache.juneau.internal.ThrowableUtils.*; + import java.util.*; /** http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/Var.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/Var.java b/juneau-core/src/main/java/org/apache/juneau/svl/Var.java index 026d515..29dc5f2 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/Var.java +++ b/juneau-core/src/main/java/org/apache/juneau/svl/Var.java @@ -27,7 +27,7 @@ import java.io.*; * <li>{@link #resolve(VarResolverSession,String)} - For simple vars. * <li>{@link #resolveTo(VarResolverSession,Writer,String)} - For streamed vars. * </ul> - * Subclasses MUST implement a no-arg constructor so that class names can be passed to the {@link VarResolver#addVars(Class...)} method. + * Subclasses MUST implement a no-arg constructor so that class names can be passed to the {@link VarResolverBuilder#vars(Class...)} method. * They must also be thread safe! * <p> * Two direct abstract subclasses are provided to differentiated between simple and streamed vars: http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java index 55ef915..deb3eb3 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java +++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolver.java @@ -12,13 +12,10 @@ // *************************************************************************************************************************** package org.apache.juneau.svl; -import static java.text.MessageFormat.*; -import static org.apache.juneau.svl.VarResolverContext.*; import java.io.*; import java.util.*; -import org.apache.juneau.*; import org.apache.juneau.ini.*; import org.apache.juneau.svl.vars.*; @@ -28,7 +25,7 @@ import org.apache.juneau.svl.vars.*; * Variables are of the form <code>$X{key}</code>, where <code>X</code> can consist of zero or more ASCII characters.<br> * The variable key can contain anything, even nested variables that get recursively resolved. * <p> - * Variables are defined through the {@link #addVars(Class[])} method. + * Variables are defined through the {@link VarResolverBuilder#vars(Class[])} method. * <p> * The {@link Var} interface defines how variables are converted to values. * <p> @@ -60,7 +57,6 @@ import org.apache.juneau.svl.vars.*; * <p> * Context objects are arbitrary objects associated with this var resolver, such as * a {@link ConfigFile} object. - * They are set through the {@link #setContextObject(String, Object)} method. * They can be any class type. * <p> * Context objects can be retrieved by {@link Var} classes through the {@link VarResolverSession#getSessionObject(Class, String)} method. @@ -78,22 +74,22 @@ import org.apache.juneau.svl.vars.*; * that are identical to {@link VarResolver#resolve(String)} and {@link VarResolver#resolveTo(String, Writer)} except that the <code>Var</code> objects * have access to the session objects through the {@link VarResolverSession#getSessionObject(Class, String)} method. * <p> - * Session objects are specified through either the {@link #createSession(Map)} method or the {@link VarResolverSession#setSessionObject(String, Object)} methods. + * Session objects are specified through either the {@link #createSession(Map)} method or the {@link VarResolverSession#sessionObject(String, Object)} methods. * * <h6 class='topic'>Cloning</h6> * <p> - * Var resolvers can be cloned by using the {@link #clone()} method. + * Var resolvers can be cloned by using the {@link #builder()} method. * Cloning a resolver will copy it's {@link Var} class names and context objects. * <p> * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> - * VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>); + * VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigVar.<jk>class</jk>, ArgsVar.<jk>class</jk>).build(); * </p> * * @see org.apache.juneau.svl */ -public class VarResolver extends CoreApi { +public class VarResolver { /** * Default string variable resolver with support for system properties and environment variables: @@ -108,59 +104,47 @@ public class VarResolver extends CoreApi { * @see SystemPropertiesVar * @see EnvVariablesVar */ - public static final VarResolver DEFAULT = new VarResolver().addVars(SystemPropertiesVar.class, EnvVariablesVar.class, SwitchVar.class, IfVar.class).lock(); + public static final VarResolver DEFAULT = new VarResolverBuilder().defaultVars().build(); + + final VarResolverContext ctx; /** - * Construct an empty var resolver with no vars. + * Constructor. + * @param vars The var classes + * @param contextObjects */ - public VarResolver() {} + public VarResolver(Class<? extends Var>[] vars, Map<String,Object> contextObjects) { + this.ctx = new VarResolverContext(vars, contextObjects); + } /** - * Register new variables with this resolver. + * Returns a new builder object using the settings in this resolver as a base. * - * @param vars The variable resolver classes. - * These classes must subclass from {@link Var} and have no-arg constructors. - * @return This object (for method chaining). + * @return A new var resolver builder. */ - public VarResolver addVars(Class<?>...vars) { - checkLock(); - ContextFactory cf = getContextFactory(); - for (Class<?> v : vars) { - try { - v.newInstance(); - } catch (InstantiationException e) { - throw new UnsupportedOperationException(format("Cannot instantiate variable class {0}. Must have a public no-arg constructor.", v.getName())); - } catch (RuntimeException e) { - throw e; - } catch (Exception e) { - throw new RuntimeException(e); - } - cf.addToProperty(SVL_vars, v); - } - return this; + public VarResolverBuilder builder() { + return new VarResolverBuilder() + .vars(ctx.getVars()) + .contextObjects(ctx.getContextObjects()); } /** - * Associates a context object with this resolver. - * - * @param name The name of the context object. - * @param object The context object. - * @return This object (for method chaining). + * Returns the read-only properties on this variable resolver. + * @return The read-only properties on this variable resolver. */ - public VarResolver setContextObject(String name, Object object) { - getContextFactory().putToProperty(SVL_context, name, object); - return this; + public VarResolverContext getContext() { + return ctx; } /** * Creates a new resolver session with no session objects. * <p> - * Session objects can be associated with the specified session using the {@link VarResolverSession#setSessionObject(String, Object)} method. + * Session objects can be associated with the specified session using the {@link VarResolverSession#sessionObject(String, Object)} method. * * @return A new resolver session. */ public VarResolverSession createSession() { - return new VarResolverSession(getContext(VarResolverContext.class), null); + return new VarResolverSession(ctx, null); } /** @@ -170,7 +154,7 @@ public class VarResolver extends CoreApi { * @return A new resolver session. */ public VarResolverSession createSession(Map<String,Object> sessionObjects) { - return new VarResolverSession(getContext(VarResolverContext.class), sessionObjects); + return new VarResolverSession(ctx, sessionObjects); } /** @@ -199,25 +183,4 @@ public class VarResolver extends CoreApi { public void resolveTo(String s, Writer w) throws IOException { createSession(null).resolveTo(s, w); } - - - //-------------------------------------------------------------------------------- - // Overridden methods - //-------------------------------------------------------------------------------- - - @Override /* Lockable */ - public VarResolver lock() { - super.lock(); - return this; - } - - @Override /* Lockable */ - public VarResolver clone() { - try { - return (VarResolver)super.clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - } -} - +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java new file mode 100644 index 0000000..9d6428a --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java @@ -0,0 +1,109 @@ +// *************************************************************************************************************************** +// * 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.juneau.svl; + +import static java.text.MessageFormat.*; + +import java.util.*; + +import org.apache.juneau.svl.vars.*; + +/** + * Builder class for building instances of {@link VarResolver}. + */ +@SuppressWarnings("hiding") +public class VarResolverBuilder { + + private final List<Class<? extends Var>> vars = new ArrayList<Class<? extends Var>>(); + private final Map<String,Object> contextObjects = new HashMap<String,Object>(); + + /** + * Create a new var resolver using the settings in this builder. + * + * @return A new var resolver. + */ + @SuppressWarnings("unchecked") + public VarResolver build() { + return new VarResolver(vars.toArray(new Class[vars.size()]), contextObjects); + } + + /** + * Register new variables with this resolver. + * + * @param vars The variable resolver classes. + * These classes must subclass from {@link Var} and have no-arg constructors. + * @return This object (for method chaining). + */ + @SuppressWarnings("unchecked") + public VarResolverBuilder vars(Class<?>...vars) { + for (Class<?> v : vars) { + try { + v.newInstance(); + } catch (InstantiationException e) { + throw new UnsupportedOperationException(format("Cannot instantiate variable class {0}. Must have a public no-arg constructor.", v.getName())); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new RuntimeException(e); + } + this.vars.add((Class<? extends Var>)v); + } + return this; + } + + /** + * Adds the default variables to this builder. + * <p> + * The default variables are: + * <ul> + * <li>{@link SystemPropertiesVar} + * <li>{@link EnvVariablesVar} + * <li>{@link SwitchVar} + * <li>{@link IfVar} + * </ul> + * + * @return This object (for method chaining). + */ + public VarResolverBuilder defaultVars() { + return vars(SystemPropertiesVar.class, EnvVariablesVar.class, SwitchVar.class, IfVar.class); + } + + /** + * Associates a context object with this resolver. + * <p> + * A context object is essentially some environmental object that doesn't change + * but is used by vars to customize output. + * + * @param name The name of the context object. + * @param object The context object. + * @return This object (for method chaining). + */ + public VarResolverBuilder contextObject(String name, Object object) { + contextObjects.put(name, object); + return this; + } + + /** + * Associates multiple context objects with this resolver. + * <p> + * A context object is essentially some environmental object that doesn't change + * but is used by vars to customize output. + * + * @param map A map of context objects keyed by their name. + * @return This object (for method chaining). + */ + public VarResolverBuilder contextObjects(Map<String,Object> map) { + contextObjects.putAll(map); + return this; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java index 2767154..b3d0e18 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverContext.java @@ -15,67 +15,32 @@ package org.apache.juneau.svl; import java.util.*; import java.util.concurrent.*; -import org.apache.juneau.*; import org.apache.juneau.internal.*; /** * Configurable properties on the {@link VarResolver} class. * <p> * Used to associate {@link Var Vars} and context objects with {@link VarResolver VarResolvers}. - * <p> - * See {@link ContextFactory} for more information about context properties. * * @see org.apache.juneau.svl */ -public class VarResolverContext extends Context { - - /** - * An explicit list of Java classes to be excluded from consideration as being beans (<code>Set<Class></code>). - * <p> - * Not-bean classes are typically converted to <code>Strings</code> during serialization even if they - * appear to be bean-like. - */ - public static final String SVL_vars = "Svl.vars.set"; - - /** - * Add to the list of packages whose classes should not be considered beans. - */ - public static final String SVL_vars_add = "Svl.vars.set.add"; - - /** - * Remove from the list of packages whose classes should not be considered beans. - */ - public static final String SVL_vars_remove = "Svl.vars.set.remove"; - - /** - * Context objects associated with the resolver (<code>Map$lt;String,Object></code>). - */ - public static final String SVL_context = "Svl.context.map"; - - /** - * Adds a new map entry to the {@link #SVL_context} property. - */ - public static final String SVL_context_put = "Svl.context.map.put"; - - - // Map of Vars added through addVar() method. - private final Map<String,Var> stringVars; +public class VarResolverContext { + private final Class<?>[] vars; + private final Map<String,Var> varMap; private final Map<String,Object> contextObjects; - /** * Constructor. - * - * @param cf The context factory to copy from. + * @param vars The Var classes used for resolving string variables. + * @param contextObjects Read-only context objects. */ - public VarResolverContext(ContextFactory cf) { - super(cf); - ContextFactory.PropertyMap pm = cf.getPropertyMap("Svl"); + public VarResolverContext(Class<? extends Var>[] vars, Map<String,Object> contextObjects) { + + this.vars = Arrays.copyOf(vars, vars.length); - Class<?>[] varClasses = pm.get(SVL_vars, Class[].class, new Class[0]); Map<String,Var> m = new ConcurrentSkipListMap<String,Var>(); - for (Class<?> c : varClasses) { + for (Class<?> c : vars) { if (! ClassUtils.isParentClass(Var.class, c)) throw new RuntimeException("Invalid variable class. Must extend from Var"); try { @@ -85,9 +50,9 @@ public class VarResolverContext extends Context { throw new RuntimeException(e); } } - this.stringVars = Collections.unmodifiableMap(m); - this.contextObjects = Collections.unmodifiableMap(pm.getMap(SVL_context, String.class, Object.class, Collections.<String,Object>emptyMap())); + this.varMap = Collections.unmodifiableMap(m); + this.contextObjects = contextObjects == null ? null : Collections.unmodifiableMap(new ConcurrentHashMap<String,Object>(contextObjects)); } /** @@ -95,8 +60,17 @@ public class VarResolverContext extends Context { * * @return A map whose keys are var names (e.g. <js>"S"</js>) and values are {@link Var} instances. */ - protected Map<String,Var> getVars() { - return stringVars; + protected Map<String,Var> getVarMap() { + return varMap; + } + + /** + * Returns an array of variables define in this variable resolver context. + * + * @return A new array containing the variables in this context. + */ + protected Class<?>[] getVars() { + return Arrays.copyOf(vars, vars.length); } /** @@ -106,6 +80,15 @@ public class VarResolverContext extends Context { * @return The context object, or <jk>null</jk> if no context object is specified with that name. */ protected Object getContextObject(String name) { - return contextObjects.get(name); + return contextObjects == null ? null : contextObjects.get(name); + } + + /** + * Returns the context map of this variable resolver context. + * + * @return An unmodifiable map of the context objects of this variable resolver context. + */ + protected Map<String,Object> getContextObjects() { + return contextObjects; } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java index 419fd2a..824e0e2 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/svl/VarResolverSession.java @@ -18,8 +18,6 @@ import static org.apache.juneau.internal.StringUtils.*; import java.io.*; import java.util.*; -import org.apache.juneau.*; - /** * A var resolver session that combines a {@link VarResolver} with one or more session objects. * <p> @@ -34,21 +32,22 @@ import org.apache.juneau.*; * * @see org.apache.juneau.svl */ -public class VarResolverSession extends Session { +public class VarResolverSession { private final VarResolverContext context; + private final Map<String,Object> sessionObjects; /** * Constructor. * * @param context The {@link VarResolver} context object that contains the {@link Var Vars} and * context objects associated with that resolver. - * @param sessionObjects + * @param sessionObjects The session objects. + * */ public VarResolverSession(VarResolverContext context, Map<String,Object> sessionObjects) { - super(context, null); this.context = context; - addToCache(sessionObjects); + this.sessionObjects = sessionObjects != null ? sessionObjects : new HashMap<String,Object>(); } /** @@ -58,8 +57,8 @@ public class VarResolverSession extends Session { * @param o The session object. * @return This method (for method chaining). */ - public VarResolverSession setSessionObject(String name, Object o) { - addToCache(name, o); + public VarResolverSession sessionObject(String name, Object o) { + sessionObjects.put(name, o); return this; } @@ -266,16 +265,17 @@ public class VarResolverSession extends Session { * @return The session object. Never <jk>null</jk>. * @throws RuntimeException If session object with specified name does not exist. */ + @SuppressWarnings("unchecked") public <T> T getSessionObject(Class<T> c, String name) { T t = null; try { - t = getFromCache(c, name); + t = (T)sessionObjects.get(name); if (t == null) { - addToCache(name, this.context.getContextObject(name)); - t = getFromCache(c, name); + sessionObjects.put(name, this.context.getContextObject(name)); + t = (T)sessionObjects.get(name); } } catch (Exception e) { - throw new RuntimeException(format("Session object ''{0}'' or context object ''SvlContext.{0}'' could not be converted to type ''{1}''.", name, c.getName())); + throw new RuntimeException(format("Session object ''{0}'' or context object ''SvlContext.{0}'' could not be converted to type ''{1}''.", name, c.getName()), e); } if (t == null) throw new RuntimeException(format("Session object ''{0}'' or context object ''SvlContext.{0}'' not found.", name)); @@ -289,6 +289,6 @@ public class VarResolverSession extends Session { * @return The {@link Var} instance, or <jk>null</jk> if no <code>Var</code> is associated with the specified name. */ protected Var getVar(String name) { - return this.context.getVars().get(name); + return this.context.getVarMap().get(name); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/svl/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/svl/package.html b/juneau-core/src/main/java/org/apache/juneau/svl/package.html index fe61c42..9ef51ef 100644 --- a/juneau-core/src/main/java/org/apache/juneau/svl/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/svl/package.html @@ -125,7 +125,7 @@ <jc>// Next create a var resolver that extends the existing DEFAULT resolver // that supports resolving system properties.</jc> - VarResolver r = VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(UrlEncodeVar.<jk>class</jk>); + VarResolver r = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(UrlEncodeVar.<jk>class</jk>).build(); <jc>// Retrieve a system property and URL-encode it if necessary.</jc> String myProperty = r.resolve(<js>"$URLEncode{$S{my.property}}"</js>); @@ -191,7 +191,7 @@ These object dependencies are made by setting context objects on the var resolver. </p> <p> - Context objects are set through the {@link org.apache.juneau.svl.VarResolver#setContextObject(String,Object)} method. + Context objects are set through the {@link org.apache.juneau.svl.VarResolverBuilder#contextObject(String,Object)} method. They can be any class type. </p> <p> @@ -209,19 +209,19 @@ of a {@link org.apache.juneau.svl.VarResolverSession} object that contains {@link org.apache.juneau.svl.VarResolverSession#resolve(String)} and {@link org.apache.juneau.svl.VarResolverSession#resolveTo(String,Writer)} methods that are identical to {@link org.apache.juneau.svl.VarResolver#resolve(String)} and {@link org.apache.juneau.svl.VarResolver#resolveTo(String, Writer)} except that the <code>Var</code> objects have access to the session objects through the {@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} method. - Session objects are specified through either the {@link org.apache.juneau.svl.VarResolver#createSession(Map)} method or the {@link org.apache.juneau.svl.VarResolverSession#setSessionObject(String, Object)} methods. + Session objects are specified through either the {@link org.apache.juneau.svl.VarResolver#createSession(Map)} method or the {@link org.apache.juneau.svl.VarResolverSession#sessionObject(String, Object)} methods. </p> <p> Like Context object, Session objects are used by {@link org.apache.juneau.svl.Var Vars} by calling the {@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} method. </p> <p> - Var resolvers can be cloned and extended by using the {@link org.apache.juneau.svl.VarResolver#clone()} method. + Var resolvers can be cloned and extended by using the {@link org.apache.juneau.svl.VarResolver#builder()} method. Cloning a resolver will copy it's {@link org.apache.juneau.svl.Var} class names and context objects. </p> <h6 class='topic'>Example:</h6> <p class='bcode'> <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> - VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.clone().addVars(ConfigFileVar.<jk>class</jk>, ArgsVar.<jk>class</jk>); + VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigFileVar.<jk>class</jk>, ArgsVar.<jk>class</jk>).build(); </p> </div> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java b/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java index 76c8dc0..10fc8be 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java +++ b/juneau-core/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java @@ -40,28 +40,28 @@ public final class AnnotationBeanFilterBuilder extends BeanFilterBuilder { Bean b = li.previous(); if (! b.properties().isEmpty()) - setProperties(StringUtils.split(b.properties(), ',')); + properties(StringUtils.split(b.properties(), ',')); if (! b.typeName().isEmpty()) - setTypeName(b.typeName()); + typeName(b.typeName()); if (b.sort()) - setSortProperties(true); + sortProperties(true); if (! b.excludeProperties().isEmpty()) - setExcludeProperties(StringUtils.split(b.excludeProperties(), ',')); + excludeProperties(StringUtils.split(b.excludeProperties(), ',')); if (b.propertyNamer() != PropertyNamerDefault.class) - setPropertyNamer(b.propertyNamer()); + propertyNamer(b.propertyNamer()); if (b.interfaceClass() != Object.class) - setInterfaceClass(b.interfaceClass()); + interfaceClass(b.interfaceClass()); if (b.stopClass() != Object.class) - setStopClass(b.stopClass()); + stopClass(b.stopClass()); if (b.beanDictionary().length > 0) - addToBeanDictionary(b.beanDictionary()); + beanDictionary(b.beanDictionary()); } } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java index b44da60..bf30f3f 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java +++ b/juneau-core/src/main/java/org/apache/juneau/transform/BeanFilterBuilder.java @@ -26,7 +26,7 @@ import org.apache.juneau.*; * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create our serializer with a bean filter.</jc> - * WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(AddressFilter.<jk>class</jk>); + * WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(AddressFilter.<jk>class</jk>).build(); * * Address a = <jk>new</jk> Address(); * String json = s.serialize(a); <jc>// Serializes only street, city, state.</jc> @@ -43,6 +43,7 @@ import org.apache.juneau.*; * <h5 class='section'>Additional information:</h5> * See <a class='doclink' href='package-summary.html#TOC'>org.apache.juneau.transform</a> for more information. */ +@SuppressWarnings("hiding") public abstract class BeanFilterBuilder { Class<?> beanClass; @@ -68,7 +69,7 @@ public abstract class BeanFilterBuilder { * @param typeName The dictionary name associated with this bean. * @return This object (for method chaining). */ - public BeanFilterBuilder setTypeName(String typeName) { + public BeanFilterBuilder typeName(String typeName) { this.typeName = typeName; return this; } @@ -81,7 +82,7 @@ public abstract class BeanFilterBuilder { * @param properties The properties associated with the bean class. * @return This object (for method chaining). */ - public BeanFilterBuilder setProperties(String...properties) { + public BeanFilterBuilder properties(String...properties) { this.properties = properties; return this; } @@ -92,7 +93,7 @@ public abstract class BeanFilterBuilder { * @param excludeProperties The list of properties to ignore on a bean. * @return This object (for method chaining). */ - public BeanFilterBuilder setExcludeProperties(String...excludeProperties) { + public BeanFilterBuilder excludeProperties(String...excludeProperties) { this.excludeProperties = excludeProperties; return this; } @@ -121,7 +122,7 @@ public abstract class BeanFilterBuilder { * } * } * - * JsonSerializer s = new JsonSerializer().addBeanFilters(AFilter.<jk>class</jk>); + * JsonSerializer s = new JsonSerializerBuilder().beanFilters(AFilter.<jk>class</jk>).build(); * A1 a1 = <jk>new</jk> A1(); * String r = s.serialize(a1); * <jsm>assertEquals</jsm>(<js>"{f0:'f0'}"</js>, r); <jc>// Note f1 is not serialized</jc> @@ -133,7 +134,7 @@ public abstract class BeanFilterBuilder { * @param interfaceClass The interface class to use for this bean class. * @return This object (for method chaining). */ - public BeanFilterBuilder setInterfaceClass(Class<?> interfaceClass) { + public BeanFilterBuilder interfaceClass(Class<?> interfaceClass) { this.interfaceClass = interfaceClass; return this; } @@ -164,7 +165,7 @@ public abstract class BeanFilterBuilder { * @param stopClass * @return This object (for method chaining). */ - public BeanFilterBuilder setStopClass(Class<?> stopClass) { + public BeanFilterBuilder stopClass(Class<?> stopClass) { this.stopClass = stopClass; return this; } @@ -175,7 +176,7 @@ public abstract class BeanFilterBuilder { * @param sortProperties * @return This object (for method chaining). */ - public BeanFilterBuilder setSortProperties(boolean sortProperties) { + public BeanFilterBuilder sortProperties(boolean sortProperties) { this.sortProperties = sortProperties; return this; } @@ -186,7 +187,7 @@ public abstract class BeanFilterBuilder { * @param propertyNamer The property namer instance. * @return This object (for method chaining). */ - public BeanFilterBuilder setPropertyNamer(PropertyNamer propertyNamer) { + public BeanFilterBuilder propertyNamer(PropertyNamer propertyNamer) { this.propertyNamer = propertyNamer; return this; } @@ -198,18 +199,29 @@ public abstract class BeanFilterBuilder { * @return This object (for method chaining). * @throws Exception Thrown from constructor method. */ - public BeanFilterBuilder setPropertyNamer(Class<? extends PropertyNamer> c) throws Exception { + public BeanFilterBuilder propertyNamer(Class<? extends PropertyNamer> c) throws Exception { this.propertyNamer = c.newInstance(); return this; } /** - * Adds a class to this bean's bean dictionary. + * Sets the contents of this bean's bean dictionary. * - * @param c The class to add to this bean dictionary. + * @param c The classes to set on this bean's bean dictionary. * @return This object (for method chaining). */ - public BeanFilterBuilder addToBeanDictionary(Class<?>...c) { + public BeanFilterBuilder setBeanDictionary(Class<?>...c) { + beanDictionary = new ArrayList<Class<?>>(Arrays.asList(c)); + return this; + } + + /** + * Adds classes to this bean's bean dictionary. + * + * @param c The classes to add to this bean's bean dictionary. + * @return This object (for method chaining). + */ + public BeanFilterBuilder beanDictionary(Class<?>...c) { if (beanDictionary == null) beanDictionary = new ArrayList<Class<?>>(Arrays.asList(c)); else for (Class<?> cc : c) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java b/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java index 0ccafaf..70300c0 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java +++ b/juneau-core/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java @@ -18,7 +18,7 @@ import org.apache.juneau.*; * Simple bean filter that simply identifies a class to be used as an interface * class for all child classes. * <p> - * These objects are created when you pass in non-<code>BeanFilterBuilder</code> classes to {@link ContextFactory#addToProperty(String,Object)}, + * These objects are created when you pass in non-<code>BeanFilterBuilder</code> classes to {@link PropertyStore#addToProperty(String,Object)}, * and are equivalent to adding a <code><ja>@Bean</ja>(interfaceClass=Foo.<jk>class</jk>)</code> annotation on the <code>Foo</code> class. */ public class InterfaceBeanFilterBuilder extends BeanFilterBuilder { @@ -30,6 +30,6 @@ public class InterfaceBeanFilterBuilder extends BeanFilterBuilder { */ public InterfaceBeanFilterBuilder(Class<?> interfaceClass) { super(interfaceClass); - setInterfaceClass(interfaceClass); + interfaceClass(interfaceClass); } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java index 7c36e7b..477a37a 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java +++ b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java @@ -33,7 +33,7 @@ import org.apache.juneau.serializer.*; * Swaps MUST declare a public no-arg constructor so that the bean context can instantiate them. * <p> * <code>PojoSwaps</code> are associated with instances of {@link BeanContext BeanContexts} by passing the swap class to - * the {@link CoreApi#addPojoSwaps(Class...)} method.<br> + * the {@link CoreObjectBuilder#pojoSwaps(Class...)} method.<br> * When associated with a bean context, fields of the specified type will automatically be converted when the * {@link BeanMap#get(Object)} or {@link BeanMap#put(String, Object)} methods are called.<br> * <p> http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java index b8e4991..d6bdd39 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java +++ b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java @@ -59,12 +59,12 @@ import org.apache.juneau.serializer.*; * can be instantiated by the parser before being converted into the normal class by the untransform method). * </ul> * <p> - * Surrogate classes are associated with serializers and parsers using the {@link CoreApi#addPojoSwaps(Class...)} method. + * Surrogate classes are associated with serializers and parsers using the {@link CoreObjectBuilder#pojoSwaps(Class...)} method. * <p class='bcode'> * <ja>@Test</ja> * <jk>public void</jk> test() <jk>throws</jk> Exception { - * JsonSerializer s = <jk>new</jk> JsonSerializer.Simple().addPojoSwaps(Surrogate.<jk>class</jk>); - * JsonParser p = <jk>new</jk> JsonParser().addPojoSwaps(Surrogate.<jk>class</jk>); + * JsonSerializer s = <jk>new</jk> JsonSerializerBuilder().simple().pojoSwaps(Surrogate.<jk>class</jk>).build(); + * JsonParser p = <jk>new</jk> JsonParserBuilder().pojoSwaps(Surrogate.<jk>class</jk>).build(); * String r; * Normal n = Normal.<jsm>create</jsm>(); * http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/95e832e1/juneau-core/src/main/java/org/apache/juneau/transform/package.html ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/package.html b/juneau-core/src/main/java/org/apache/juneau/transform/package.html index e6e9f88..32f0413 100644 --- a/juneau-core/src/main/java/org/apache/juneau/transform/package.html +++ b/juneau-core/src/main/java/org/apache/juneau/transform/package.html @@ -92,11 +92,11 @@ Transforms are added to serializers and parsers in a variety of ways: </p> <ul class='spaced-list'> - <li>{@link org.apache.juneau.serializer.Serializer#addBeanFilters(Class[])} / {@link org.apache.juneau.serializer.Serializer#addPojoSwaps(Class[])} - On serializers. - <li>{@link org.apache.juneau.serializer.SerializerGroup#addBeanFilters(Class[])} / {@link org.apache.juneau.serializer.SerializerGroup#addPojoSwaps(Class[])} - On groups of serializers. - <li>{@link org.apache.juneau.parser.Parser#addBeanFilters(Class[])} / {@link org.apache.juneau.parser.Parser#addPojoSwaps(Class[])} - On parsers. - <li>{@link org.apache.juneau.parser.ParserGroup#addBeanFilters(Class[])} / {@link org.apache.juneau.parser.ParserGroup#addPojoSwaps(Class[])} - On groups of parsers. - <li>{@link org.apache.juneau.rest.client.RestClient#addBeanFilters(Class[])} / {@link org.apache.juneau.rest.client.RestClient#addPojoSwaps(Class[])} - On the serializer and parser registered on a REST client. + <li>{@link org.apache.juneau.serializer.SerializerBuilder#beanFilters(Class[])} / {@link org.apache.juneau.serializer.SerializerBuilder#pojoSwaps(Class[])} - On serializers. + <li>{@link org.apache.juneau.serializer.SerializerGroupBuilder#beanFilters(Class[])} / {@link org.apache.juneau.serializer.SerializerGroupBuilder#pojoSwaps(Class[])} - On groups of serializers. + <li>{@link org.apache.juneau.parser.ParserBuilder#beanFilters(Class[])} / {@link org.apache.juneau.parser.ParserBuilder#pojoSwaps(Class[])} - On parsers. + <li>{@link org.apache.juneau.parser.ParserGroupBuilder#beanFilters(Class[])} / {@link org.apache.juneau.parser.ParserGroupBuilder#pojoSwaps(Class[])} - On groups of parsers. + <li>{@link org.apache.juneau.rest.client.RestClientBuilder#beanFilters(Class[])} / {@link org.apache.juneau.rest.client.RestClientBuilder#pojoSwaps(Class[])} - On the serializer and parser registered on a REST client. <li>{@link org.apache.juneau.rest.annotation.RestResource#beanFilters() @RestResource.beanFilters()} / {@link org.apache.juneau.rest.annotation.RestResource#pojoSwaps() @RestResource.pojoSwaps()}- On all serializers and parsers defined on a REST servlet. <li>{@link org.apache.juneau.rest.annotation.RestMethod#beanFilters() @RestMethod.beanFilters()} / {@link org.apache.juneau.rest.annotation.RestMethod#pojoSwaps() @RestMethod.pojoSwaps()} - On all serializers and parsers defined on a method in a REST servlet. <li>{@link org.apache.juneau.rest.jaxrs.JuneauProvider#beanFilters() @JuneauProvider.beanFilters()} / {@link org.apache.juneau.rest.jaxrs.JuneauProvider#pojoSwaps() @JuneauProvider.pojoSwaps()} - On all serializers and parsers defined on a JAX-RS provider. @@ -136,7 +136,7 @@ } } - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); Person p = getPerson(); String json = s.serialize(p); <jc>// Prints "{age:45,name:'John Smith'}"</jc> </p> @@ -159,7 +159,7 @@ } } - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); Person p = getPerson(); String json = s.serialize(p); <jc>// Prints "{age:45}"</jc> </p> @@ -192,12 +192,12 @@ } <jc>// Serialize to JSON</jc> - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); Person person = getPerson(); String json = s.serialize(p); <jc>// Prints "{AGE:45,NAME:'John Smith'}"</jc> <jc>// Parse back into bean</jc> - ReaderParser p = <jk>new</jk> JsonParser().addBeanFilters(MyBeanFilter.<jk>class</jk>); + ReaderParser p = <jk>new</jk> JsonParserBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); person = p.parse(json, Person.class); <jc>// Read back into original object</jc> </p> <p> @@ -250,7 +250,7 @@ </p> <p class='bcode'> <jc>// Serialize to JSON</jc> - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); MyClass c = <jk>new</jk> MyClassBar(); String json = s.serialize(p); <jc>// Prints "{foo:'foo'}"</jc> </p> @@ -273,14 +273,14 @@ } </p> <p> - Also, the <code>addBeanFilters(...)</code> methods will automatically interpret any non-<code>BeanFilter</code> classes + Also, the <code>*BeanFilters(...)</code> methods will automatically interpret any non-<code>BeanFilter</code> classes passed in as meaning interface classes. So in the previous example, the <code>BeanFilter</code> class could have been avoided altogether by just passing in <code>MyClass.<jk>class</jk></code> to the serializer, like so: </p> <p class='bcode'> <jc>// Serialize to JSON</jc> - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyClass.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyClass.<jk>class</jk>).build(); </p> <p> In fact, this is the shortcut used in the <code>RequestEchoResource</code> sample class: @@ -388,11 +388,11 @@ } <jc>// Create a new JSON serializer, associate our date swap with it, and serialize a sample bean.</jc> - Serializer serializer = <jk>new</jk> JsonSerializer().addPojoSwaps(MyDateSwap.<jk>class</jk>); + Serializer serializer = <jk>new</jk> JsonSerializerBuilder().pojoSwaps(MyDateSwap.<jk>class</jk>).build(); String json = serializer.serialize(<jk>new</jk> MyBean()); <jc>// == "{date:'2012-03-03T04:05:06-0500'}"</jc> <jc>// Create a JSON parser, associate our date swap with it, and reconstruct our bean (including the date).</jc> - ReaderParser parser = <jk>new</jk> JsonParser().addPojoSwaps(MyDateSwap.<jk>class</jk>); + ReaderParser parser = <jk>new</jk> JsonParserBuilder().pojoSwaps(MyDateSwap.<jk>class</jk>).build(); MyBean bean = parser.parse(json, MyBean.<jk>class</jk>); <jk>int</jk> day = bean.<jf>date</jf>.getDay(); <jc>// == 3</jc> </p> @@ -401,7 +401,7 @@ </p> <p class='bcode'> <jc>// Create a new bean context and add our swap.</jc> - BeanContext beanContext = <jk>new</jk> BeanContext().addPojoSwaps(MyDateSwap.<jk>class</jk>); + BeanContext beanContext = <jk>new</jk> BeanContext().pojoSwaps(MyDateSwap.<jk>class</jk>); <jc>// Create a new bean.</jc> MyBean myBean = <jk>new</jk> MyBean(); @@ -459,8 +459,8 @@ </p> <p class='bcode'> <jc>// Create a JSON serializer and register the BASE64 encoding swap with it.</jc> - Serializer serializer = <jk>new</jk> JsonSerializer().addPojoSwaps(ByteArrayBase64Swap.<jk>class</jk>); - ReaderParser parser = <jk>new</jk> JsonParser().addPojoSwaps(ByteArrayBase64Swap.<jk>class</jk>); + Serializer serializer = <jk>new</jk> JsonSerializerBuilder().pojoSwaps(ByteArrayBase64Swap.<jk>class</jk>).build(); + ReaderParser parser = <jk>new</jk> JsonParserBuilder().pojoSwaps(ByteArrayBase64Swap.<jk>class</jk>).build(); <jk>byte</jk>[] a1 = {1,2,3}; String s1 = serializer.serialize(a1); <jc>// Produces "'AQID'"</jc> @@ -526,7 +526,7 @@ </p> <p class='bcode'> <jc>// Create a JSON serializer that can serialize Iterators.</jc> - Serializer serializer = <jk>new</jk> JsonSerializer().addPojoSwaps(IteratorSwap.<jk>class</jk>); + Serializer serializer = <jk>new</jk> JsonSerializerBuilder().pojoSwaps(IteratorSwap.<jk>class</jk>).build(); <jc>// Construct an iterator we want to serialize.</jc> Iterator iterator = <jk>new</jk> ObjectList(1,2,3).iterator(); @@ -535,7 +535,7 @@ String s = serializer.serialize(iterator); <jc>// Produces "[1,2,3]"</jc> <jc>// Try to parse it.</jc> - ReaderParser parser = <jk>new</jk> JsonParser().addPojoSwaps(IteratorSwap.<jk>class</jk>); + ReaderParser parser = <jk>new</jk> JsonParserBuilder().pojoSwaps(IteratorSwap.<jk>class</jk>).build(); iterator = parser.parse(s, Iterator.<jk>class</jk>); <jc>// Throws ParseException!!!</jc> </p> </div> @@ -579,7 +579,7 @@ </p> <p class='bcode'> <jc>// Serialize to JSON</jc> - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyBeanFilter.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyBeanFilter.<jk>class</jk>).build(); MyClass c = <jk>new</jk> MyClassBar(); String json = s.serialize(p); <jc>// Prints "{foo:'foo'}"</jc> </p> @@ -602,12 +602,12 @@ } </p> <p> - Also, the <code>addBeanFilters()</code> methods will automatically interpret any non-<code>BeanFilter</code> classes passed in as meaning interface classes. + Also, the <code>beanFilters()</code> methods will automatically interpret any non-<code>BeanFilter</code> classes passed in as meaning interface classes. So in the previous example, the <code>BeanFilter</code> class could have been avoided altogether by just passing in <code>MyClass.<jk>class</jk></code> to the serializer, like so: </p> <p class='bcode'> <jc>// Serialize to JSON</jc> - WriterSerializer s = <jk>new</jk> JsonSerializer().addBeanFilters(MyClass.<jk>class</jk>); + WriterSerializer s = <jk>new</jk> JsonSerializerBuilder().beanFilters(MyClass.<jk>class</jk>).build(); </p> </div> @@ -661,7 +661,7 @@ </p> <p class='bcode'> <jc>// Create a JSON serializer that can serialize Iterators.</jc> - Serializer serializer = <jk>new</jk> JsonSerializer().addPojoSwaps(MySerializableSurrogate.<jk>class</jk>); + Serializer serializer = <jk>new</jk> JsonSerializerBuilder().pojoSwaps(MySerializableSurrogate.<jk>class</jk>).build(); </p> <p> When the serializer encounters the non-serializable class, it will serialize an instance of the surrogate instead.
