/** * Sets the encoding preferences. Note that when used with HTTP connectors, * this property maps to the "Accept-Encoding" header. * * @param acceptedEncodings * The encoding preferences. */ public void setAcceptedEncodings( List<Preference<Encoding>> acceptedEncodings) { synchronized (this) { List<Preference<Encoding>> ac = getAcceptedEncodings(); ac.clear(); ac.addAll(acceptedEncodings); } }
/** * Returns the preferred encoding among a list of supported ones, based on * the client preferences. * * @param supported * The supported encodings. * @return The preferred encoding. */ public Encoding getPreferredEncoding(List<Encoding> supported) { return getPreferredMetadata(supported, getAcceptedEncodings()); }
/** * Returns the enriched list of encoding preferences. * * @return The enriched list of encoding preferences. */ protected List<Preference<Encoding>> getEncodingPrefs() { return getRequest().getClientInfo().getAcceptedEncodings(); }
/** * Parses encoding preferences from a header. * * @param acceptEncodingHeader * The header to parse. * @param clientInfo * The client info to update. */ @SuppressWarnings({ "unchecked", "rawtypes" }) public static void addEncodings(String acceptEncodingHeader, ClientInfo clientInfo) { if (acceptEncodingHeader != null) { PreferenceReader pr = new PreferenceReader( PreferenceReader.TYPE_ENCODING, acceptEncodingHeader); pr.addValues(clientInfo.getAcceptedEncodings()); } else { clientInfo.getAcceptedEncodings().add( new Preference(Encoding.IDENTITY)); } }
/** * Updates the client info with the given metadata. It clears existing * preferences for the same type of metadata if necessary. * * @param clientInfo * The client info to update. * @param metadata * The metadata to use. */ private void updateMetadata(ClientInfo clientInfo, Metadata metadata) { if (metadata != null) { if (metadata instanceof CharacterSet) { clientInfo.getAcceptedCharacterSets().clear(); clientInfo.getAcceptedCharacterSets().add( new Preference<CharacterSet>((CharacterSet) metadata)); } else if (metadata instanceof Encoding) { clientInfo.getAcceptedEncodings().clear(); clientInfo.getAcceptedEncodings().add( new Preference<Encoding>((Encoding) metadata)); } else if (metadata instanceof Language) { clientInfo.getAcceptedLanguages().clear(); clientInfo.getAcceptedLanguages().add( new Preference<Language>((Language) metadata)); } else if (metadata instanceof MediaType) { clientInfo.getAcceptedMediaTypes().clear(); clientInfo.getAcceptedMediaTypes().add( new Preference<MediaType>((MediaType) metadata)); } } }
/** * Returns the best supported encoding for a given client. * * @param client * The client preferences to use. * @return The best supported encoding for the given call. */ public Encoding getBestEncoding(ClientInfo client) { Encoding bestEncoding = null; Encoding currentEncoding = null; Preference<Encoding> currentPref = null; float bestScore = 0F; for (Iterator<Encoding> iter = getSupportedEncodings().iterator(); iter .hasNext();) { currentEncoding = iter.next(); for (Iterator<Preference<Encoding>> iter2 = client .getAcceptedEncodings().iterator(); iter2.hasNext();) { currentPref = iter2.next(); if (currentPref.getMetadata().equals(Encoding.ALL) || currentPref.getMetadata().equals(currentEncoding)) { // A match was found, compute its score if (currentPref.getQuality() > bestScore) { bestScore = currentPref.getQuality(); bestEncoding = currentEncoding; } } } } return bestEncoding; }
/** * Updates the client preferences to accept the given metadata (media types, * character sets, etc.) with a given quality in addition to existing ones. * * @param metadata * The metadata to accept. * @param quality * The quality to set. */ public void accept(Metadata metadata, float quality) { if (metadata instanceof MediaType) { getAcceptedMediaTypes().add( new Preference<MediaType>((MediaType) metadata, quality)); } else if (metadata instanceof Language) { getAcceptedLanguages().add( new Preference<Language>((Language) metadata, quality)); } else if (metadata instanceof Encoding) { getAcceptedEncodings().add( new Preference<Encoding>((Encoding) metadata, quality)); } else { getAcceptedCharacterSets().add( new Preference<CharacterSet>((CharacterSet) metadata, quality)); } }
/** * Creates a {@link ClientInfo} instance with preferences matching exactly * the current variant. * * @return The new {@link ClientInfo} instance. */ public ClientInfo createClientInfo() { ClientInfo result = new ClientInfo(); if (getCharacterSet() != null) { result.getAcceptedCharacterSets().add( new Preference<CharacterSet>(getCharacterSet())); } if (getEncodings() != null) { for (Encoding encoding : getEncodings()) { result.getAcceptedEncodings().add( new Preference<Encoding>(encoding)); } } if (getLanguages() != null) { for (Language language : getLanguages()) { result.getAcceptedLanguages().add( new Preference<Language>(language)); } } if (getMediaType() != null) { result.getAcceptedMediaTypes().add( new Preference<MediaType>(getMediaType())); } return result; }
headerReplacer.getHeaderNew(), clientInfo); request.getClientInfo().setAcceptedEncodings( clientInfo.getAcceptedEncodings()); break;
.getDefaultCharacterSet(), CharacterSet.ALL); this.encodingPrefs = getEnrichedPreferences( clientInfo.getAcceptedEncodings(), (metadataService == null) ? null : metadataService .getDefaultEncoding(), Encoding.ALL);
for (Preference<Encoding> o : rci.getAcceptedEncodings()) { clientInfo.getAcceptedEncodings().add(o);
&& (request.getClientInfo().getAcceptedEncodings() .isEmpty()) && (request.getClientInfo().getAcceptedLanguages()
&& (request.getClientInfo().getAcceptedEncodings() .isEmpty()) && (request.getClientInfo().getAcceptedLanguages()
if (!clientInfo.getAcceptedEncodings().isEmpty()) { addHeader(HEADER_ACCEPT_ENCODING, PreferenceWriter.write(clientInfo.getAcceptedEncodings()), headers); PreferenceWriter.write(clientInfo.getAcceptedEncodings()), headers);