/* | |
* #%L | |
* Apache Geronimo JAX-RS Spec 2.0 | |
* %% | |
* Copyright (C) 2003 - 2014 The Apache Software Foundation | |
* %% | |
* Licensed 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. | |
* #L% | |
*/ | |
package javax.ws.rs.core; | |
import javax.ws.rs.ext.RuntimeDelegate; | |
import java.io.StringWriter; | |
import java.util.List; | |
import java.util.Locale; | |
public class Variant { | |
private Locale language; | |
private MediaType mediaType; | |
private String encoding; | |
public Variant(MediaType mediaType, String language, String encoding) { | |
if (mediaType == null && language == null && encoding == null) { | |
throw new IllegalArgumentException("mediaType, language, encoding all null"); | |
} | |
this.encoding = encoding; | |
this.language = (language == null) ? null : new Locale(language); | |
this.mediaType = mediaType; | |
} | |
public Variant(MediaType mediaType, String language, String country, String encoding) { | |
if (mediaType == null && language == null && encoding == null) { | |
throw new IllegalArgumentException("mediaType, language, encoding all null"); | |
} | |
this.encoding = encoding; | |
this.language = (language == null) ? null : new Locale(language, country); | |
this.mediaType = mediaType; | |
} | |
public Variant(MediaType mediaType, String language, String country, String languageVariant, String encoding) { | |
if (mediaType == null && language == null && encoding == null) { | |
throw new IllegalArgumentException("mediaType, language, encoding all null"); | |
} | |
this.encoding = encoding; | |
this.language = (language == null) ? null : new Locale(language, country, languageVariant); | |
this.mediaType = mediaType; | |
} | |
public Variant(MediaType mediaType, Locale language, String encoding) { | |
if (mediaType == null && language == null && encoding == null) { | |
throw new IllegalArgumentException("mediaType, language, encoding all null"); | |
} | |
this.encoding = encoding; | |
this.language = language; | |
this.mediaType = mediaType; | |
} | |
public Locale getLanguage() { | |
return language; | |
} | |
public String getLanguageString() { | |
return (language == null) ? null : language.toString(); | |
} | |
public MediaType getMediaType() { | |
return mediaType; | |
} | |
public String getEncoding() { | |
return encoding; | |
} | |
public static VariantListBuilder mediaTypes(MediaType... mediaTypes) { | |
VariantListBuilder b = VariantListBuilder.newInstance(); | |
b.mediaTypes(mediaTypes); | |
return b; | |
} | |
public static VariantListBuilder languages(Locale... languages) { | |
VariantListBuilder b = VariantListBuilder.newInstance(); | |
b.languages(languages); | |
return b; | |
} | |
public static VariantListBuilder encodings(String... encodings) { | |
VariantListBuilder b = VariantListBuilder.newInstance(); | |
b.encodings(encodings); | |
return b; | |
} | |
@Override | |
public int hashCode() { | |
int hash = 7; | |
hash = 29 * hash + (this.language != null ? this.language.hashCode() : 0); | |
hash = 29 * hash + (this.mediaType != null ? this.mediaType.hashCode() : 0); | |
hash = 29 * hash + (this.encoding != null ? this.encoding.hashCode() : 0); | |
return hash; | |
} | |
@Override | |
public boolean equals(Object obj) { | |
if (obj == null) { | |
return false; | |
} | |
if (getClass() != obj.getClass()) { | |
return false; | |
} | |
final Variant other = (Variant) obj; | |
if (this.language != other.language && (this.language == null || !this.language.equals(other.language))) { | |
return false; | |
} | |
if (this.mediaType != other.mediaType && (this.mediaType == null || !this.mediaType.equals(other.mediaType))) { | |
return false; | |
} | |
return this.encoding == other.encoding || (this.encoding != null && this.encoding.equals(other.encoding)); | |
} | |
@Override | |
public String toString() { | |
StringWriter w = new StringWriter(); | |
w.append("Variant[mediaType="); | |
w.append(mediaType == null ? "null" : mediaType.toString()); | |
w.append(", language="); | |
w.append(language == null ? "null" : language.toString()); | |
w.append(", encoding="); | |
w.append(encoding == null ? "null" : encoding); | |
w.append("]"); | |
return w.toString(); | |
} | |
public static abstract class VariantListBuilder { | |
protected VariantListBuilder() { | |
} | |
public static VariantListBuilder newInstance() { | |
return RuntimeDelegate.getInstance().createVariantListBuilder(); | |
} | |
public abstract List<Variant> build(); | |
public abstract VariantListBuilder add(); | |
public abstract VariantListBuilder languages(Locale... languages); | |
public abstract VariantListBuilder encodings(String... encodings); | |
public abstract VariantListBuilder mediaTypes(MediaType... mediaTypes); | |
} | |
} |