Parses a media type from its string representation. @throws IllegalArgumentException if the input is not parsable
(String input)
| 926 | |
| 927 | |
| 928 | public static MediaType parse(String input) { |
| 929 | checkNotNull(input); |
| 930 | Tokenizer tokenizer = new Tokenizer(input); |
| 931 | try { |
| 932 | String type = tokenizer.consumeToken(TOKEN_MATCHER); |
| 933 | tokenizer.consumeCharacter('/'); |
| 934 | String subtype = tokenizer.consumeToken(TOKEN_MATCHER); |
| 935 | ImmutableListMultimap.Builder<String, String> parameters = ImmutableListMultimap.builder(); |
| 936 | while (tokenizer.hasMore()) { |
| 937 | tokenizer.consumeCharacter(';'); |
| 938 | tokenizer.consumeTokenIfPresent(LINEAR_WHITE_SPACE); |
| 939 | String attribute = tokenizer.consumeToken(TOKEN_MATCHER); |
| 940 | tokenizer.consumeCharacter('='); |
| 941 | |
| 942 | final String value; |
| 943 | if ('"' == tokenizer.previewChar()) { |
| 944 | tokenizer.consumeCharacter('"'); |
| 945 | StringBuilder valueBuilder = new StringBuilder(); |
| 946 | while ('"' != tokenizer.previewChar()) { |
| 947 | if ('\\' == tokenizer.previewChar()) { |
| 948 | tokenizer.consumeCharacter('\\'); |
| 949 | valueBuilder.append(tokenizer.consumeCharacter(ascii())); |
| 950 | } else { |
| 951 | valueBuilder.append(tokenizer.consumeToken(QUOTED_TEXT_MATCHER)); |
| 952 | } |
| 953 | } |
| 954 | value = valueBuilder.toString(); |
| 955 | tokenizer.consumeCharacter('"'); |
| 956 | } else { |
| 957 | value = tokenizer.consumeToken(TOKEN_MATCHER); |
| 958 | } |
| 959 | parameters.put(attribute, value); |
| 960 | } |
| 961 | return create(type, subtype, parameters.build()); |
| 962 | } catch (IllegalStateException e) { |
| 963 | throw new IllegalArgumentException("Could not parse '" + input + "'", e); |
| 964 | } |
| 965 | } |
| 966 | |
| 967 | private static final class Tokenizer { |
| 968 | final String input; |
nothing calls this directly
no test coverage detected