All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.juneau.serializer.WriterSerializer Maven / Gradle / Ivy

There is a newer version: 9.0.1
Show newest version
// ***************************************************************************************************************************
// * 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.serializer;

import org.apache.juneau.*;
import org.apache.juneau.utils.*;

/**
 * Subclass of {@link Serializer} for character-based serializers.
 */
public abstract class WriterSerializer extends Serializer {

	//-------------------------------------------------------------------------------------------------------------------
	// Configurable properties
	//-------------------------------------------------------------------------------------------------------------------

	private static final String PREFIX = "WriterSerializer.";

	/**
	 * Configuration property:  Maximum indentation.
	 *
	 * 
Property:
*
    *
  • Name: "WriterSerializer.maxIndent.i" *
  • Data type: Integer *
  • Default: 100 *
  • Session property: false *
  • Methods: *
      *
    • {@link WriterSerializerBuilder#maxIndent(int)} *
    *
* *
Description:
*

* Specifies the maximum indentation level in the serialized document. * *

* This setting does not apply to the RDF serializers. * *

Example:
*

* // Create a serializer that indents a maximum of 20 tabs. * WriterSerializer s = JsonSerializer * .create() * .maxIndent(20) * .build(); * * // Same, but use property. * WriterSerializer s = JsonSerializer * .create() * .set(SERIALIZER_maxIndent, 20) * .build(); *

*/ public static final String WSERIALIZER_maxIndent = PREFIX + "maxIndent.i"; /** * Configuration property: Quote character. * *
Property:
*
    *
  • Name: "WriterSerializer.quoteChar.s" *
  • Data type: String *
  • Default: "\"" *
  • Session property: false *
  • Methods: *
      *
    • {@link WriterSerializerBuilder#quoteChar(char)} *
    • {@link WriterSerializerBuilder#sq()} *
    *
* *
Description:
*

* This is the character used for quoting attributes and values. * *

* This setting does not apply to the RDF serializers. * *

Example:
*

* // Create a serializer that uses single quotes. * WriterSerializer s = JsonSerializer * .create() * .sq() * .build(); * * // Same, but use property. * WriterSerializer s = JsonSerializer * .create() * .set(WSERIALIZER_quoteChar, '\'') * .build(); *

*/ public static final String WSERIALIZER_quoteChar = PREFIX + "quoteChar.s"; static final WriterSerializer DEFAULT = new WriterSerializer(PropertyStore.create().build(), "", "") { @Override public WriterSerializerSession createSession(SerializerSessionArgs args) { throw new NoSuchMethodError(); } }; //------------------------------------------------------------------------------------------------------------------- // Instance //------------------------------------------------------------------------------------------------------------------- private final int maxIndent; private final char quoteChar; /** * Constructor. * * @param ps * The property store containing all the settings for this object. * @param produces * The media type that this serializer produces. * @param accept * The accept media types that the serializer can handle. *

* Can contain meta-characters per the media-type specification of {@doc RFC2616.section14.1} *

* If empty, then assumes the only media type supported is produces. *

* For example, if this serializer produces "application/json" but should handle media types of * "application/json" and "text/json", then the arguments should be: *

* super(ps, "application/json", "application/json,text/json"); *

*
...or... *

* super(ps, "application/json", "*​/json"); *

*

* The accept value can also contain q-values. */ protected WriterSerializer(PropertyStore ps, String produces, String accept) { super(ps, produces, accept); maxIndent = getIntegerProperty(WSERIALIZER_maxIndent, 100); quoteChar = getStringProperty(WSERIALIZER_quoteChar, "\"").charAt(0); } //----------------------------------------------------------------------------------------------------------------- // Abstract methods //----------------------------------------------------------------------------------------------------------------- @Override /* SerializerSession */ public abstract WriterSerializerSession createSession(SerializerSessionArgs args); //----------------------------------------------------------------------------------------------------------------- // Other methods //----------------------------------------------------------------------------------------------------------------- @Override /* Serializer */ public final boolean isWriterSerializer() { return true; } /** * 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. */ @Override /* Serializer */ public final String serialize(Object o) throws SerializeException { return createSession(createDefaultSessionArgs()).serialize(o); } /** * 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 { return serialize(o); } 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); } /** * Convenience method for serializing an object and sending it to STDOUT. * * @param o The object to serialize. * @return This object (for method chaining). */ public final WriterSerializer println(Object o) { System.out.println(toString(o)); // NOT DEBUG return this; } //----------------------------------------------------------------------------------------------------------------- // Properties //----------------------------------------------------------------------------------------------------------------- /** * Configuration property: Maximum indentation. * * @see #WSERIALIZER_maxIndent * @return * The maximum indentation level in the serialized document. */ protected final int getMaxIndent() { return maxIndent; } /** * Configuration property: Quote character. * * @see #WSERIALIZER_quoteChar * @return * The character used for quoting attributes and values. */ protected final char getQuoteChar() { return quoteChar; } @Override /* Context */ public ObjectMap asMap() { return super.asMap() .append("WriterSerializer", new ObjectMap() .append("maxIndent", maxIndent) .append("quoteChar", quoteChar) ); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy