blob: 91f8160d2c00a6973f5a2531a931e4bae2f37701 [file] [log] [blame]
/*
* 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 javax.ws.rs.core;
import java.util.Locale;
import javax.ws.rs.ext.RuntimeDelegate;
public class Variant {
public abstract static class VariantListBuilder {
protected VariantListBuilder() {
/* do nothing */
}
public abstract Variant.VariantListBuilder add();
public abstract java.util.List<Variant> build();
public abstract Variant.VariantListBuilder encodings(String... values);
public abstract Variant.VariantListBuilder languages(Locale... values);
public abstract Variant.VariantListBuilder mediaTypes(MediaType... values);
private final static RuntimeDelegate delegate = RuntimeDelegate.getInstance();
public static Variant.VariantListBuilder newInstance() {
return delegate.createVariantListBuilder();
}
}
public static Variant.VariantListBuilder encodings(String... values) {
return VariantListBuilder.newInstance().encodings(values);
}
public static Variant.VariantListBuilder languages(java.util.Locale... values) {
return VariantListBuilder.newInstance().languages(values);
}
public static Variant.VariantListBuilder mediaTypes(MediaType... values) {
return VariantListBuilder.newInstance().mediaTypes(values);
}
private final MediaType mediaType;
private final Locale language;
private final String encoding;
public Variant(MediaType mediaType, Locale language, String encoding) {
if (mediaType == null && language == null && encoding == null) {
throw new IllegalArgumentException();
}
this.mediaType = mediaType;
this.language = language;
this.encoding = encoding;
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Variant)) {
return false;
}
Variant other = (Variant)obj;
String encoding = getEncoding();
if (encoding == null) {
if (other.getEncoding() != null) {
return false;
}
} else {
if (!encoding.equals(other.getEncoding())) {
return false;
}
}
Locale locale = getLanguage();
if (locale == null) {
if (other.getLanguage() != null) {
return false;
}
} else {
if (!locale.equals(other.getLanguage())) {
return false;
}
}
MediaType mt = getMediaType();
if (mt == null) {
if (other.getMediaType() != null) {
return false;
}
} else {
return mt.equals(other.getMediaType());
}
return true;
}
public String getEncoding() {
return encoding;
}
public java.util.Locale getLanguage() {
return language;
}
public MediaType getMediaType() {
return mediaType;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + ((language == null) ? 0 : language.hashCode());
result = 31 * result + ((encoding == null) ? 0 : encoding.hashCode());
result = 31 * result + ((mediaType == null) ? 0 : mediaType.hashCode());
return result;
}
}