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