1 package com.atlassian.plugins.rest.module.filter;
2
3 import java.text.ParseException;
4
5 import com.sun.jersey.core.header.reader.HttpHeaderReader;
6
7
8
9
10 private HttpHeaderReader reader;
11
12 boolean isTerminated;
13
14 public HttpHeaderListAdapter(HttpHeaderReader reader) {
15 this.reader = reader;
16 }
17
18 public void reset() {
19 isTerminated = false;
20 }
21
22
23 @Override
24 public boolean hasNext() {
25 if (isTerminated)
26 return false;
27
28 if (reader.hasNext()) {
29 if (reader.hasNextSeparator(',', true)) {
30 isTerminated = true;
31 return false;
32 } else
33 return true;
34 }
35
36 return false;
37 }
38
39 @Override
40 public boolean hasNextSeparator(char separator, boolean skipWhiteSpace) {
41 if (isTerminated)
42 return false;
43
44 if (reader.hasNextSeparator(',', skipWhiteSpace)) {
45 isTerminated = true;
46 return false;
47 } else
48 return reader.hasNextSeparator(separator, skipWhiteSpace);
49 }
50
51 @Override
52 public Event next() throws ParseException {
53 return next(true);
54 }
55
56 @Override
57 public HttpHeaderReader.Event next(boolean skipWhiteSpace) throws ParseException {
58 return next(skipWhiteSpace, false);
59 }
60
61 @Override
62 public HttpHeaderReader.Event next(boolean skipWhiteSpace, boolean preserveBackslash) throws ParseException {
63 if (isTerminated)
64 throw new ParseException("End of header", getIndex());
65
66 if (reader.hasNextSeparator(',', skipWhiteSpace)) {
67 isTerminated = true;
68 throw new ParseException("End of header", getIndex());
69 }
70
71 return reader.next(skipWhiteSpace, preserveBackslash);
72 }
73
74 @Override
75 public String nextSeparatedString(char startSeparator, char endSeparator) throws ParseException {
76 if (isTerminated)
77 throw new ParseException("End of header", getIndex());
78
79 if (reader.hasNextSeparator(',', true)) {
80 isTerminated = true;
81 throw new ParseException("End of header", getIndex());
82 }
83
84 return reader.nextSeparatedString(startSeparator, endSeparator);
85 }
86
87 @Override
88 public HttpHeaderReader.Event getEvent() {
89 return reader.getEvent();
90 }
91
92 @Override
93 public String getEventValue() {
94 return reader.getEventValue();
95 }
96
97 @Override
98 public String getRemainder() {
99 return reader.getRemainder();
100 }
101
102 @Override
103 public int getIndex() {
104 return reader.getIndex();
105 }
106 }