/* * 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; } }