package org.etk.core.rest.impl.header; import java.text.ParseException; import java.util.Locale; import java.util.Map; public class AcceptLanguageHeaderDelegate extends AbstractHeaderDelegate<AcceptLanguage> { /** * {@inheritDoc} */ @Override public Class<AcceptLanguage> support() { return AcceptLanguage.class; } /** * {@inheritDoc} */ public AcceptLanguage fromString(String header) { if (header == null) throw new IllegalArgumentException(); try { header = HeaderHelper.removeWhitespaces(header); String tag; Map<String, String> m = null; int p = header.indexOf(';'); if (p != -1 && p < header.length() - 1) { // header has quality value tag = header.substring(0, p); m = new HeaderParameterParser().parse(header); } else { // no quality value tag = header; } p = tag.indexOf('-'); String primaryTag; String subTag = null; if (p != -1 && p < tag.length() - 1) { // has sub-tag primaryTag = tag.substring(0, p); subTag = tag.substring(p + 1); } else { // no sub-tag primaryTag = tag; } if (m == null) // no quality value return new AcceptLanguage(new Locale(primaryTag, subTag != null ? subTag : "")); else return new AcceptLanguage(new Locale(primaryTag, subTag != null ? subTag : ""), HeaderHelper.parseQualityValue(m.get(QualityValue.QVALUE))); } catch (ParseException e) { throw new IllegalArgumentException("Accept language header malformed"); } } /** * {@inheritDoc} */ public String toString(AcceptLanguage language) { throw new UnsupportedOperationException("Accepted language header used only for request."); } }