Beispiel #1
0
  /**
   * 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;
  }
Beispiel #2
0
  /**
   * Constructor.
   *
   * @param clientInfo
   * @param metadataService
   */
  public Conneg(ClientInfo clientInfo, MetadataService metadataService) {
    this.clientInfo = clientInfo;
    this.metadataService = metadataService;

    if (clientInfo != null) {
      // Get the enriched user preferences
      this.languagePrefs =
          getEnrichedPreferences(
              clientInfo.getAcceptedLanguages(),
              (metadataService == null) ? null : metadataService.getDefaultLanguage(),
              Language.ALL);
      this.mediaTypePrefs =
          getEnrichedPreferences(
              clientInfo.getAcceptedMediaTypes(),
              (metadataService == null) ? null : metadataService.getDefaultMediaType(),
              MediaType.ALL);
      this.characterSetPrefs =
          getEnrichedPreferences(
              clientInfo.getAcceptedCharacterSets(),
              (metadataService == null) ? null : metadataService.getDefaultCharacterSet(),
              CharacterSet.ALL);
      this.encodingPrefs =
          getEnrichedPreferences(
              clientInfo.getAcceptedEncodings(),
              (metadataService == null) ? null : metadataService.getDefaultEncoding(),
              Encoding.ALL);
    }
  }
  /**
   * 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;
  }