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.rest.annotation; 018 019import static org.apache.juneau.commons.utils.CollectionUtils.*; 020 021import java.lang.annotation.*; 022import java.nio.charset.*; 023 024import org.apache.juneau.*; 025import org.apache.juneau.encoders.*; 026import org.apache.juneau.http.*; 027import org.apache.juneau.commons.annotation.*; 028import org.apache.juneau.commons.reflect.*; 029import org.apache.juneau.rest.*; 030import org.apache.juneau.rest.guard.*; 031import org.apache.juneau.rest.httppart.*; 032import org.apache.juneau.rest.matcher.*; 033import org.apache.juneau.svl.*; 034 035/** 036 * Utility classes and methods for the {@link RestDelete @RestDelete} annotation. 037 * 038 * <h5 class='section'>See Also:</h5><ul> 039 * <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/RestOpAnnotatedMethodBasics">@RestOp-Annotated Method Basics</a> 040 * </ul> 041 */ 042public class RestDeleteAnnotation { 043 /** 044 * Builder class. 045 * 046 * <h5 class='section'>See Also:</h5><ul> 047 * <li class='jm'>{@link org.apache.juneau.BeanContext.Builder#annotations(Annotation...)} 048 * </ul> 049 */ 050 @SuppressWarnings("unchecked") 051 public static class Builder extends AppliedAnnotationObject.BuilderM { 052 053 private String[] description = {}; 054 private Class<? extends RestGuard>[] guards = new Class[0]; 055 private Class<? extends RestMatcher>[] matchers = new Class[0]; 056 private Class<? extends Encoder>[] encoders = new Class[0]; 057 private OpSwagger swagger = OpSwaggerAnnotation.DEFAULT; 058 private String clientVersion = "", debug = "", defaultAccept = "", defaultCharset = "", rolesDeclared = "", roleGuard = "", summary = "", value = ""; 059 private String[] defaultRequestQueryData = {}, defaultRequestAttributes = {}, defaultRequestHeaders = {}, defaultResponseHeaders = {}, path = {}; 060 061 /** 062 * Constructor. 063 */ 064 protected Builder() { 065 super(RestDelete.class); 066 } 067 068 /** 069 * Instantiates a new {@link RestDelete @RestDelete} object initialized with this builder. 070 * 071 * @return A new {@link RestDelete @RestDelete} object. 072 */ 073 public RestDelete build() { 074 return new Object(this); 075 } 076 077 /** 078 * Sets the description property on this annotation. 079 * 080 * @param value The new value for this property. 081 * @return This object. 082 */ 083 public Builder description(String...value) { 084 description = value; 085 return this; 086 } 087 088 /** 089 * Sets the {@link RestDelete#clientVersion()} property on this annotation. 090 * 091 * @param value The new value for this property. 092 * @return This object. 093 */ 094 public Builder clientVersion(String value) { 095 clientVersion = value; 096 return this; 097 } 098 099 /** 100 * Sets the {@link RestDelete#debug()} property on this annotation. 101 * 102 * @param value The new value for this property. 103 * @return This object. 104 */ 105 public Builder debug(String value) { 106 debug = value; 107 return this; 108 } 109 110 /** 111 * Sets the {@link RestDelete#defaultAccept()} property on this annotation. 112 * 113 * @param value The new value for this property. 114 * @return This object. 115 */ 116 public Builder defaultAccept(String value) { 117 defaultAccept = value; 118 return this; 119 } 120 121 /** 122 * Sets the {@link RestDelete#defaultCharset()} property on this annotation. 123 * 124 * @param value The new value for this property. 125 * @return This object. 126 */ 127 public Builder defaultCharset(String value) { 128 defaultCharset = value; 129 return this; 130 } 131 132 /** 133 * Sets the {@link RestDelete#defaultRequestAttributes()} property on this annotation. 134 * 135 * @param value The new value for this property. 136 * @return This object. 137 */ 138 public Builder defaultRequestAttributes(String...value) { 139 defaultRequestAttributes = value; 140 return this; 141 } 142 143 /** 144 * Sets the {@link RestDelete#defaultRequestHeaders()} property on this annotation. 145 * 146 * @param value The new value for this property. 147 * @return This object. 148 */ 149 public Builder defaultRequestHeaders(String...value) { 150 defaultRequestHeaders = value; 151 return this; 152 } 153 154 /** 155 * Sets the {@link RestDelete#defaultRequestQueryData()} property on this annotation. 156 * 157 * @param value The new value for this property. 158 * @return This object. 159 */ 160 public Builder defaultRequestQueryData(String...value) { 161 defaultRequestQueryData = value; 162 return this; 163 } 164 165 /** 166 * Sets the {@link RestDelete#defaultResponseHeaders()} property on this annotation. 167 * 168 * @param value The new value for this property. 169 * @return This object. 170 */ 171 public Builder defaultResponseHeaders(String...value) { 172 defaultResponseHeaders = value; 173 return this; 174 } 175 176 /** 177 * Sets the {@link RestDelete#encoders()} property on this annotation. 178 * 179 * @param value The new value for this property. 180 * @return This object. 181 */ 182 @SafeVarargs 183 public final Builder encoders(Class<? extends Encoder>...value) { 184 encoders = value; 185 return this; 186 } 187 188 /** 189 * Sets the {@link RestDelete#guards()} property on this annotation. 190 * 191 * @param value The new value for this property. 192 * @return This object. 193 */ 194 @SafeVarargs 195 public final Builder guards(Class<? extends RestGuard>...value) { 196 guards = value; 197 return this; 198 } 199 200 /** 201 * Sets the {@link RestDelete#matchers()} property on this annotation. 202 * 203 * @param value The new value for this property. 204 * @return This object. 205 */ 206 @SafeVarargs 207 public final Builder matchers(Class<? extends RestMatcher>...value) { 208 matchers = value; 209 return this; 210 } 211 212 /** 213 * Sets the {@link RestDelete#path()} property on this annotation. 214 * 215 * @param value The new value for this property. 216 * @return This object. 217 */ 218 public Builder path(String...value) { 219 path = value; 220 return this; 221 } 222 223 /** 224 * Sets the {@link RestDelete#roleGuard()} property on this annotation. 225 * 226 * @param value The new value for this property. 227 * @return This object. 228 */ 229 public Builder roleGuard(String value) { 230 roleGuard = value; 231 return this; 232 } 233 234 /** 235 * Sets the {@link RestDelete#rolesDeclared()} property on this annotation. 236 * 237 * @param value The new value for this property. 238 * @return This object. 239 */ 240 public Builder rolesDeclared(String value) { 241 rolesDeclared = value; 242 return this; 243 } 244 245 /** 246 * Sets the {@link RestDelete#summary()} property on this annotation. 247 * 248 * @param value The new value for this property. 249 * @return This object. 250 */ 251 public Builder summary(String value) { 252 summary = value; 253 return this; 254 } 255 256 /** 257 * Sets the {@link RestDelete#swagger()} property on this annotation. 258 * 259 * @param value The new value for this property. 260 * @return This object. 261 */ 262 public Builder swagger(OpSwagger value) { 263 swagger = value; 264 return this; 265 } 266 267 /** 268 * Sets the {@link RestDelete#value()} property on this annotation. 269 * 270 * @param value The new value for this property. 271 * @return This object. 272 */ 273 public Builder value(String value) { 274 this.value = value; 275 return this; 276 } 277 278 @Override /* Overridden from AppliedAnnotationObject.Builder */ 279 public Builder on(String...value) { 280 super.on(value); 281 return this; 282 } 283 284 @Override /* Overridden from AppliedAnnotationObject.BuilderM */ 285 public Builder on(java.lang.reflect.Method...value) { 286 super.on(value); 287 return this; 288 } 289 290 @Override /* Overridden from AppliedAnnotationObject.BuilderM */ 291 public Builder on(MethodInfo...value) { 292 super.on(value); 293 return this; 294 } 295 296 } 297 298 /** 299 * Applies {@link RestDelete} annotations to a {@link org.apache.juneau.rest.RestOpContext.Builder}. 300 */ 301 public static class RestOpContextApply extends AnnotationApplier<RestDelete,RestOpContext.Builder> { 302 303 /** 304 * Constructor. 305 * 306 * @param vr The resolver for resolving values in annotations. 307 */ 308 public RestOpContextApply(VarResolverSession vr) { 309 super(RestDelete.class, RestOpContext.Builder.class, vr); 310 } 311 312 @Override 313 public void apply(AnnotationInfo<RestDelete> ai, RestOpContext.Builder b) { 314 RestDelete a = ai.inner(); 315 316 b.httpMethod("delete"); 317 318 classes(a.encoders()).ifPresent(x -> b.encoders().set(x)); 319 stream(a.defaultRequestHeaders()).map(HttpHeaders::stringHeader).forEach(x -> b.defaultRequestHeaders().setDefault(x)); 320 stream(a.defaultResponseHeaders()).map(HttpHeaders::stringHeader).forEach(x -> b.defaultResponseHeaders().setDefault(x)); 321 stream(a.defaultRequestAttributes()).map(BasicNamedAttribute::ofPair).forEach(x -> b.defaultRequestAttributes().add(x)); 322 stream(a.defaultRequestQueryData()).map(HttpParts::basicPart).forEach(x -> b.defaultRequestQueryData().setDefault(x)); 323 string(a.defaultAccept()).map(HttpHeaders::accept).ifPresent(x -> b.defaultRequestHeaders().setDefault(x)); 324 b.guards().append(a.guards()); 325 b.matchers().append(a.matchers()); 326 string(a.clientVersion()).ifPresent(x -> b.clientVersion(x)); 327 string(a.defaultCharset()).map(Charset::forName).ifPresent(x -> b.defaultCharset(x)); 328 stream(a.path()).forEach(x -> b.path(x)); 329 string(a.value()).ifPresent(x -> b.path(x)); 330 cdl(a.rolesDeclared()).forEach(x -> b.rolesDeclared(x)); 331 string(a.roleGuard()).ifPresent(x -> b.roleGuard(x)); 332 string(a.debug()).map(Enablement::fromString).ifPresent(x -> b.debug(x)); 333 } 334 335 } 336 337 private static class Object extends AppliedAnnotationObject implements RestDelete { 338 339 private final String[] description; 340 private final Class<? extends RestGuard>[] guards; 341 private final Class<? extends RestMatcher>[] matchers; 342 private final Class<? extends Encoder>[] encoders; 343 private final OpSwagger swagger; 344 private final String clientVersion, debug, defaultAccept, defaultCharset, rolesDeclared, roleGuard, summary, value; 345 private final String[] defaultRequestQueryData, defaultRequestAttributes, defaultRequestHeaders, defaultResponseHeaders, path; 346 347 Object(RestDeleteAnnotation.Builder b) { 348 super(b); 349 description = copyOf(b.description); 350 clientVersion = b.clientVersion; 351 debug = b.debug; 352 defaultAccept = b.defaultAccept; 353 defaultCharset = b.defaultCharset; 354 defaultRequestQueryData = copyOf(b.defaultRequestQueryData); 355 defaultRequestAttributes = copyOf(b.defaultRequestAttributes); 356 defaultRequestHeaders = copyOf(b.defaultRequestHeaders); 357 defaultResponseHeaders = copyOf(b.defaultResponseHeaders); 358 encoders = copyOf(b.encoders); 359 guards = copyOf(b.guards); 360 matchers = copyOf(b.matchers); 361 path = copyOf(b.path); 362 roleGuard = b.roleGuard; 363 rolesDeclared = b.rolesDeclared; 364 summary = b.summary; 365 swagger = b.swagger; 366 value = b.value; 367 } 368 369 @Override /* Overridden from RestDelete */ 370 public String clientVersion() { 371 return clientVersion; 372 } 373 374 @Override /* Overridden from RestDelete */ 375 public String debug() { 376 return debug; 377 } 378 379 @Override /* Overridden from RestDelete */ 380 public String defaultAccept() { 381 return defaultAccept; 382 } 383 384 @Override /* Overridden from RestDelete */ 385 public String defaultCharset() { 386 return defaultCharset; 387 } 388 389 @Override /* Overridden from RestDelete */ 390 public String[] defaultRequestAttributes() { 391 return defaultRequestAttributes; 392 } 393 394 @Override /* Overridden from RestDelete */ 395 public String[] defaultRequestHeaders() { 396 return defaultRequestHeaders; 397 } 398 399 @Override /* Overridden from RestDelete */ 400 public String[] defaultRequestQueryData() { 401 return defaultRequestQueryData; 402 } 403 404 @Override /* Overridden from RestDelete */ 405 public String[] defaultResponseHeaders() { 406 return defaultResponseHeaders; 407 } 408 409 @Override /* Overridden from RestDelete */ 410 public Class<? extends Encoder>[] encoders() { 411 return encoders; 412 } 413 414 @Override /* Overridden from RestDelete */ 415 public Class<? extends RestGuard>[] guards() { 416 return guards; 417 } 418 419 @Override /* Overridden from RestDelete */ 420 public Class<? extends RestMatcher>[] matchers() { 421 return matchers; 422 } 423 424 @Override /* Overridden from RestDelete */ 425 public String[] path() { 426 return path; 427 } 428 429 @Override /* Overridden from RestDelete */ 430 public String roleGuard() { 431 return roleGuard; 432 } 433 434 @Override /* Overridden from RestDelete */ 435 public String rolesDeclared() { 436 return rolesDeclared; 437 } 438 439 @Override /* Overridden from RestDelete */ 440 public String summary() { 441 return summary; 442 } 443 444 @Override /* Overridden from RestDelete */ 445 public OpSwagger swagger() { 446 return swagger; 447 } 448 449 @Override /* Overridden from RestDelete */ 450 public String value() { 451 return value; 452 } 453 454 @Override /* Overridden from annotation */ 455 public String[] description() { 456 return description; 457 } 458 } 459 460 /** Default value */ 461 public static final RestDelete DEFAULT = create().build(); 462 463 /** 464 * Instantiates a new builder for this class. 465 * 466 * @return A new builder object. 467 */ 468 public static Builder create() { 469 return new Builder(); 470 } 471}