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.html;
018
019import java.io.*;
020import java.lang.reflect.*;
021import java.nio.charset.*;
022import java.util.*;
023import java.util.function.*;
024
025import org.apache.juneau.*;
026import org.apache.juneau.httppart.*;
027import org.apache.juneau.jsonschema.*;
028import org.apache.juneau.serializer.*;
029import org.apache.juneau.svl.*;
030
031/**
032 * Context object that lives for the duration of a single serialization of {@link HtmlSchemaDocSerializer} and its subclasses.
033 *
034 * <h5 class='section'>Notes:</h5><ul>
035 *    <li class='warn'>This class is not thread safe and is typically discarded after one use.
036 * </ul>
037 *
038 * <h5 class='section'>See Also:</h5><ul>
039 *    <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/HtmlBasics">HTML Basics</a>
040 * </ul>
041 */
042public class HtmlSchemaDocSerializerSession extends HtmlDocSerializerSession {
043   /**
044    * Builder class.
045    */
046   public static class Builder extends HtmlDocSerializerSession.Builder {
047
048      private HtmlSchemaDocSerializer ctx;
049
050      /**
051       * Constructor
052       *
053       * @param ctx The context creating this session.
054       */
055      protected Builder(HtmlSchemaDocSerializer ctx) {
056         super(ctx);
057         this.ctx = ctx;
058      }
059
060      @Override /* Overridden from Builder */
061      public <T> Builder apply(Class<T> type, Consumer<T> apply) {
062         super.apply(type, apply);
063         return this;
064      }
065
066      @Override
067      public HtmlSchemaDocSerializerSession build() {
068         return new HtmlSchemaDocSerializerSession(this);
069      }
070
071      @Override /* Overridden from Builder */
072      public Builder debug(Boolean value) {
073         super.debug(value);
074         return this;
075      }
076
077      @Override /* Overridden from Builder */
078      public Builder fileCharset(Charset value) {
079         super.fileCharset(value);
080         return this;
081      }
082
083      @Override /* Overridden from Builder */
084      public Builder javaMethod(Method value) {
085         super.javaMethod(value);
086         return this;
087      }
088
089      @Override /* Overridden from Builder */
090      public Builder locale(Locale value) {
091         super.locale(value);
092         return this;
093      }
094
095      @Override /* Overridden from Builder */
096      public Builder mediaType(MediaType value) {
097         super.mediaType(value);
098         return this;
099      }
100
101      @Override /* Overridden from Builder */
102      public Builder mediaTypeDefault(MediaType value) {
103         super.mediaTypeDefault(value);
104         return this;
105      }
106
107      @Override /* Overridden from Builder */
108      public Builder properties(Map<String,Object> value) {
109         super.properties(value);
110         return this;
111      }
112
113      @Override /* Overridden from Builder */
114      public Builder property(String key, Object value) {
115         super.property(key, value);
116         return this;
117      }
118
119      @Override /* Overridden from Builder */
120      public Builder resolver(VarResolverSession value) {
121         super.resolver(value);
122         return this;
123      }
124
125      @Override /* Overridden from Builder */
126      public Builder schema(HttpPartSchema value) {
127         super.schema(value);
128         return this;
129      }
130
131      @Override /* Overridden from Builder */
132      public Builder schemaDefault(HttpPartSchema value) {
133         super.schemaDefault(value);
134         return this;
135      }
136
137      @Override /* Overridden from Builder */
138      public Builder streamCharset(Charset value) {
139         super.streamCharset(value);
140         return this;
141      }
142
143      @Override /* Overridden from Builder */
144      public Builder timeZone(TimeZone value) {
145         super.timeZone(value);
146         return this;
147      }
148
149      @Override /* Overridden from Builder */
150      public Builder timeZoneDefault(TimeZone value) {
151         super.timeZoneDefault(value);
152         return this;
153      }
154
155      @Override /* Overridden from Builder */
156      public Builder unmodifiable() {
157         super.unmodifiable();
158         return this;
159      }
160
161      @Override /* Overridden from Builder */
162      public Builder uriContext(UriContext value) {
163         super.uriContext(value);
164         return this;
165      }
166
167      @Override /* Overridden from Builder */
168      public Builder useWhitespace(Boolean value) {
169         super.useWhitespace(value);
170         return this;
171      }
172   }
173
174   /**
175    * Creates a new builder for this object.
176    *
177    * @param ctx The context creating this session.
178    * @return A new builder.
179    */
180   public static Builder create(HtmlSchemaDocSerializer ctx) {
181      return new Builder(ctx);
182   }
183
184   private final JsonSchemaGeneratorSession genSession;
185
186   /**
187    * Constructor.
188    *
189    * @param builder The builder for this object.
190    */
191   protected HtmlSchemaDocSerializerSession(Builder builder) {
192      super(builder);
193      genSession = builder.ctx.getGenerator().getSession();
194   }
195
196   @Override /* Overridden from SerializerSession */
197   protected void doSerialize(SerializerPipe out, Object o) throws IOException, SerializeException {
198      try {
199         super.doSerialize(out, genSession.getSchema(o));
200      } catch (BeanRecursionException e) {
201         throw new SerializeException(e);
202      }
203   }
204}