public HeaderElement[] getElements(){ if(null == elements){ if(Strings.isEmpty(value)){ elements = EMPTY_ELEMENTS; }else{ elements = HeaderParser.parseElements(value).toArray(new HeaderElement[]{}); } } return elements; }
private static HeaderElement parseHeaderElement(final char[] buffer, final Cursor cursor) { if (buffer == null) { throw new IllegalArgumentException("Char array buffer may not be null"); } if (cursor == null) { throw new IllegalArgumentException("Parser cursor may not be null"); } NamedValue<String> nvp = parseNameValuePair(buffer, cursor,ALL_DELIMITERS); Map<String, String> params = null; if (!cursor.atEnd()) { char ch = buffer[cursor.pos - 1]; if (ch != ELEM_DELIMITER) { params = parseParameters(buffer, cursor); } } return new HeaderElement(nvp.getName(), nvp.getValue(), params); }
static List<HeaderElement> parseElements(final char[] buffer, final Cursor cursor) { if (buffer == null) { throw new IllegalArgumentException("Char array buffer may not be null"); } if (cursor == null) { throw new IllegalArgumentException("Parser cursor may not be null"); } List<HeaderElement> elements = new ArrayList<HeaderElement>(); while (!cursor.atEnd()) { HeaderElement element = parseHeaderElement(buffer, cursor); if (!(element.getName().length() == 0 && element.getValue() == null)) { elements.add(element); } } return elements; }
private static Map<String, String> parseParameters(final char[] buffer, final Cursor cursor) { int pos = cursor.pos; int indexTo = cursor.upperBound; while (pos < indexTo) { char ch = buffer[pos]; if (Character.isWhitespace(ch)) { pos++; } else { break; } } cursor.updatePos(pos); if (cursor.atEnd()) { return new HashMap<String, String>(); } Map<String, String> params = HeaderElement.createParametersMap(null); while (!cursor.atEnd()) { NamedValue<String> param = parseNameValuePair(buffer, cursor,ALL_DELIMITERS); params.put(param.getName(), param.getValue()); char ch = buffer[cursor.pos - 1]; if (ch == ELEM_DELIMITER) { break; } } return params; }
static List<HeaderElement> parseElements(String value){ return parseElements(value.toCharArray(),new Cursor(0,value.length())); }