package org.etk.core.rest.impl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Variant; import javax.ws.rs.core.Variant.VariantListBuilder; public class VariantListBuilderImpl extends VariantListBuilder { /** * Languages. */ private List<Locale> languages = new ArrayList<Locale>(); /** * Encodings. */ private List<String> encodings = new ArrayList<String>(); /** * Media Types. */ private List<MediaType> mediatypes = new ArrayList<MediaType>(); /** * List of {@link Variant}. */ private List<Variant> variants; /** * {@inheritDoc} */ @Override public VariantListBuilder add() { if (variants == null) variants = new ArrayList<Variant>(); Iterator<MediaType> mediatypesIterator = mediatypes.iterator(); // do iteration at least one time, even all list are empty do { MediaType mediaType = mediatypesIterator.hasNext() ? mediatypesIterator.next() : null; Iterator<Locale> languagesIterator = languages.iterator(); do { Locale language = languagesIterator.hasNext() ? languagesIterator.next() : null; Iterator<String> encodingsIterator = encodings.iterator(); do { String encoding = encodingsIterator.hasNext() ? encodingsIterator.next() : null; variants.add(new Variant(mediaType, language, encoding)); } while (encodingsIterator.hasNext()); } while (languagesIterator.hasNext()); } while (mediatypesIterator.hasNext()); clearAll(); return this; } /** * {@inheritDoc} */ @Override public List<Variant> build() { return variants == null ? variants = new ArrayList<Variant>() : variants; } /** * {@inheritDoc} */ @Override public VariantListBuilder encodings(String... encs) { for (String enc : encs) encodings.add(enc); return this; } /** * {@inheritDoc} */ @Override public VariantListBuilder languages(Locale... langs) { for (Locale lang : langs) languages.add(lang); return this; } /** * {@inheritDoc} */ @Override public VariantListBuilder mediaTypes(MediaType... mediaTypes) { for (MediaType mediaType : mediaTypes) mediatypes.add(mediaType); return this; } /** * Reset builder to default state. */ private void clearAll() { mediatypes.clear(); languages.clear(); encodings.clear(); } }