001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.plaintext;
018
019import static org.apache.juneau.commons.utils.AssertionUtils.*;
020
021import java.io.*;
022import java.lang.reflect.*;
023import java.nio.charset.*;
024import java.util.*;
025import java.util.function.*;
026
027import org.apache.juneau.*;
028import org.apache.juneau.httppart.*;
029import org.apache.juneau.serializer.*;
030import org.apache.juneau.svl.*;
031
032/**
033 * Session object that lives for the duration of a single use of {@link PlainTextSerializer}.
034 *
035 * <h5 class='section'>Notes:</h5><ul>
036 *    <li class='warn'>This class is not thread safe and is typically discarded after one use.
037 * </ul>
038 *
039 */
040@SuppressWarnings("resource")
041public class PlainTextSerializerSession extends WriterSerializerSession {
042   /**
043    * Builder class.
044    */
045   public static class Builder extends WriterSerializerSession.Builder {
046
047      /**
048       * Constructor
049       *
050       * @param ctx The context creating this session.
051       *    <br>Cannot be <jk>null</jk>.
052       */
053      protected Builder(PlainTextSerializer ctx) {
054         super(assertArgNotNull("ctx", ctx));
055      }
056
057      @Override /* Overridden from Builder */
058      public <T> Builder apply(Class<T> type, Consumer<T> apply) {
059         super.apply(type, apply);
060         return this;
061      }
062
063      @Override
064      public PlainTextSerializerSession build() {
065         return new PlainTextSerializerSession(this);
066      }
067
068      @Override /* Overridden from Builder */
069      public Builder debug(Boolean value) {
070         super.debug(value);
071         return this;
072      }
073
074      @Override /* Overridden from Builder */
075      public Builder fileCharset(Charset value) {
076         super.fileCharset(value);
077         return this;
078      }
079
080      @Override /* Overridden from Builder */
081      public Builder javaMethod(Method value) {
082         super.javaMethod(value);
083         return this;
084      }
085
086      @Override /* Overridden from Builder */
087      public Builder locale(Locale value) {
088         super.locale(value);
089         return this;
090      }
091
092      @Override /* Overridden from Builder */
093      public Builder mediaType(MediaType value) {
094         super.mediaType(value);
095         return this;
096      }
097
098      @Override /* Overridden from Builder */
099      public Builder mediaTypeDefault(MediaType value) {
100         super.mediaTypeDefault(value);
101         return this;
102      }
103
104      @Override /* Overridden from Builder */
105      public Builder properties(Map<String,Object> value) {
106         super.properties(value);
107         return this;
108      }
109
110      @Override /* Overridden from Builder */
111      public Builder property(String key, Object value) {
112         super.property(key, value);
113         return this;
114      }
115
116      @Override /* Overridden from Builder */
117      public Builder resolver(VarResolverSession value) {
118         super.resolver(value);
119         return this;
120      }
121
122      @Override /* Overridden from Builder */
123      public Builder schema(HttpPartSchema value) {
124         super.schema(value);
125         return this;
126      }
127
128      @Override /* Overridden from Builder */
129      public Builder schemaDefault(HttpPartSchema value) {
130         super.schemaDefault(value);
131         return this;
132      }
133
134      @Override /* Overridden from Builder */
135      public Builder streamCharset(Charset value) {
136         super.streamCharset(value);
137         return this;
138      }
139
140      @Override /* Overridden from Builder */
141      public Builder timeZone(TimeZone value) {
142         super.timeZone(value);
143         return this;
144      }
145
146      @Override /* Overridden from Builder */
147      public Builder timeZoneDefault(TimeZone value) {
148         super.timeZoneDefault(value);
149         return this;
150      }
151
152      @Override /* Overridden from Builder */
153      public Builder unmodifiable() {
154         super.unmodifiable();
155         return this;
156      }
157
158      @Override /* Overridden from Builder */
159      public Builder uriContext(UriContext value) {
160         super.uriContext(value);
161         return this;
162      }
163
164      @Override /* Overridden from Builder */
165      public Builder useWhitespace(Boolean value) {
166         super.useWhitespace(value);
167         return this;
168      }
169   }
170
171   /**
172    * Creates a new builder for this object.
173    *
174    * @param ctx The context creating this session.
175    *    <br>Cannot be <jk>null</jk>.
176    * @return A new builder.
177    */
178   public static Builder create(PlainTextSerializer ctx) {
179      return new Builder(assertArgNotNull("ctx", ctx));
180   }
181
182   /**
183    * Constructor.
184    *
185    * @param builder The builder for this object.
186    */
187   protected PlainTextSerializerSession(Builder builder) {
188      super(builder);
189   }
190
191   @Override /* Overridden from SerializerSession */
192   protected void doSerialize(SerializerPipe out, Object o) throws IOException, SerializeException {
193      out.getWriter().write(o == null ? "null" : convertToType(o, String.class));
194   }
195}