annotate servlet/src/digilib/servlet/NumRange.java @ 537:bd1080df81ad digilibPDF

some cleanup
author casties
date Thu, 26 Aug 2010 17:30:45 +0200
parents 87cb3dc2aa12
children f140d5ee8c0b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
1 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
2 *
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
3 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
4 package digilib.servlet;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
5
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
6 import java.util.ArrayList;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
7 import java.util.Collections;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
8 import java.util.Iterator;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
9 import java.util.List;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
10
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
11 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
12 * @author casties
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
13 *
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
14 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
15 public class NumRange implements Iterable<Integer> {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
16
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
17 private Integer start = 1;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
18 private Integer end = Integer.MAX_VALUE;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
19 private List<Integer> list = null;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
20 private Integer maxnum = null;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
21
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
22 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
23 * @param start
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
24 * @param end
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
25 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
26 public NumRange(Integer start, Integer end) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
27 this.start = start;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
28 this.end = end;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
29 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
30
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
31 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
32 * @param range
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
33 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
34 public NumRange(String range) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
35 parseString(range);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
36 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
37
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
38 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
39 * @param range
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
40 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
41 public NumRange(String range, Integer max) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
42 this.maxnum = max;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
43 parseString(range);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
44 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
45
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
46
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
47 public void parseString(String pages) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
48
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
49 ArrayList<Integer> pgs = new ArrayList<Integer>();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
50
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
51 String intervals[] = pages.split(",");
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
52
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
53 // convert the page-interval-strings into a list containing every single
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
54 // page
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
55 for (String interval : intervals) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
56 if (interval.contains("-")) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
57 String nums[] = interval.split("-");
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
58 int start = Integer.valueOf(nums[0]);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
59 if (nums.length > 1) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
60 // second number is end of range
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
61 int end = Integer.valueOf(nums[1]);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
62 for (int i = start; i <= end; i++) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
63 // add all numbers to list
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
64 pgs.add(i);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
65 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
66 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
67 // second number missing: range to infinity
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
68 pgs.add(start);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
69 pgs.add(Integer.MAX_VALUE);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
70 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
71 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
72 // single number
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
73 pgs.add(Integer.valueOf(interval));
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
74 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
75 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
76 if (intervals.length > 1) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
77 Collections.sort(pgs);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
78 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
79 list = pgs;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
80 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
81
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
82 public int getStart() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
83 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
84 return start;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
85 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
86 return list.get(0);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
87 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
88 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
89
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
90 public int getEnd() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
91 Integer last;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
92 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
93 last = end;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
94 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
95 last = list.get(list.size() - 1);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
96 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
97 if (maxnum == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
98 return last;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
99 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
100 return Math.min(last, maxnum);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
101 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
102 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
103
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
104 public Iterator<Integer> iterator() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
105 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
106 // return count-based iterator
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
107 return new Iterator<Integer>() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
108 // anonymous inner Iterator class
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
109 private int num = getStart();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
110 private int end = getEnd();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
111
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
112 public boolean hasNext() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
113 return (num < end);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
114 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
115
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
116 public Integer next() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
117 return num++;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
118 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
119
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
120 public void remove() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
121 // don't do this
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
122 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
123 };
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
124 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
125 // return list-based iterator
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
126 return new Iterator<Integer>() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
127 // anonymous inner Iterator class
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
128 private int listidx = 0;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
129 private int listend = list.size();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
130 private int num = getStart();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
131 private int end = getEnd();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
132
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
133 public boolean hasNext() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
134 return (num < end);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
135 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
136
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
137 public Integer next() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
138 if (listidx < listend) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
139 num = list.get(listidx++);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
140 return num;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
141 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
142 return num++;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
143 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
144 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
145
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
146 public void remove() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
147 // don't do this
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
148 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
149 };
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
150 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
151 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
152
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
153 public void setMaxnum(Integer maxnum) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
154 this.maxnum = maxnum;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
155 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
156
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
157 }