コード例 #1
0
  /**
   * Returns the list of representation variants associated to a given annotation value,
   * corresponding to either an input or output entity.
   *
   * @param metadataService The metadata service to use.
   * @param annotationValue The entity annotation value.
   * @return A list of variants.
   */
  private List<Variant> getVariants(MetadataService metadataService, String annotationValue) {
    List<Variant> result = null;

    if (annotationValue != null) {
      String[] variants = annotationValue.split("\\|");

      for (String variantValue : variants) {
        Variant variant = null;
        String[] extensions = variantValue.split("\\+");
        List<MediaType> mediaTypes = null;
        List<Language> languages = null;
        CharacterSet characterSet = null;

        for (String extension : extensions) {
          if (extension != null) {
            List<Metadata> metadataList = metadataService.getAllMetadata(extension);

            if (metadataList != null) {
              for (Metadata metadata : metadataList) {
                if (metadata instanceof MediaType) {
                  if (mediaTypes == null) {
                    mediaTypes = new ArrayList<MediaType>();
                  }

                  mediaTypes.add((MediaType) metadata);
                } else if (metadata instanceof Language) {
                  if (languages == null) {
                    languages = new ArrayList<Language>();
                  }

                  languages.add((Language) metadata);
                } else if (metadata instanceof CharacterSet) {
                  if (characterSet == null) {
                    characterSet = (CharacterSet) metadata;
                  } else {
                    Context.getCurrentLogger()
                        .warning(
                            "A representation variant can have only one character set. Please check your annotation value.");
                  }
                }
              }
            }
          }
        }

        // Now build the representation variants
        if (mediaTypes != null) {
          for (MediaType mediaType : mediaTypes) {
            if ((result == null) || (!result.contains(mediaType))) {
              if (result == null) {
                result = new ArrayList<Variant>();
              }

              variant = new Variant(mediaType);

              if (languages != null) {
                variant.getLanguages().addAll(languages);
              }

              if (characterSet != null) {
                variant.setCharacterSet(characterSet);
              }

              result.add(variant);
            }
          }
        }
      }
    }

    return result;
  }