You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2016/08/01 15:49:26 UTC
[08/51] [partial] incubator-juneau git commit: Merge changes from
GitHub repo.
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerProperties.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerProperties.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerProperties.java
deleted file mode 100755
index 669a832..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerProperties.java
+++ /dev/null
@@ -1,303 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.serializer;
-
-import com.ibm.juno.core.*;
-
-/**
- * Configurable properties common to all {@link Serializer} classes.
- * <p>
- * Use the {@link Serializer#setProperty(String, Object)} method to set property values.
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public final class SerializerProperties implements Cloneable {
-
- /**
- * Max depth ({@link Integer}, default=<code>100</code>).
- * <p>
- * Abort serialization if specified depth is reached in the POJO tree.
- * If this depth is exceeded, an exception is thrown.
- * This prevents stack overflows from occurring when trying to serialize models with recursive references.
- */
- public static final String SERIALIZER_maxDepth = "Serializer.maxDepth";
-
- /**
- * Initial depth ({@link Integer}, default=<code>0</code>).
- * <p>
- * The initial indentation level at the root.
- * Useful when constructing document fragments that need to be indented at a certain level.
- */
- public static final String SERIALIZER_initialDepth = "Serializer.initialDepth";
-
- /**
- * Automatically detect POJO recursions ({@link Boolean}, default=<jk>false</jk>).
- * <p>
- * Specifies that recursions should be checked for during serialization.
- * <p>
- * Recursions can occur when serializing models that aren't true trees, but rather contain loops.
- * <p>
- * The behavior when recursions are detected depends on the value for {@link #SERIALIZER_ignoreRecursions}.
- * <p>
- * For example, if a model contains the links A->B->C->A, then the JSON generated will look like
- * the following when <jsf>SERIALIZER_ignoreRecursions</jsf> is <jk>true</jk>...
- * <code>{A:{B:{C:null}}}</code><br>
- * <p>
- * Note: Checking for recursion can cause a small performance penalty.
- */
- public static final String SERIALIZER_detectRecursions = "Serializer.detectRecursions";
-
- /**
- * Ignore recursion errors ({@link Boolean}, default=<jk>false</jk>).
- * <p>
- * Used in conjunction with {@link #SERIALIZER_detectRecursions}.
- * Setting is ignored if <jsf>SERIALIZER_detectRecursions</jsf> is <jk>false</jk>.
- * <p>
- * If <jk>true</jk>, when we encounter the same object when serializing a tree,
- * we set the value to <jk>null</jk>.
- * Otherwise, an exception is thrown.
- */
- public static final String SERIALIZER_ignoreRecursions = "Serializer.ignoreRecursions";
-
- /**
- * Debug mode ({@link Boolean}, default=<jk>false</jk>).
- * <p>
- * Enables the following additional information during serialization:
- * <ul>
- * <li>When bean getters throws exceptions, the exception includes the object stack information
- * in order to determine how that method was invoked.
- * <li>Enables {#link SERIALIZER_detectRecursions}.
- * </ul>
- */
- public static final String SERIALIZER_debug = "Serializer.debug";
-
- /**
- * Use indentation in output ({@link Boolean}, default=<jk>false</jk>).
- * <p>
- * If <jk>true</jk>, newlines and indentation is added to the output to improve readability.
- */
- public static final String SERIALIZER_useIndentation = "Serializer.useIndentation";
-
- /**
- * Add class attributes to output ({@link Boolean}, default=<jk>false</jk>).
- * <p>
- * If <jk>true</jk>, then <js>"_class"</js> attributes will be added to beans if their type cannot be inferred through reflection.
- * This is used to recreate the correct objects during parsing if the object types cannot be inferred.
- * For example, when serializing a {@code Map<String,Object>} field, where the bean class cannot be determined from the value type.
- */
- public static final String SERIALIZER_addClassAttrs = "Serializer.addClassAttrs";
-
- /**
- * Quote character ({@link Character}, default=<js>'"'</js>.
- * <p>
- * This is the character used for quoting attributes and values.
- */
- public static final String SERIALIZER_quoteChar = "Serializer.quoteChar";
-
- /**
- * Boolean. Trim null bean property values from output.
- * <p>
- * If <jk>true</jk>, null bean values will not be serialized to the output.
- * <p>
- * Note that enabling this setting has the following effects on parsing:
- * <ul>
- * <li>Map entries with <jk>null</jk> values will be lost.
- * </ul>
- * <p>
- * Default is <jk>true</jk>.
- */
- public static final String SERIALIZER_trimNullProperties = "Serializer.trimNullProperties";
-
- /**
- * Boolean. Trim empty lists and arrays from output.
- * <p>
- * If <jk>true</jk>, empty list values will not be serialized to the output.
- * <p>
- * Note that enabling this setting has the following effects on parsing:
- * <ul>
- * <li>Map entries with empty list values will be lost.
- * <li>Bean properties with empty list values will not be set.
- * </ul>
- * <p>
- * Default is <jk>false</jk>.
- */
- public static final String SERIALIZER_trimEmptyLists = "Serializer.trimEmptyLists";
-
- /**
- * Boolean. Trim empty maps from output.
- * <p>
- * If <jk>true</jk>, empty map values will not be serialized to the output.
- * <p>
- * Note that enabling this setting has the following effects on parsing:
- * <ul>
- * <li>Bean properties with empty map values will not be set.
- * </ul>
- * <p>
- * Default is <jk>false</jk>.
- */
- public static final String SERIALIZER_trimEmptyMaps = "Serializer.trimEmptyMaps";
-
- /**
- * String. URI base for relative URIs.
- * <p>
- * Prepended to relative URIs during serialization (along with the {@link #SERIALIZER_absolutePathUriBase} if specified.
- * (i.e. URIs not containing a schema and not starting with <js>'/'</js>).
- * (e.g. <js>"foo/bar"</js>)
- * <p>
- * Default is <js>""</js>.
- *
- * <dl>
- * <dt>Examples:</dt>
- * <dd>
- * <table class='styled'>
- * <tr><th>SERIALIZER_relativeUriBase</th><th>URI</th><th>Serialized URI</th></tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>mywebapp</code></td>
- * <td><code>http://foo:9080/bar/baz/mywebapp</code></td>
- * </tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>/mywebapp</code></td>
- * <td><code>/mywebapp</code></td>
- * </tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>http://mywebapp</code></td>
- * <td><code>http://mywebapp</code></td>
- * </tr>
- * </table>
- * </dd>
- * </dl>
- */
- public static final String SERIALIZER_relativeUriBase = "Serializer.relativeUriBase";
-
- /**
- * Boolean. Sort arrays and collections alphabetically before serializing.
- * <p>
- * Note that this introduces a performance penalty.
- * <p>
- * Default is <jk>false</jk>.
- */
- public static final String SERIALIZER_sortCollections = "Serializer.sortCollections";
-
- /**
- * Boolean. Sort maps alphabetically before serializing.
- * <p>
- * Note that this introduces a performance penalty.
- * <p>
- * Default is <jk>false</jk>.
- */
- public static final String SERIALIZER_sortMaps = "Serializer.sortMaps";
-
- /**
- * String. URI base for relative URIs with absolute paths.
- * <p>
- * Prepended to relative absolute-path URIs during serialization.
- * (i.e. URIs starting with <js>'/'</js>).
- * (e.g. <js>"/foo/bar"</js>)
- * <p>
- * Default is <js>""</js>.
- *
- * <dl>
- * <dt>Examples:</dt>
- * <dd>
- * <table class='styled'>
- * <tr><th>SERIALIZER_absolutePathUriBase</th><th>URI</th><th>Serialized URI</th></tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>mywebapp</code></td>
- * <td><code>mywebapp</code></td>
- * </tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>/mywebapp</code></td>
- * <td><code>http://foo:9080/bar/baz/mywebapp</code></td>
- * </tr>
- * <tr>
- * <td><code>http://foo:9080/bar/baz</code></td>
- * <td><code>http://mywebapp</code></td>
- * <td><code>http://mywebapp</code></td>
- * </tr>
- * </table>
- * </dd>
- * </dl>
- */
- public static final String SERIALIZER_absolutePathUriBase = "Serializer.absolutePathUriBase";
-
- int maxDepth = 100, initialDepth = 0;
- boolean
- debug = false,
- detectRecursions = false,
- ignoreRecursions = false,
- useIndentation = false,
- addClassAttrs = false,
- trimNulls = true,
- trimEmptyLists = false,
- trimEmptyMaps = false,
- sortCollections = false,
- sortMaps = false;
- char quoteChar = '"';
- String relativeUriBase="", absolutePathUriBase="";
-
- /**
- * Sets the specified property value.
- * @param property The property name.
- * @param value The property value.
- * @return <jk>true</jk> if property name was valid and property was set.
- */
- public boolean setProperty(String property, Object value) {
- BeanContext bc = BeanContext.DEFAULT;
- if (property.equals(SERIALIZER_maxDepth))
- maxDepth = bc.convertToType(value, Integer.class);
- else if (property.equals(SERIALIZER_debug))
- debug = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_detectRecursions))
- detectRecursions = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_ignoreRecursions))
- ignoreRecursions = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_useIndentation))
- useIndentation = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_addClassAttrs))
- addClassAttrs = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_quoteChar))
- quoteChar = bc.convertToType(value, Character.class);
- else if (property.equals(SERIALIZER_trimNullProperties))
- trimNulls = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_trimEmptyLists))
- trimEmptyLists = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_trimEmptyMaps))
- trimEmptyMaps = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_relativeUriBase))
- relativeUriBase = value == null ? null : value.toString();
- else if (property.equals(SERIALIZER_absolutePathUriBase))
- absolutePathUriBase = value == null ? null : value.toString();
- else if (property.equals(SERIALIZER_sortCollections))
- sortCollections = bc.convertToType(value, Boolean.class);
- else if (property.equals(SERIALIZER_sortMaps))
- sortMaps = bc.convertToType(value, Boolean.class);
- else
- return false;
- return true;
- }
-
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* Cloneable */
- public SerializerProperties clone() {
- try {
- return (SerializerProperties)super.clone();
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e); // Won't happen.
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.class
deleted file mode 100755
index 0bd3142..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.java
deleted file mode 100755
index 7a91e6a..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/SerializerWriter.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.serializer;
-
-import java.io.*;
-import java.net.*;
-
-import com.ibm.juno.core.utils.*;
-
-/**
- * Simple wrapper around a standard {@link Writer} with additional methods.
- * <p>
- * Modeled after the Java ProcessBuilder class so that you can chain commands to reduce
- * the need for string concatenation for performance reasons.
- *
- * <h6 class='topic'>Example</h6>
- * <p class='bcode'>
- * writer.append(<js>"foo"</js>).nl().i(5).append(<js>"bar"</js>);
- * </p>
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public class SerializerWriter extends Writer {
-
- /** The underlying writer. */
- protected final Writer out;
-
- /** Use-indentation flag. */
- protected final boolean useIndentation;
-
- /** Use-whitespace flag. */
- protected final boolean useWhitespace;
-
- /** The quote character being used by this writer. */
- protected final char quoteChar;
-
- /** The base (e.g. <js>https://localhost:9443/contextPath"</js>) for relative URIs (e.g. <js>"my/path"</js>). */
- protected final String relativeUriBase;
-
- /** The base (e.g. <js>https://localhost:9443"</js>) for relative URIs with absolute paths (e.g. <js>"/contextPath/my/path"</js>). */
- protected final String absolutePathUriBase;
-
- /**
- * @param out The writer being wrapped.
- * @param useIndentation If <jk>true</jk>, calling {@link #cr(int)} will create an indentation.
- * @param useWhitespace If <jk>true</jk>, calling {@link #s()} will write a space character.
- * @param quoteChar The character to write when {@link #q()} is called.
- * @param relativeUriBase The base (e.g. <js>https://localhost:9443/contextPath"</js>) for relative URIs (e.g. <js>"my/path"</js>).
- * @param absolutePathUriBase The base (e.g. <js>https://localhost:9443"</js>) for relative URIs with absolute paths (e.g. <js>"/contextPath/my/path"</js>).
- */
- public SerializerWriter(Writer out, boolean useIndentation, boolean useWhitespace, char quoteChar, String relativeUriBase, String absolutePathUriBase) {
- this.out = out;
- this.useIndentation = useIndentation;
- this.useWhitespace = useWhitespace;
- this.quoteChar = quoteChar;
- this.relativeUriBase = relativeUriBase;
- this.absolutePathUriBase = absolutePathUriBase;
- }
-
- /**
- * Performs a carriage return.
- * <p>
- * Adds a newline and the specified number of tabs (if the {@code useIndentation} setting is enabled) to the output.
- *
- * @param depth The indentation.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter cr(int depth) throws IOException {
- if (useIndentation)
- return nl().i(depth);
- return this;
- }
-
- /**
- * Writes an indent (if the {@code useIndentation} setting is enabled), followed by text,
- * followed by a newline (if the {@code useIndentation} setting is enabled).
- *
- * @param indent The number of tabs to indent.
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object.
- */
- public SerializerWriter appendln(int indent, String text) throws IOException {
- return append(indent, true, text);
- }
-
- /**
- * Writes the specified text followed by a newline (if the {@code useIndentation} setting is enabled).
- *
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object.
- */
- public SerializerWriter appendln(String text) throws IOException {
- return append(0, true, text);
- }
-
- /**
- * Writes an indent (if the {@code useIndentation} setting is enabled), followed by text.
- *
- * @param indent The number of tabs to indent.
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object.
- */
- public SerializerWriter append(int indent, String text) throws IOException {
- return append(indent, false, text);
- }
-
- /**
- * Writes an indent (if the {@code useIndentation} setting is enabled), followed by text.
- *
- * @param indent The number of tabs to indent.
- * @param c The character to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object.
- */
- public SerializerWriter append(int indent, char c) throws IOException {
- return i(indent).append(c);
- }
-
- /**
- * Writes an indent (if the {@code useIndentation} setting is enabled), followed by text,
- * optionally followed by a newline (if the {@code useIndentation} setting is enabled).
- *
- * @param indent The number of tabs to indent.
- * @param newline If <jk>true</jk>, then a newline is written.
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- private SerializerWriter append(int indent, boolean newline, String text) throws IOException {
- i(indent);
- out.write(text);
- if (newline)
- nl();
- return this;
- }
-
- /**
- * Appends the specified object as a URI.
- * <p>
- * Object is converted to a <code>String</code> using <code>toString()</code>, so this will work on {@link URL} or {@link URI} objects,
- * or any other type that returns a URI via it's <code>toString()</code> method.
- * <p>
- * If the URI is relative (i.e. without a schema and not prepended with <js>'/'</js>) the URI
- * will be prepended with {@link #absolutePathUriBase} and {@link #relativeUriBase}.
- * <p>
- * If the URI is context-absolute (i.e. without a schema, but prepended with <js>'/'</js>)
- * the URI will be prepended with {@link #absolutePathUriBase}.
- *
- * @param uri The URI to serialize.
- * @return This object (for method chaining).
- * @throws IOException If a problem occurred trying to write to the writer.
- */
- public SerializerWriter appendUri(Object uri) throws IOException {
- String s = uri.toString();
- if (s.indexOf("://") == -1) {
- if (StringUtils.startsWith(s, '/')) {
- if (absolutePathUriBase != null)
- append(absolutePathUriBase);
- } else {
- if (relativeUriBase != null) {
- append(relativeUriBase);
- if (! relativeUriBase.equals("/"))
- append("/");
-
- }
- }
- }
- return append(s);
- }
-
- /**
- * Adds a whitespace character to the output if the {@code useWhitespace} setting is enabled.
- *
- * @return This object (for method chaining).
- * @throws IOException If a problem occurred trying to write to the writer.
- */
- public SerializerWriter s() throws IOException {
- if (useWhitespace)
- out.write(' ');
- return this;
- }
-
- /**
- * Adds the quote character specified by the {@code quoteChar} setting to the output.
- *
- * @return This object (for method chaining).
- * @throws IOException If a problem occurred trying to write to the writer.
- */
- public SerializerWriter q() throws IOException {
- out.write(quoteChar);
- return this;
- }
-
- /**
- * Writes an indent to the writer if the {@code useIndentation} setting is enabled.
- *
- * @param indent The number of tabs to indent.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter i(int indent) throws IOException {
- if (useIndentation)
- for (int i = 0; i < indent; i++)
- out.write('\t');
- return this;
- }
-
- /**
- * Writes a newline to the writer if the {@code useIndentation} setting is enabled.
- *
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter nl() throws IOException {
- if (useIndentation)
- out.write('\n');
- return this;
- }
-
- /**
- * Writes the specified text to the writer.
- *
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter append(Object text) throws IOException {
- out.append(text == null ? null : text.toString());
- return this;
- }
-
- /**
- * Writes the specified text to the writer.
- *
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter append(String text) throws IOException {
- if (text != null)
- out.append(text);
- return this;
- }
-
- /**
- * Writes the specified text to the writer if b is true.
- *
- * @param b Boolean flag.
- * @param text The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter appendIf(boolean b, String text) throws IOException {
- if (b)
- out.write(text);
- return this;
- }
-
- /**
- * Writes the specified text to the writer if b is true.
- *
- * @param b Boolean flag.
- * @param c The text to write.
- * @throws IOException If a problem occurred trying to write to the writer.
- * @return This object (for method chaining).
- */
- public SerializerWriter appendIf(boolean b, char c) throws IOException {
- if (b)
- out.write(c);
- return this;
- }
-
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* Writer */
- public SerializerWriter append(char c) throws IOException {
- out.write(c);
- return this;
- }
-
- @Override /* Writer */
- public void write(char[] cbuf, int off, int len) throws IOException {
- out.write(cbuf, off, len);
- }
-
- @Override /* Writer */
- public void flush() throws IOException {
- out.flush();
- }
-
- @Override /* Writer */
- public void close() throws IOException {
- out.close();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.class
deleted file mode 100755
index a6fcb1d..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.java
deleted file mode 100755
index ae9a506..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/StringObject.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.serializer;
-
-import java.io.*;
-
-import com.ibm.juno.core.*;
-
-/**
- * A serializer/object pair used for delayed object serialization.
- * <p>
- * Useful in certain conditions such as logging when you don't want to needlessly serialize objects.
- * <p>
- * Instances of this method are created by the {@link WriterSerializer#toStringObject(Object)} method.
- *
- * <h6 class='topic'>Example</h6>
- * <p class='bcode'>
- * <jc>// The POJO will not be serialized unless DEBUG is enabled.</jc>
- * logger.log(<jsf>DEBUG</jsf>, <js>"Object contents are: {0}"</js>, JsonSerializer.<jsf>DEFAULT</jsf>.toObjectString(myPojo));
- * </p>
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public class StringObject implements CharSequence, Writable {
-
- private final WriterSerializer s;
- private final Object o;
- private String results;
-
- /**
- * Constructor.
- * @param s The serializer to use to serialize the object.
- * @param o The object to be serialized.
- */
- public StringObject(WriterSerializer s, Object o) {
- this.s = s;
- this.o = o;
- }
-
- @Override /* Object */
- public String toString() {
- if (results == null)
- results = s.toString(o);
- return results;
- }
-
- @Override /* CharSequence */
- public int length() {
- return toString().length();
- }
-
- @Override /* CharSequence */
- public char charAt(int index) {
- return toString().charAt(index);
- }
-
- @Override /* CharSequence */
- public CharSequence subSequence(int start, int end) {
- return toString().subSequence(start, end);
- }
-
- @Override /* Writable */
- public void writeTo(Writer w) throws IOException {
- try {
- s.serialize(o, w);
- } catch (SerializeException e) {
- throw new IOException(e);
- }
- }
-
- @Override /* Writable */
- public String getMediaType() {
- return s.getMediaTypes()[0];
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.class
deleted file mode 100755
index a1b81b4..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.java
deleted file mode 100755
index 6309176..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/WriterSerializer.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.serializer;
-
-import java.io.*;
-import java.lang.reflect.*;
-
-import com.ibm.juno.core.*;
-import com.ibm.juno.core.annotation.*;
-
-/**
- * Subclass of {@link Serializer} for character-based serializers.
- *
- *
- * <h6 class='topic'>Description</h6>
- * <p>
- * This class is typically the parent class of all character-based serializers.
- * It has 2 abstract methods to implement...
- * <ul>
- * <li>{@link #createContext(ObjectMap, Method)}
- * <li>{@link #doSerialize(Object, Writer, SerializerContext)}
- * </ul>
- *
- *
- * <h6 class='topic'>@Produces annotation</h6>
- * <p>
- * The media types that this serializer can produce is specified through the {@link Produces @Produces} annotation.
- * <p>
- * However, the media types can also be specified programmatically by overriding the {@link #getMediaTypes()}
- * and {@link #getResponseContentType()} methods.
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public abstract class WriterSerializer extends Serializer<Writer> {
-
- @Override /* Serializer */
- public boolean isWriterSerializer() {
- return true;
- }
-
- //--------------------------------------------------------------------------------
- // Abstract methods
- //--------------------------------------------------------------------------------
-
- @Override /* Serializer */
- protected abstract void doSerialize(Object o, Writer out, SerializerContext ctx) throws IOException, SerializeException;
-
-
- //--------------------------------------------------------------------------------
- // Other methods
- //--------------------------------------------------------------------------------
-
- /**
- * Internal test method.
- *
- * @param o The object to serialize.
- * @param ctx The serialize context.
- * This object is automatically closed after serialization.
- * @return The output serialized to a string.
- * @throws SerializeException If a problem occurred trying to convert the output.
- */
- public final String serialize(Object o, SerializerContext ctx) throws SerializeException {
- try {
- StringWriter w = new StringWriter();
- serialize(o, w, ctx);
- return w.toString();
- } catch (IOException e) { // Shouldn't happen.
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Convenience method for serializing an object to a String.
- *
- * @param o The object to serialize.
- * @return The output serialized to a string.
- * @throws SerializeException If a problem occurred trying to convert the output.
- */
- public final String serialize(Object o) throws SerializeException {
- try {
- StringWriter w = new StringWriter();
- serialize(o, w, createContext());
- return w.toString();
- } catch (IOException e) {
- throw new RuntimeException(e); // Shouldn't happen.
- }
- }
-
- /**
- * Identical to {@link #serialize(Object)} except throws a {@link RuntimeException}
- * instead of a {@link SerializeException}.
- * This is typically good enough for debugging purposes.
- *
- * @param o The object to serialize.
- * @return The serialized object.
- */
- public final String toString(Object o) {
- try {
- StringWriter w = new StringWriter();
- serialize(o, w, createContext());
- return w.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Wraps the specified object inside a {@link StringObject}.
- *
- * @param o The object to wrap.
- * @return The wrapped object.
- */
- public final StringObject toStringObject(Object o) {
- return new StringObject(this, o);
- }
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* CoreApi */
- public WriterSerializer addNotBeanClasses(Class<?>...classes) throws LockedException {
- super.addNotBeanClasses(classes);
- return this;
- }
-
- @Override /* CoreApi */
- public WriterSerializer addFilters(Class<?>...classes) throws LockedException {
- super.addFilters(classes);
- return this;
- }
-
- @Override /* CoreApi */
- public <T> WriterSerializer addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException {
- super.addImplClass(interfaceClass, implClass);
- return this;
- }
-
- @Override /* CoreApi */
- public WriterSerializer setClassLoader(ClassLoader classLoader) throws LockedException {
- super.setClassLoader(classLoader);
- return this;
- }
-
- @Override /* Lockable */
- public WriterSerializer lock() {
- super.lock();
- return this;
- }
-
- @Override /* CoreApi */
- public WriterSerializer clone() throws CloneNotSupportedException {
- WriterSerializer c = (WriterSerializer)super.clone();
- return c;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/package.html
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/package.html b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/package.html
deleted file mode 100755
index 4fe443f..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/serializer/package.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE HTML>
-<!--
- Licensed Materials - Property of IBM
- (c) Copyright IBM Corporation 2014. All Rights Reserved.
-
- Note to U.S. Government Users Restricted Rights:
- Use, duplication or disclosure restricted by GSA ADP Schedule
- Contract with IBM Corp.
- -->
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <style type="text/css">
- /* For viewing in Page Designer */
- @IMPORT url("../../../../../../javadoc.css");
-
- /* For viewing in REST interface */
- @IMPORT url("../htdocs/javadoc.css");
- body {
- margin: 20px;
- }
- </style>
- <script>
- /* Replace all @code and @link tags. */
- window.onload = function() {
- document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
- document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>');
- }
- </script>
-</head>
-<body>
-<p>Serializer API</p>
-
-<script>
- function toggle(x) {
- var div = x.nextSibling;
- while (div != null && div.nodeType != 1)
- div = div.nextSibling;
- if (div != null) {
- var d = div.style.display;
- if (d == 'block' || d == '') {
- div.style.display = 'none';
- x.className += " closed";
- } else {
- div.style.display = 'block';
- x.className = x.className.replace(/(?:^|\s)closed(?!\S)/g , '' );
- }
- }
- }
-</script>
-
-<a id='TOC'></a><h5 class='toc'>Table of Contents</h5>
-<ol class='toc'>
- <li><p><a class='doclink' href='#Serializer'>Serializer API</a></p>
- <ol>
- <li><p><a class='doclink' href='#SerializerGroup'>The SerializerGroup class</a></p>
- </ol>
- <li><p><a class='doclink' href='#DefiningSerializer'>Defining a new Serializer</a></p>
-</ol>
-
-<!-- ======================================================================================================== -->
-<a id="Serializer"></a>
-<h2 class='topic' onclick='toggle(this)'>1 - Serializer API</h2>
-<div class='topic'>
- <p>
- The serialization API is designed to be easily extensible by developers.<br>
- If you are writing your own serializer, you will typically subclass directly from either {@link com.ibm.juno.core.serializer.WriterSerializer}
- or {@link com.ibm.juno.core.serializer.OutputStreamSerializer}.<br>
- </p>
-
- <!-- ======================================================================================================== -->
- <a id="SerializerGroup"></a>
- <h3 class='topic' onclick='toggle(this)'>1.1 - The SerializerGroup class</h3>
- <div class='topic'>
- <p>
- The {@link com.ibm.juno.core.serializer.SerializerGroup} class represents a group of serializers registered with the media types they handle.
- </p>
-
- <h6 class='topic'>Features</h6>
- <p>
- The <code>SerializerGroup</code> class provides the following features:
- <ul>
- <li>Finds serializers based on HTTP <code>Accept</code> header values.
- <li>Sets common properties on all serializers in a single method call.
- <li>Locks all serializers in a single method call.
- <li>Clones existing groups and all serializers within the group in a single method call.
- </ul>
-
- <p>
- Refer to {@link com.ibm.juno.core.serializer.SerializerGroup} for additional information.
- </p>
- </div>
-</div>
-
-
-<!-- ======================================================================================================== -->
-<a id="DefiningSerializer"></a>
-<h2 class='topic' onclick='toggle(this)'>2 - Defining a new Serializer</h2>
-<div class='topic'>
- <p>
- Defining a new serializer is quite simple if you subclass directly from {@link com.ibm.juno.core.serializer.WriterSerializer}
- or {@link com.ibm.juno.core.serializer.OutputStreamSerializer}.<br>
- In each case, you simply need to implement a single
- method and specify a {@link com.ibm.juno.core.annotation.Produces} annotation.
- </p>
- <p>
- The following example shows a simple serializer that converts images to output streams using standard JRE classes.
- </p>
- <p class='bcode'>
- <ja>@Produces</ja>({<js>"image/png"</js>,<js>"image/jpeg"</js>})
- <jk>public static class</jk> ImageSerializer <jk>extends</jk> OutputStreamSerializer {
- <ja>@Override</ja>
- <jk>public void</jk> serialize(Object o, OutputStream out, SerializerContext ctx) <jk>throws</jk> IOException, SerializeException {
- RenderedImage image = (RenderedImage)o;
- String mediaType = ctx.getMediaType();
- ImageIO.<jsm>write</jsm>(image, mediaType.substring(mediaType.indexOf(<js>'/'</js>)+1), out);
- }
- }
- </p>
- <p>
- Serializer that take advantage of the entire {@link com.ibm.juno.core.CoreApi} 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 com.ibm.juno.core.json.JsonSerializer} class.
- </p>
-</div>
-
-</body>
-</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.class
deleted file mode 100755
index 1d9487b..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.java
deleted file mode 100755
index df249f2..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2011, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.soap;
-
-import static com.ibm.juno.core.soap.SoapXmlSerializerProperties.*;
-
-import java.io.*;
-
-import com.ibm.juno.core.*;
-import com.ibm.juno.core.annotation.*;
-import com.ibm.juno.core.serializer.*;
-import com.ibm.juno.core.xml.*;
-
-/**
- * Serializes POJOs to HTTP responses as XML+SOAP.
- *
- *
- * <h6 class='topic'>Media types</h6>
- * <p>
- * Handles <code>Accept</code> types: <code>text/xml+soap</code>
- * <p>
- * Produces <code>Content-Type</code> types: <code>text/xml+soap</code>
- *
- *
- * <h6 class='topic'>Description</h6>
- * <p>
- * Essentially the same output as {@link XmlDocSerializer}, except wrapped in a standard SOAP envelope.
- *
- *
- * <h6 class='topic'>Configurable properties</h6>
- * <p>
- * This class has the following properties associated with it:
- * <ul>
- * <li>{@link SoapXmlSerializerProperties}
- * <li>{@link XmlSerializerProperties}
- * <li>{@link SerializerProperties}
- * <li>{@link BeanContextProperties}
- * </ul>
- *
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-@Produces(value="text/xml+soap",contentType="text/xml")
-public final class SoapXmlSerializer extends XmlSerializer {
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* Serializer */
- protected void doSerialize(Object o, Writer out, SerializerContext ctx) throws IOException, SerializeException {
- XmlSerializerContext xctx = (XmlSerializerContext)ctx;
- XmlSerializerWriter w = xctx.getWriter(out);
- w.append("<?xml")
- .attr("version", "1.0")
- .attr("encoding", "UTF-8")
- .appendln("?>");
- w.oTag("soap", "Envelope")
- .attr("xmlns", "soap", xctx.getProperties().getString(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope"))
- .appendln(">");
- w.sTag(1, "soap", "Body").nl();
- super.serialize(o, w, ctx);
- w.eTag(1, "soap", "Body").nl();
- w.eTag("soap", "Envelope").nl();
- }
-
- @Override /* Serializer */
- public ObjectMap getResponseHeaders(ObjectMap properties) {
- return super.getResponseHeaders(properties)
- .append("SOAPAction", properties.getString(SOAPXML_SOAPAction, "http://www.w3.org/2003/05/soap-envelope"));
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.class
deleted file mode 100755
index 9aac21c..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.java
deleted file mode 100755
index f66a7f2..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/SoapXmlSerializerProperties.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.soap;
-
-/**
- * Properties associated with the {@link SoapXmlSerializer} class.
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public final class SoapXmlSerializerProperties {
-
- /**
- * The <code>SOAPAction</code> HTTP header value to set on responses.
- * <p>
- * Default is <js>"http://www.w3.org/2003/05/soap-envelope"</js>.
- */
- public static final String SOAPXML_SOAPAction = "SoapXmlSerializer.SOAPAction";
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/package.html
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/package.html b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/package.html
deleted file mode 100755
index 3b4f818..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/soap/package.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML>
-<!--
- Licensed Materials - Property of IBM
- (c) Copyright IBM Corporation 2014. All Rights Reserved.
-
- Note to U.S. Government Users Restricted Rights:
- Use, duplication or disclosure restricted by GSA ADP Schedule
- Contract with IBM Corp.
- -->
-<html>
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <style type="text/css">
- /* For viewing in Page Designer */
- @IMPORT url("../../../../../../javadoc.css");
-
- /* For viewing in REST interface */
- @IMPORT url("../htdocs/javadoc.css");
- body {
- margin: 20px;
- }
- </style>
- <script>
- /* Replace all @code and @link tags. */
- window.onload = function() {
- document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
- document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>');
- }
- </script>
-</head>
-<body>
-<p>SOAP/XML serialization and parsing support</p>
-</body>
-</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser$Decoding.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser$Decoding.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser$Decoding.class
deleted file mode 100755
index c4824b2..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser$Decoding.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.class
deleted file mode 100755
index 1a58860..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.java
deleted file mode 100755
index 6638562..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParser.java
+++ /dev/null
@@ -1,861 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2013, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.urlencoding;
-
-import static com.ibm.juno.core.urlencoding.UonParserProperties.*;
-
-import java.io.*;
-import java.lang.reflect.*;
-import java.util.*;
-
-import com.ibm.juno.core.*;
-import com.ibm.juno.core.annotation.*;
-import com.ibm.juno.core.filter.*;
-import com.ibm.juno.core.parser.*;
-import com.ibm.juno.core.utils.*;
-
-/**
- * Parses UON (a notation for URL-encoded query parameter values) text into POJO models.
- *
- *
- * <h6 class='topic'>Media types</h6>
- * <p>
- * Handles <code>Content-Type</code> types: <code>text/uon</code>
- *
- *
- * <h6 class='topic'>Description</h6>
- * <p>
- * This parser uses a state machine, which makes it very fast and efficient.
- *
- *
- * <h6 class='topic'>Configurable properties</h6>
- * <p>
- * This class has the following properties associated with it:
- * <ul>
- * <li>{@link UonParserProperties}
- * <li>{@link ParserProperties}
- * <li>{@link BeanContextProperties}
- * </ul>
- *
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-@SuppressWarnings({ "rawtypes", "unchecked" })
-@Consumes("text/uon")
-public class UonParser extends ReaderParser {
-
- /** Reusable instance of {@link UonParser}, all default settings. */
- public static final UonParser DEFAULT = new UonParser().lock();
-
- /** Reusable instance of {@link UonParser.Decoding}. */
- public static final UonParser DEFAULT_DECODING = new Decoding().lock();
-
- /** Reusable instance of {@link UonParser}, all default settings, whitespace-aware. */
- public static final UonParser DEFAULT_WS_AWARE = new UonParser().setProperty(UON_whitespaceAware, true).lock();
-
- // Characters that need to be preceeded with an escape character.
- private static final AsciiSet escapedChars = new AsciiSet(",()~=$\u0001\u0002");
-
- private static final char NUL='\u0000', AMP='\u0001', EQ='\u0002'; // Flags set in reader to denote & and = characters.
-
- /**
- * Equivalent to <code><jk>new</jk> UrlEncodingParser().setProperty(UonParserProperties.<jsf>UON_decodeChars</jsf>,<jk>true</jk>);</code>.
- */
- public static class Decoding extends UonParser {
- /** Constructor */
- public Decoding() {
- setProperty(UON_decodeChars, true);
- }
- }
-
- /** UON parser properties currently set on this serializer. */
- protected transient UonParserProperties upp = new UonParserProperties();
-
- /** URL-Encoding properties currently set on this serializer. */
- protected transient UrlEncodingProperties uep = new UrlEncodingProperties();
-
- /**
- * Workhorse method.
- *
- * @param nt The class type being parsed, or <jk>null</jk> if unknown.
- * @param ctx The parser context for this parse.
- * @param r The reader being parsed.
- * @param p If this is a bean property value, the bean property meta, or null if this is not a bean property value being parsed.
- * @param outer The outer object (for constructing nested inner classes).
- * @param isUrlParamValue If <jk>true</jk>, then we're parsing a top-level URL-encoded value which is treated a bit different than the default case.
- * @param name The parent field or map key name.
- * @return The parsed object.
- * @throws ParseException
- */
- protected <T> T parseAnything(ClassMeta<T> nt, UonParserContext ctx, ParserReader r, BeanPropertyMeta p, Object outer, boolean isUrlParamValue, Object name) throws ParseException {
-
- BeanContext bc = ctx.getBeanContext();
- if (nt == null)
- nt = (ClassMeta<T>)object();
- PojoFilter<T,Object> filter = (PojoFilter<T,Object>)nt.getPojoFilter();
- ClassMeta<?> ft = nt.getFilteredClassMeta();
-
- int line = r.getLine();
- int column = r.getColumn();
- Object o = null;
- try {
- // Parse type flag '$x'
- char flag = readFlag(r, (char)0);
-
- int c = r.peek();
-
- if (c == -1 || c == AMP) {
- // If parameter is blank and it's an array or collection, return an empty list.
- if (ft.isArray() || ft.isCollection())
- o = ft.newInstance();
- else if (ft.isString() || ft.isObject())
- o = "";
- else if (ft.isPrimitive())
- o = ft.getPrimitiveDefault();
- // Otherwise, leave null.
- } else if (ft.isObject()) {
- if (flag == 0 || flag == 's') {
- o = parseString(r, isUrlParamValue, ctx);
- } else if (flag == 'b') {
- o = parseBoolean(r, ctx);
- } else if (flag == 'n') {
- o = parseNumber(r, null, ctx);
- } else if (flag == 'o') {
- ObjectMap m = new ObjectMap(bc);
- parseIntoMap(ctx, r, m, string(), object());
- o = m.cast();
- } else if (flag == 'a') {
- Collection l = new ObjectList(bc);
- o = parseIntoCollection(ctx, r, l, ft.getElementType(), isUrlParamValue);
- } else {
- throw new ParseException(line, column, "Unexpected flag character ''{0}''.", flag);
- }
- } else if (ft.isBoolean()) {
- o = parseBoolean(r, ctx);
- } else if (ft.isCharSequence()) {
- o = parseString(r, isUrlParamValue, ctx);
- } else if (ft.isChar()) {
- String s = parseString(r, isUrlParamValue, ctx);
- o = s == null ? null : s.charAt(0);
- } else if (ft.isNumber()) {
- o = parseNumber(r, (Class<? extends Number>)ft.getInnerClass(), ctx);
- } else if (ft.isMap()) {
- Map m = (ft.canCreateNewInstance(outer) ? (Map)ft.newInstance(outer) : new ObjectMap(bc));
- o = parseIntoMap(ctx, r, m, ft.getKeyType(), ft.getValueType());
- } else if (ft.isCollection()) {
- if (flag == 'o') {
- ObjectMap m = new ObjectMap(bc);
- parseIntoMap(ctx, r, m, string(), object());
- // Handle case where it's a collection, but serialized as a map with a _class or _value key.
- if (m.containsKey("_class") || m.containsKey("_value"))
- o = m.cast();
- // Handle case where it's a collection, but only a single value was specified.
- else {
- Collection l = (ft.canCreateNewInstance(outer) ? (Collection)ft.newInstance(outer) : new ObjectList(bc));
- l.add(m.cast(ft.getElementType()));
- o = l;
- }
- } else {
- Collection l = (ft.canCreateNewInstance(outer) ? (Collection)ft.newInstance(outer) : new ObjectList(bc));
- o = parseIntoCollection(ctx, r, l, ft.getElementType(), isUrlParamValue);
- }
- } else if (ft.canCreateNewInstanceFromObjectMap(outer)) {
- ObjectMap m = new ObjectMap(bc);
- parseIntoMap(ctx, r, m, string(), object());
- o = ft.newInstanceFromObjectMap(outer, m);
- } else if (ft.canCreateNewBean(outer)) {
- BeanMap m = bc.newBeanMap(outer, ft.getInnerClass());
- m = parseIntoBeanMap(ctx, r, m);
- o = m == null ? null : m.getBean();
- } else if (ft.canCreateNewInstanceFromString(outer)) {
- String s = parseString(r, isUrlParamValue, ctx);
- if (s != null)
- o = ft.newInstanceFromString(outer, s);
- } else if (ft.isArray()) {
- if (flag == 'o') {
- ObjectMap m = new ObjectMap(bc);
- parseIntoMap(ctx, r, m, string(), object());
- // Handle case where it's an array, but serialized as a map with a _class or _value key.
- if (m.containsKey("_class") || m.containsKey("_value"))
- o = m.cast();
- // Handle case where it's an array, but only a single value was specified.
- else {
- ArrayList l = new ArrayList(1);
- l.add(m.cast(ft.getElementType()));
- o = bc.toArray(ft, l);
- }
- } else {
- ArrayList l = (ArrayList)parseIntoCollection(ctx, r, new ArrayList(), ft.getElementType(), isUrlParamValue);
- o = bc.toArray(ft, l);
- }
- } else if (flag == 'o') {
- // It could be a non-bean with _class attribute.
- ObjectMap m = new ObjectMap(bc);
- parseIntoMap(ctx, r, m, string(), object());
- if (m.containsKey("_class"))
- o = m.cast();
- else
- throw new ParseException(line, column, "Class ''{0}'' could not be instantiated. Reason: ''{1}''", ft.getInnerClass().getName(), ft.getNotABeanReason());
- } else {
- throw new ParseException(line, column, "Class ''{0}'' could not be instantiated. Reason: ''{1}''", ft.getInnerClass().getName(), ft.getNotABeanReason());
- }
-
- if (filter != null && o != null)
- o = filter.unfilter(o, nt);
-
- if (outer != null)
- setParent(nt, o, outer);
-
- if (name != null)
- setName(nt, o, name);
-
- return (T)o;
-
- } catch (RuntimeException e) {
- throw e;
- } catch (Exception e) {
- if (p == null)
- throw new ParseException("Error occurred trying to parse into class ''{0}''", ft).initCause(e);
- throw new ParseException("Error occurred trying to parse value for bean property ''{0}'' on class ''{1}''",
- p.getName(), p.getBeanMeta().getClassMeta()
- ).initCause(e);
- }
- }
-
- private <K,V> Map<K,V> parseIntoMap(UonParserContext ctx, ParserReader r, Map<K,V> m, ClassMeta<K> keyType, ClassMeta<V> valueType) throws ParseException, IOException {
- int line = r.getLine();
- int column = r.getColumn();
-
- if (keyType == null)
- keyType = (ClassMeta<K>)string();
-
- int c = r.read();
- if (c == -1 || c == NUL || c == AMP)
- return null;
- if (c != '(')
- throw new ParseException(line, column, "Expected '(' at beginning of object.");
-
- final int S1=1; // Looking for attrName start.
- final int S2=2; // Found attrName end, looking for =.
- final int S3=3; // Found =, looking for valStart.
- final int S4=4; // Looking for , or )
- boolean isInEscape = false;
-
- int state = S1;
- K currAttr = null;
- while (c != -1 && c != AMP) {
- c = r.read();
- if (! isInEscape) {
- if (state == S1) {
- if (c == ')')
- return m;
- if ((c == '\n' || c == '\r') && ctx.whitespaceAware)
- skipSpace(r);
- else {
- r.unread();
- Object attr = parseAttr(r, ctx.decodeChars, ctx);
- currAttr = (attr == null ? null : ctx.getBeanContext().convertToType(attr, keyType));
- state = S2;
- c = 0; // Avoid isInEscape if c was '\'
- }
- } else if (state == S2) {
- if (c == EQ || c == '=')
- state = S3;
- else if (c == -1 || c == ',' || c == ')' || c == AMP) {
- if (currAttr == null) {
- // Value was '%00'
- r.unread();
- return null;
- }
- m.put(currAttr, null);
- if (c == ')' || c == -1 || c == AMP)
- return m;
- state = S1;
- }
- } else if (state == S3) {
- if (c == -1 || c == ',' || c == ')' || c == AMP) {
- V value = convertAttrToType(m, "", valueType);
- m.put(currAttr, value);
- if (c == -1 || c == ')' || c == AMP)
- return m;
- state = S1;
- } else {
- V value = parseAnything(valueType, ctx, r.unread(), null, m, false, currAttr);
- m.put(currAttr, value);
- state = S4;
- c = 0; // Avoid isInEscape if c was '\'
- }
- } else if (state == S4) {
- if (c == ',')
- state = S1;
- else if (c == ')' || c == -1 || c == AMP) {
- return m;
- }
- }
- }
- isInEscape = isInEscape(c, r, isInEscape);
- }
- if (state == S1)
- throw new ParseException(line, column, "Could not find attribute name on object.");
- if (state == S2)
- throw new ParseException(line, column, "Could not find '=' following attribute name on object.");
- if (state == S3)
- throw new ParseException(line, column, "Dangling '=' found in object entry");
- if (state == S4)
- throw new ParseException(line, column, "Could not find ')' marking end of object.");
-
- return null; // Unreachable.
- }
-
- private <E> Collection<E> parseIntoCollection(UonParserContext ctx, ParserReader r, Collection<E> l, ClassMeta<E> elementType, boolean isUrlParamValue) throws ParseException, IOException {
- int line = r.getLine();
- int column = r.getColumn();
-
- int c = r.read();
- if (c == -1 || c == NUL || c == AMP)
- return null;
-
- // If we're parsing a top-level parameter, we're allowed to have comma-delimited lists outside parenthesis (e.g. "&foo=1,2,3&bar=a,b,c")
- // This is not allowed at lower levels since we use comma's as end delimiters.
- boolean isInParens = (c == '(');
- if (! isInParens)
- if (isUrlParamValue)
- r.unread();
- else
- throw new ParseException(line, column, "Could not find '(' marking beginning of collection.");
-
- if (isInParens) {
- final int S1=1; // Looking for starting of first entry.
- final int S2=2; // Looking for starting of subsequent entries.
- final int S3=3; // Looking for , or ) after first entry.
-
- int state = S1;
- while (c != -1 && c != AMP) {
- c = r.read();
- if (state == S1 || state == S2) {
- if (c == ')') {
- if (state == S2) {
- l.add(parseAnything(elementType, ctx, r.unread(), null, l, false, null));
- r.read();
- }
- return l;
- } else if ((c == '\n' || c == '\r') && ctx.whitespaceAware) {
- skipSpace(r);
- } else {
- l.add(parseAnything(elementType, ctx, r.unread(), null, l, false, null));
- state = S3;
- }
- } else if (state == S3) {
- if (c == ',') {
- state = S2;
- } else if (c == ')') {
- return l;
- }
- }
- }
- if (state == S1 || state == S2)
- throw new ParseException(line, column, "Could not find start of entry in array.");
- if (state == S3)
- throw new ParseException(line, column, "Could not find end of entry in array.");
-
- } else {
- final int S1=1; // Looking for starting of entry.
- final int S2=2; // Looking for , or & or END after first entry.
-
- int state = S1;
- while (c != -1 && c != AMP) {
- c = r.read();
- if (state == S1) {
- if ((c == '\n' || c == '\r') && ctx.whitespaceAware) {
- skipSpace(r);
- } else {
- l.add(parseAnything(elementType, ctx, r.unread(), null, l, false, null));
- state = S2;
- }
- } else if (state == S2) {
- if (c == ',') {
- state = S1;
- } else if ((c == '\n' || c == '\r') && ctx.whitespaceAware) {
- skipSpace(r);
- } else if (c == AMP || c == -1) {
- r.unread();
- return l;
- }
- }
- }
- }
-
- return null; // Unreachable.
- }
-
- private <T> BeanMap<T> parseIntoBeanMap(UonParserContext ctx, ParserReader r, BeanMap<T> m) throws ParseException, IOException {
- int line = r.getLine();
- int column = r.getColumn();
-
- int c = r.read();
- if (c == -1 || c == NUL || c == AMP)
- return null;
- if (c != '(')
- throw new ParseException(line, column, "Expected '(' at beginning of object.");
-
- final int S1=1; // Looking for attrName start.
- final int S2=2; // Found attrName end, looking for =.
- final int S3=3; // Found =, looking for valStart.
- final int S4=4; // Looking for , or }
- boolean isInEscape = false;
-
- int state = S1;
- String currAttr = "";
- int currAttrLine = -1, currAttrCol = -1;
- while (c != -1 && c != AMP) {
- c = r.read();
- if (! isInEscape) {
- if (state == S1) {
- if (c == ')' || c == -1 || c == AMP) {
- return m;
- }
- if ((c == '\n' || c == '\r') && ctx.whitespaceAware)
- skipSpace(r);
- else {
- r.unread();
- currAttrLine= r.getLine();
- currAttrCol = r.getColumn();
- currAttr = parseAttrName(r, ctx.decodeChars);
- if (currAttr == null) // Value was '%00'
- return null;
- state = S2;
- }
- } else if (state == S2) {
- if (c == EQ || c == '=')
- state = S3;
- else if (c == -1 || c == ',' || c == ')' || c == AMP) {
- m.put(currAttr, null);
- if (c == ')' || c == -1 || c == AMP)
- return m;
- state = S1;
- }
- } else if (state == S3) {
- if (c == -1 || c == ',' || c == ')' || c == AMP) {
- if (! currAttr.equals("_class")) {
- BeanPropertyMeta pMeta = m.getPropertyMeta(currAttr);
- if (pMeta == null) {
- if (m.getMeta().isSubTyped()) {
- m.put(currAttr, "");
- } else {
- onUnknownProperty(ctx, currAttr, m, currAttrLine, currAttrCol);
- }
- } else {
- Object value = ctx.getBeanContext().convertToType("", pMeta.getClassMeta());
- pMeta.set(m, value);
- }
- }
- if (c == -1 || c == ')' || c == AMP)
- return m;
- state = S1;
- } else {
- if (! currAttr.equals("_class")) {
- BeanPropertyMeta pMeta = m.getPropertyMeta(currAttr);
- if (pMeta == null) {
- if (m.getMeta().isSubTyped()) {
- m.put(currAttr, parseAnything(object(), ctx, r.unread(), null, m.getBean(false), false, currAttr));
- } else {
- onUnknownProperty(ctx, currAttr, m, currAttrLine, currAttrCol);
- parseAnything(object(), ctx, r.unread(), null, m.getBean(false), false, null); // Read content anyway to ignore it
- }
- } else {
- Object value = parseAnything(pMeta.getClassMeta(), ctx, r.unread(), pMeta, m.getBean(false), false, currAttr);
- pMeta.set(m, value);
- }
- }
- state = S4;
- }
- } else if (state == S4) {
- if (c == ',')
- state = S1;
- else if (c == ')' || c == -1 || c == AMP) {
- return m;
- }
- }
- }
- isInEscape = isInEscape(c, r, isInEscape);
- }
- if (state == S1)
- throw new ParseException(line, column, "Could not find attribute name on object.");
- if (state == S2)
- throw new ParseException(line, column, "Could not find '=' following attribute name on object.");
- if (state == S3)
- throw new ParseException(line, column, "Could not find value following '=' on object.");
- if (state == S4)
- throw new ParseException(line, column, "Could not find ')' marking end of object.");
-
- return null; // Unreachable.
- }
-
- Object parseAttr(ParserReader r, boolean encoded, UonParserContext ctx) throws IOException, ParseException {
- Object attr;
- int c = r.peek();
- if (c == '$') {
- char f = readFlag(r, (char)0);
- if (f == 'b')
- attr = parseBoolean(r, ctx);
- else if (f == 'n')
- attr = parseNumber(r, null, ctx);
- else
- attr = parseAttrName(r, encoded);
- } else {
- attr = parseAttrName(r, encoded);
- }
- return attr;
- }
-
- String parseAttrName(ParserReader r, boolean encoded) throws IOException, ParseException {
-
- // If string is of form '(xxx)', we're looking for ')' at the end.
- // Otherwise, we're looking for '&' or '=' or -1 denoting the end of this string.
-
- int line = r.getLine();
- int column = r.getColumn();
- int c = r.peek();
- if (c == '$')
- readFlag(r, 's');
- if (c == '(')
- return parsePString(r);
-
- r.mark();
- boolean isInEscape = false;
- if (encoded) {
- while (c != -1) {
- c = r.read();
- if (! isInEscape) {
- if (c == AMP || c == EQ || c == -1) {
- if (c != -1)
- r.unread();
- String s = r.getMarked();
- return (s.equals("\u0000") ? null : s);
- }
- }
- else if (c == AMP)
- r.replace('&');
- else if (c == EQ)
- r.replace('=');
- isInEscape = isInEscape(c, r, isInEscape);
- }
- } else {
- while (c != -1) {
- c = r.read();
- if (! isInEscape) {
- if (c == '=' || c == -1) {
- if (c != -1)
- r.unread();
- String s = r.getMarked();
- return (s.equals("\u0000") ? null : s);
- }
- }
- isInEscape = isInEscape(c, r, isInEscape);
- }
- }
-
- // We should never get here.
- throw new ParseException(line, column, "Unexpected condition.");
- }
-
-
- /**
- * Returns true if the next character in the stream is preceeded by an escape '~' character.
- * @param c The current character.
- * @param r The reader.
- * @param prevIsInEscape What the flag was last time.
- */
- private static final boolean isInEscape(int c, ParserReader r, boolean prevIsInEscape) throws IOException {
- if (c == '~' && ! prevIsInEscape) {
- c = r.peek();
- if (escapedChars.contains(c)) {
- r.delete();
- return true;
- }
- }
- return false;
- }
-
- String parseString(ParserReader r, boolean isUrlParamValue, UonParserContext ctx) throws IOException, ParseException {
-
- // If string is of form '(xxx)', we're looking for ')' at the end.
- // Otherwise, we're looking for ',' or ')' or -1 denoting the end of this string.
-
- int c = r.peek();
- if (c == '(')
- return parsePString(r);
-
- r.mark();
- boolean isInEscape = false;
- String s = null;
- AsciiSet endChars = (isUrlParamValue ? endCharsParam : endCharsNormal);
- while (c != -1) {
- c = r.read();
- if (! isInEscape) {
- // If this is a URL parameter value, we're looking for: &
- // If not, we're looking for: &,)
- if (endChars.contains(c)) {
- r.unread();
- c = -1;
- }
- }
- if (c == -1)
- s = r.getMarked();
- else if (c == EQ)
- r.replace('=');
- else if ((c == '\n' || c == '\r') && ctx.whitespaceAware) {
- s = r.getMarked(0, -1);
- skipSpace(r);
- c = -1;
- }
- isInEscape = isInEscape(c, r, isInEscape);
- }
-
- return (s == null || s.equals("\u0000") ? null : s);
- }
-
- private static final AsciiSet endCharsParam = new AsciiSet(""+AMP), endCharsNormal = new AsciiSet(",)"+AMP);
-
-
- /**
- * Parses a string of the form "(foo)"
- * All whitespace within parenthesis are preserved.
- */
- static String parsePString(ParserReader r) throws IOException, ParseException {
-
- int line = r.getLine();
- int column = r.getColumn();
- r.read(); // Skip first parenthesis.
- r.mark();
- int c = 0;
-
- boolean isInEscape = false;
- while (c != -1) {
- c = r.read();
- if (! isInEscape) {
- if (c == ')')
- return r.getMarked(0, -1);
- }
- if (c == EQ)
- r.replace('=');
- isInEscape = isInEscape(c, r, isInEscape);
- }
- throw new ParseException(line, column, "Unmatched parenthesis");
- }
-
- private Boolean parseBoolean(ParserReader r, UonParserContext ctx) throws IOException, ParseException {
- int line = r.getLine();
- int column = r.getColumn();
- readFlag(r, 'b');
- String s = parseString(r, false, ctx);
- if (s == null)
- return null;
- if (s.equals("true"))
- return true;
- if (s.equals("false"))
- return false;
- throw new ParseException(line, column, "Unrecognized syntax for boolean. ''{0}''.", s);
- }
-
- private Number parseNumber(ParserReader r, Class<? extends Number> c, UonParserContext ctx) throws IOException, ParseException {
- readFlag(r, 'n');
- String s = parseString(r, false, ctx);
- if (s == null)
- return null;
- return StringUtils.parseNumber(s, c);
- }
-
- /*
- * Call this method after you've finished a parsing a string to make sure that if there's any
- * remainder in the input, that it consists only of whitespace and comments.
- */
- private void validateEnd(ParserReader r) throws ParseException, IOException {
- int line = r.getLine();
- int column = r.getColumn();
- int c = r.read();
- if (c != -1)
- throw new ParseException(line, column, "Remainder after parse: ''{0}''.", (char)c);
- }
-
- /**
- * Reads flag character from "$x(" construct if flag is present.
- * Returns 0 if no flag is present.
- */
- static char readFlag(ParserReader r, char expected) throws IOException, ParseException {
- int line = r.getLine();
- int column = r.getColumn();
- char c = (char)r.peek();
- if (c == '$') {
- r.read();
- char f = (char)r.read();
- if (expected != 0 && f != expected)
- throw new ParseException(line, column, "Unexpected flag character: ''{0}''. Expected ''{1}''.", f, expected);
- c = (char)r.peek();
- // Type flag must be followed by '('
- if (c != '(')
- throw new ParseException(line, column, "Unexpected character following flag: ''{0}''.", c);
- return f;
- }
- return 0;
- }
-
- private Object[] parseArgs(UonParserContext ctx, ParserReader r, ClassMeta<?>[] argTypes) throws ParseException, IOException {
- int line = r.getLine();
- int column = r.getColumn();
-
- final int S1=1; // Looking for start of entry
- final int S2=2; // Looking for , or )
-
- Object[] o = new Object[argTypes.length];
- int i = 0;
-
- int c = r.read();
- if (c == -1 || c == AMP)
- return null;
- if (c != '(')
- throw new ParseException("Expected '(' at beginning of args array.");
-
- int state = S1;
- while (c != -1 && c != AMP) {
- c = r.read();
- if (state == S1) {
- if (c == ')')
- return o;
- o[i] = parseAnything(argTypes[i], ctx, r.unread(), null, ctx.getOuter(), false, null);
- i++;
- state = S2;
- } else if (state == S2) {
- if (c == ',') {
- state = S1;
- } else if (c == ')') {
- return o;
- }
- }
- }
-
- throw new ParseException(line, column, "Did not find ')' at the end of args array.");
- }
-
- private static void skipSpace(ParserReader r) throws IOException {
- int c = 0;
- while ((c = r.read()) != -1) {
- if (c > ' ' || c <= 2) {
- r.unread();
- return;
- }
- }
- }
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* Parser */
- public UonParserContext createContext(ObjectMap properties, Method javaMethod, Object outer) {
- return new UonParserContext(getBeanContext(), pp, upp, uep, properties, javaMethod, outer);
- }
-
- @Override /* Parser */
- protected <T> T doParse(Reader in, int estimatedSize, ClassMeta<T> type, ParserContext ctx) throws ParseException, IOException {
- UonParserContext uctx = (UonParserContext)ctx;
- type = ctx.getBeanContext().normalizeClassMeta(type);
- UonParserReader r = uctx.getUrlEncodingParserReader(in, estimatedSize);
- T o = parseAnything(type, uctx, r, null, ctx.getOuter(), true, null);
- validateEnd(r);
- return o;
- }
-
- @Override /* ReaderParser */
- protected <K,V> Map<K,V> doParseIntoMap(Reader in, int estimatedSize, Map<K,V> m, Type keyType, Type valueType, ParserContext ctx) throws ParseException, IOException {
- UonParserContext uctx = (UonParserContext)ctx;
- UonParserReader r = uctx.getUrlEncodingParserReader(in, estimatedSize);
- readFlag(r, 'o');
- m = parseIntoMap(uctx, r, m, ctx.getBeanContext().getClassMeta(keyType), ctx.getBeanContext().getClassMeta(valueType));
- validateEnd(r);
- return m;
- }
-
- @Override /* ReaderParser */
- protected <E> Collection<E> doParseIntoCollection(Reader in, int estimatedSize, Collection<E> c, Type elementType, ParserContext ctx) throws ParseException, IOException {
- UonParserContext uctx = (UonParserContext)ctx;
- UonParserReader r = uctx.getUrlEncodingParserReader(in, estimatedSize);
- readFlag(r, 'a');
- c = parseIntoCollection(uctx, r, c, ctx.getBeanContext().getClassMeta(elementType), false);
- validateEnd(r);
- return c;
- }
-
- @Override /* ReaderParser */
- protected Object[] doParseArgs(Reader in, int estimatedSize, ClassMeta<?>[] argTypes, ParserContext ctx) throws ParseException, IOException {
- UonParserContext uctx = (UonParserContext)ctx;
- UonParserReader r = uctx.getUrlEncodingParserReader(in, estimatedSize);
- readFlag(r, 'a');
- Object[] a = parseArgs(uctx, r, argTypes);
- return a;
- }
-
- @Override /* Parser */
- public UonParser setProperty(String property, Object value) throws LockedException {
- checkLock();
- if (! upp.setProperty(property, value))
- if (! uep.setProperty(property, value))
- super.setProperty(property, value);
- return this;
- }
-
- @Override /* CoreApi */
- public UonParser setProperties(ObjectMap properties) throws LockedException {
- for (Map.Entry<String,Object> e : properties.entrySet())
- setProperty(e.getKey(), e.getValue());
- return this;
- }
-
- @Override /* CoreApi */
- public UonParser addNotBeanClasses(Class<?>...classes) throws LockedException {
- super.addNotBeanClasses(classes);
- return this;
- }
-
- @Override /* CoreApi */
- public UonParser addFilters(Class<?>...classes) throws LockedException {
- super.addFilters(classes);
- return this;
- }
-
- @Override /* CoreApi */
- public <T> UonParser addImplClass(Class<T> interfaceClass, Class<? extends T> implClass) throws LockedException {
- super.addImplClass(interfaceClass, implClass);
- return this;
- }
-
- @Override /* CoreApi */
- public UonParser setClassLoader(ClassLoader classLoader) throws LockedException {
- super.setClassLoader(classLoader);
- return this;
- }
-
- @Override /* Lockable */
- public UonParser lock() {
- super.lock();
- return this;
- }
-
- @Override /* Lockable */
- public UonParser clone() {
- try {
- UonParser c = (UonParser)super.clone();
- c.upp = upp.clone();
- c.uep = uep.clone();
- return c;
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e); // Shouldn't happen
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.class
deleted file mode 100755
index 87fa9f6..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.java
deleted file mode 100755
index 631bdcd..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserContext.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.urlencoding;
-
-import static com.ibm.juno.core.urlencoding.UonParserProperties.*;
-import static com.ibm.juno.core.urlencoding.UrlEncodingProperties.*;
-
-import java.io.*;
-import java.lang.reflect.*;
-
-import com.ibm.juno.core.*;
-import com.ibm.juno.core.parser.*;
-
-/**
- * Context object that lives for the duration of a single parsing in {@link UonParser} and {@link UrlEncodingParser}.
- * <p>
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public class UonParserContext extends ParserContext {
-
- boolean decodeChars, whitespaceAware, expandedParams;
-
- /**
- * Create a new parser context with the specified options.
- *
- * @param beanContext The bean context being used.
- * @param pp The default parser properties.
- * @param upp The default UON-Encoding properties.
- * @param uep The default URL-Encoding properties.
- * @param op The override properties.
- * @param javaMethod The java method that called this parser, usually the method in a REST servlet.
- * @param outer The outer object for instantiating top-level non-static inner classes.
- */
- public UonParserContext(BeanContext beanContext, ParserProperties pp, UonParserProperties upp, UrlEncodingProperties uep, ObjectMap op, Method javaMethod, Object outer) {
- super(beanContext, pp, op, javaMethod, outer);
- if (op == null || op.isEmpty()) {
- decodeChars = upp.decodeChars;
- whitespaceAware = upp.whitespaceAware;
- expandedParams = uep.expandedParams;
- } else {
- decodeChars = op.getBoolean(UON_decodeChars, upp.decodeChars);
- whitespaceAware = op.getBoolean(UON_whitespaceAware, upp.whitespaceAware);
- expandedParams = op.getBoolean(URLENC_expandedParams, uep.expandedParams);
- }
- }
-
- /**
- * Returns the {@link UrlEncodingProperties#URLENC_expandedParams} setting value in this context.
- *
- * @return The {@link UrlEncodingProperties#URLENC_expandedParams} setting value in this context.
- */
- public final boolean isExpandedParams() {
- return expandedParams;
- }
-
- /**
- * Wraps the specified reader in a {@link UonParserReader}.
- *
- * @param r The reader to wrap.
- * @param estimatedSize The estimated size of the input.
- * @return The wrapped reader.
- */
- public final UonParserReader getUrlEncodingParserReader(Reader r, int estimatedSize) {
- if (r instanceof UonParserReader)
- return (UonParserReader)r;
- return new UonParserReader(r, Math.min(8096, estimatedSize), decodeChars);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.class
deleted file mode 100755
index cffaddd..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.class and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.java b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.java
deleted file mode 100755
index f7b16ef..0000000
--- a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserProperties.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*******************************************************************************
- * Licensed Materials - Property of IBM
- * (c) Copyright IBM Corporation 2014, 2015. All Rights Reserved.
- *
- * The source code for this program is not published or otherwise
- * divested of its trade secrets, irrespective of what has been
- * deposited with the U.S. Copyright Office.
- *******************************************************************************/
-package com.ibm.juno.core.urlencoding;
-
-import com.ibm.juno.core.*;
-import com.ibm.juno.core.parser.*;
-
-/**
- * Configurable properties on the {@link UonParser} and {@link UrlEncodingParser} classes.
- * <p>
- * Use the {@link UonParser#setProperty(String, Object)} method to set property values.
- * <p>
- * In addition to these properties, the following properties are also applicable for {@link UonParser}.
- * <ul>
- * <li>{@link ParserProperties}
- * <li>{@link BeanContextProperties}
- * </ul>
- *
- * @author James Bognar (jbognar@us.ibm.com)
- */
-public class UonParserProperties implements Cloneable {
-
- /**
- * Decode <js>"%xx"</js> sequences. ({@link Boolean}, default=<jk>false</jk> for {@link UonParser}, <jk>true</jk> for {@link UrlEncodingParser}).
- * <p>
- * Specify <jk>true</jk> if URI encoded characters should be decoded, <jk>false</jk>
- * if they've already been decoded before being passed to this parser.
- */
- public static final String UON_decodeChars = "UonParser.decodeChars";
-
- /**
- * Expect input to contain readable whitespace characters from using the {@link UonSerializerProperties#UON_useWhitespace} setting ({@link Boolean}, default=<jk>false</jk>).
- */
- public static final String UON_whitespaceAware = "UonParser.whitespaceAware";
-
- boolean
- decodeChars = false,
- whitespaceAware = false;
-
- /**
- * Sets the specified property value.
- * @param property The property name.
- * @param value The property value.
- * @return <jk>true</jk> if property name was valid and property was set.
- */
- public boolean setProperty(String property, Object value) {
- BeanContext bc = BeanContext.DEFAULT;
- if (property.equals(UON_decodeChars))
- decodeChars = bc.convertToType(value, Boolean.class);
- else if (property.equals(UON_whitespaceAware))
- whitespaceAware = bc.convertToType(value, Boolean.class);
- else
- return false;
- return true;
- }
-
-
- //--------------------------------------------------------------------------------
- // Overridden methods
- //--------------------------------------------------------------------------------
-
- @Override /* Cloneable */
- public UonParserProperties clone() {
- try {
- return (UonParserProperties)super.clone();
- } catch (CloneNotSupportedException e) {
- throw new RuntimeException(e); // Shouldn't happen
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/30947fd7/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserReader.class
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserReader.class b/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserReader.class
deleted file mode 100755
index f8585fb..0000000
Binary files a/com.ibm.team.juno.releng/bin/core/com/ibm/juno/core/urlencoding/UonParserReader.class and /dev/null differ