| // *************************************************************************************************************************** |
| // * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * |
| // * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * |
| // * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * |
| // * with the License. You may obtain a copy of the License at * |
| // * * |
| // * http://www.apache.org/licenses/LICENSE-2.0 * |
| // * * |
| // * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * |
| // * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * |
| // * specific language governing permissions and limitations under the License. * |
| // *************************************************************************************************************************** |
| package org.apache.juneau.dto.swagger; |
| |
| import static org.apache.juneau.internal.StringUtils.*; |
| import static org.apache.juneau.internal.ObjectUtils.*; |
| |
| import java.net.*; |
| import java.net.URI; |
| import java.util.*; |
| |
| import org.apache.juneau.*; |
| import org.apache.juneau.annotation.*; |
| import org.apache.juneau.internal.*; |
| import org.apache.juneau.utils.*; |
| |
| /** |
| * Contact information for the exposed API. |
| * |
| * <h5 class='section'>Example:</h5> |
| * <p class='bcode w800'> |
| * <jc>// Construct using SwaggerBuilder.</jc> |
| * Contact x = <jsm>contact</jsm>(<js>"API Support"</js>, <js>"http://www.swagger.io/support"</js>, <js>"support@swagger.io"</js>); |
| * |
| * <jc>// Serialize using JsonSerializer.</jc> |
| * String json = JsonSerializer.<jsf>DEFAULT</jsf>.toString(x); |
| * |
| * <jc>// Or just use toString() which does the same as above.</jc> |
| * String json = x.toString(); |
| * </p> |
| * <p class='bcode w800'> |
| * <jc>// Output</jc> |
| * { |
| * <js>"name"</js>: <js>"API Support"</js>, |
| * <js>"url"</js>: <js>"http://www.swagger.io/support"</js>, |
| * <js>"email"</js>: <js>"support@swagger.io"</js> |
| * } |
| * </p> |
| * |
| * <ul class='seealso'> |
| * <li class='link'>{@doc juneau-dto.Swagger} |
| * </ul> |
| */ |
| @Bean(bpi="name,url,email,*") |
| public class Contact extends SwaggerElement { |
| |
| private String name; |
| private URI url; |
| private String email; |
| |
| /** |
| * Default constructor. |
| */ |
| public Contact() {} |
| |
| /** |
| * Copy constructor. |
| * |
| * @param copyFrom The object to copy. |
| */ |
| public Contact(Contact copyFrom) { |
| super(copyFrom); |
| |
| this.name = copyFrom.name; |
| this.url = copyFrom.url; |
| this.email = copyFrom.email; |
| } |
| |
| /** |
| * Make a deep copy of this object. |
| * |
| * @return A deep copy of this object. |
| */ |
| public Contact copy() { |
| return new Contact(this); |
| } |
| |
| /** |
| * Bean property getter: <property>name</property>. |
| * |
| * <p> |
| * The identifying name of the contact person/organization. |
| * |
| * @return The property value, or <jk>null</jk> if it is not set. |
| */ |
| public String getName() { |
| return name; |
| } |
| |
| /** |
| * Bean property setter: <property>name</property>. |
| * |
| * <p> |
| * The identifying name of the contact person/organization. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact setName(String value) { |
| name = value; |
| return this; |
| } |
| |
| /** |
| * Same as {@link #setName(String)}. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>Non-String values will be converted to String using <c>toString()</c>. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact name(Object value) { |
| return setName(stringify(value)); |
| } |
| |
| /** |
| * Bean property getter: <property>url</property>. |
| * |
| * <p> |
| * The URL pointing to the contact information. |
| * |
| * @return The property value, or <jk>null</jk> if it is not set. |
| */ |
| public URI getUrl() { |
| return url; |
| } |
| |
| /** |
| * Bean property setter: <property>url</property>. |
| * |
| * <p> |
| * The value can be of any of the following types: {@link URI}, {@link URL}, {@link String}. |
| * <br>Strings must be valid URIs. |
| * |
| * <p> |
| * URIs defined by {@link UriResolver} can be used for values. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact setUrl(URI value) { |
| url = value; |
| return this; |
| } |
| |
| /** |
| * Same as {@link #setUrl(URI)}. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>Non-URI values will be converted to URI using <code><jk>new</jk> URI(value.toString())</code>. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact url(Object value) { |
| return setUrl(StringUtils.toURI(value)); |
| } |
| |
| /** |
| * Bean property getter: <property>email</property>. |
| * |
| * <p> |
| * The email address of the contact person/organization. |
| * |
| * @return The property value, or <jk>null</jk> if it is not set. |
| */ |
| public String getEmail() { |
| return email; |
| } |
| |
| /** |
| * Bean property setter: <property>email</property>. |
| * |
| * <p> |
| * The email address of the contact person/organization. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>MUST be in the format of an email address. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact setEmail(String value) { |
| email = value; |
| return this; |
| } |
| |
| /** |
| * Same as {@link #setEmail(String)}. |
| * |
| * @param value |
| * The new value for this property. |
| * <br>Non-String values will be converted to String using <c>toString()</c>. |
| * <br>MUST be in the format of an email address. |
| * <br>Can be <jk>null</jk> to unset the property. |
| * @return This object (for method chaining). |
| */ |
| public Contact email(Object value) { |
| return setEmail(stringify(value)); |
| } |
| |
| /** |
| * Returns <jk>true</jk> if the name property is not null or empty. |
| * |
| * @return <jk>true</jk> if the name property is not null or empty. |
| */ |
| public boolean hasName() { |
| return isNotEmpty(name); |
| } |
| |
| /** |
| * Returns <jk>true</jk> if the URL property is not null. |
| * |
| * @return <jk>true</jk> if the URL property is not null. |
| */ |
| public boolean hasUrl() { |
| return url != null; |
| } |
| |
| /** |
| * Returns <jk>true</jk> if the email property is not null or empty. |
| * |
| * @return <jk>true</jk> if the email property is not null or empty. |
| */ |
| public boolean hasEmail() { |
| return isNotEmpty(email); |
| } |
| |
| @Override /* SwaggerElement */ |
| public <T> T get(String property, Class<T> type) { |
| if (property == null) |
| return null; |
| switch (property) { |
| case "name": return toType(getName(), type); |
| case "url": return toType(getUrl(), type); |
| case "email": return toType(getEmail(), type); |
| default: return super.get(property, type); |
| } |
| } |
| |
| @Override /* SwaggerElement */ |
| public Contact set(String property, Object value) { |
| if (property == null) |
| return this; |
| switch (property) { |
| case "name": return name(value); |
| case "url": return url(value); |
| case "email": return email(value); |
| default: |
| super.set(property, value); |
| return this; |
| } |
| } |
| |
| @Override /* SwaggerElement */ |
| public Set<String> keySet() { |
| ASet<String> s = new ASet<String>() |
| .appendIf(name != null, "name") |
| .appendIf(url != null, "url") |
| .appendIf(email != null, "email"); |
| return new MultiSet<>(s, super.keySet()); |
| } |
| } |