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