annotate common/src/main/java/digilib/util/NumRange.java @ 1158:2ee261676828 default tip

better out-of-the box experience: * digilib works without config files using sensible defaults * new sample images folder used by default * config files moved to templates
author robcast
date Tue, 19 Feb 2013 17:32:25 +0100
parents 7779b37d1d05
children
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 */
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 541
diff changeset
4 package digilib.util;
533
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]);
541
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
62 if (intervals.length == 1) {
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
63 // optimized case of just one interval
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
64 this.start = start;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
65 this.end = end;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
66 this.list = null;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
67 return;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
68 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
69 for (int i = start; i <= end; i++) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
70 // add all numbers to list
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
71 pgs.add(i);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
72 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
73 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
74 // second number missing: range to infinity
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
75 pgs.add(start);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
76 pgs.add(Integer.MAX_VALUE);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
77 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
78 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
79 // single number
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
80 pgs.add(Integer.valueOf(interval));
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
81 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
82 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
83 if (intervals.length > 1) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
84 Collections.sort(pgs);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
85 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
86 list = pgs;
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 public int getStart() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
90 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
91 return start;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
92 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
93 return list.get(0);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
94 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
95 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
96
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
97 public int getEnd() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
98 Integer last;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
99 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
100 last = end;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
101 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
102 last = list.get(list.size() - 1);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
103 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
104 if (maxnum == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
105 return last;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
106 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
107 return Math.min(last, maxnum);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
108 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
109 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
110
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
111 public Iterator<Integer> iterator() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
112 if (list == null) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
113 // return count-based iterator
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
114 return new Iterator<Integer>() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
115 // anonymous inner Iterator class
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
116 private int num = getStart();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
117 private int end = getEnd();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
118
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
119 public boolean hasNext() {
541
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
120 return (num <= end);
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
121 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
122
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
123 public Integer next() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
124 return num++;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
125 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
126
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
127 public void remove() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
128 // don't do this
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
129 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
130 };
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
131 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
132 // return list-based iterator
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
133 return new Iterator<Integer>() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
134 // anonymous inner Iterator class
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
135 private int listidx = 0;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
136 private int listend = list.size();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
137 private int num = getStart();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
138 private int end = getEnd();
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
139
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
140 public boolean hasNext() {
541
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
141 return (num <= end);
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
142 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
143
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
144 public Integer next() {
541
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
145 if (listidx < listend - 1) {
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
146 num = list.get(listidx++);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
147 return num;
541
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
148 } else if (listidx == listend - 1) {
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
149 // last element in list
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
150 int n = list.get(listidx++);
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
151 if (n == Integer.MAX_VALUE) {
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
152 // open end -- continue
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
153 num++;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
154 return num++;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
155 } else {
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
156 num = n;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
157 return num++;
f140d5ee8c0b new NumRange class
robcast
parents: 537
diff changeset
158 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
159 } else {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
160 return num++;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
161 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
162 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
163
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
164 public void remove() {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
165 // don't do this
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
166 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
167 };
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
168 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
169 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
170
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
171 public void setMaxnum(Integer maxnum) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
172 this.maxnum = maxnum;
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
173 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
174
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents:
diff changeset
175 }