/** * 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; }