1 47 package com.lowagie.text.pdf.events; 48 49 import java.util.ArrayList ; 50 import java.util.Collections ; 51 import java.util.Comparator ; 52 import java.util.HashMap ; 53 import java.util.List ; 54 import java.util.Map ; 55 import java.util.TreeMap ; 56 57 import com.lowagie.text.Chunk; 58 import com.lowagie.text.Document; 59 import com.lowagie.text.Rectangle; 60 import com.lowagie.text.pdf.PdfPageEventHelper; 61 import com.lowagie.text.pdf.PdfWriter; 62 63 68 public class IndexEvents extends PdfPageEventHelper { 69 70 73 private Map indextag = new TreeMap (); 74 75 82 public void onGenericTag(PdfWriter writer, Document document, 83 Rectangle rect, String text) { 84 indextag.put(text, new Integer (writer.getPageNumber())); 85 } 86 87 91 private long indexcounter = 0; 92 93 96 private List indexentry = new ArrayList (); 97 98 107 public Chunk create(final String text, final String in1, final String in2, 108 final String in3) { 109 110 Chunk chunk = new Chunk(text); 111 String tag = "idx_" + (indexcounter++); 112 chunk.setGenericTag(tag); 113 chunk.setLocalDestination(tag); 114 Entry entry = new Entry(in1, in2, in3, tag); 115 indexentry.add(entry); 116 return chunk; 117 } 118 119 126 public Chunk create(final String text, final String in1) { 127 return create(text, in1, "", ""); 128 } 129 130 138 public Chunk create(final String text, final String in1, final String in2) { 139 return create(text, in1, in2, ""); 140 } 141 142 150 public void create(final Chunk text, final String in1, final String in2, 151 final String in3) { 152 153 String tag = "idx_" + (indexcounter++); 154 text.setGenericTag(tag); 155 text.setLocalDestination(tag); 156 Entry entry = new Entry(in1, in2, in3, tag); 157 indexentry.add(entry); 158 } 159 160 166 public void create(final Chunk text, final String in1) { 167 create(text, in1, "", ""); 168 } 169 170 177 public void create(final Chunk text, final String in1, final String in2) { 178 create(text, in1, in2, ""); 179 } 180 181 184 private Comparator comparator = new Comparator () { 185 186 public int compare(Object arg0, Object arg1) { 187 Entry en1 = (Entry) arg0; 188 Entry en2 = (Entry) arg1; 189 190 int rt = 0; 191 if (en1.getIn1() != null && en2.getIn1() != null) { 192 if ((rt = en1.getIn1().compareToIgnoreCase(en2.getIn1())) == 0) { 193 if (en1.getIn2() != null && en2.getIn2() != null) { 195 if ((rt = en1.getIn2() 196 .compareToIgnoreCase(en2.getIn2())) == 0) { 197 if (en1.getIn3() != null && en2.getIn3() != null) { 199 rt = en1.getIn3().compareToIgnoreCase( 200 en2.getIn3()); 201 } 202 } 203 } 204 } 205 } 206 return rt; 207 } 208 }; 209 210 214 public void setComparator(Comparator aComparator) { 215 comparator = aComparator; 216 } 217 218 222 public List getSortedEntries() { 223 224 Map grouped = new HashMap (); 225 226 for (int i = 0; i < indexentry.size(); i++) { 227 Entry e = (Entry) indexentry.get(i); 228 String key = e.getKey(); 229 230 Entry master = (Entry) grouped.get(key); 231 if (master != null) { 232 master.addPageNumberAndTag(e.getPageNumber(), e.getTag()); 233 } else { 234 e.addPageNumberAndTag(e.getPageNumber(), e.getTag()); 235 grouped.put(key, e); 236 } 237 } 238 239 List sorted = new ArrayList (grouped.values()); 241 Collections.sort(sorted, comparator); 242 return sorted; 243 } 244 245 253 public class Entry { 254 255 258 private String in1; 259 260 263 private String in2; 264 265 268 private String in3; 269 270 273 private String tag; 274 275 278 private List pagenumbers = new ArrayList (); 279 280 283 private List tags = new ArrayList (); 284 285 292 public Entry(final String aIn1, final String aIn2, final String aIn3, 293 final String aTag) { 294 in1 = aIn1; 295 in2 = aIn2; 296 in3 = aIn3; 297 tag = aTag; 298 } 299 300 304 public String getIn1() { 305 return in1; 306 } 307 308 312 public String getIn2() { 313 return in2; 314 } 315 316 320 public String getIn3() { 321 return in3; 322 } 323 324 328 public String getTag() { 329 return tag; 330 } 331 332 336 public int getPageNumber() { 337 int rt = -1; 338 Integer i = (Integer ) indextag.get(tag); 339 if (i != null) { 340 rt = i.intValue(); 341 } 342 return rt; 343 } 344 345 350 public void addPageNumberAndTag(final int number, final String tag) { 351 pagenumbers.add(new Integer (number)); 352 tags.add(tag); 353 } 354 355 359 public String getKey() { 360 return in1 + "!" + in2 + "!" + in3; 361 } 362 363 367 public List getPagenumbers() { 368 return pagenumbers; 369 } 370 371 375 public List getTags() { 376 return tags; 377 } 378 379 383 public String toString() { 384 StringBuffer buf = new StringBuffer (); 385 buf.append(in1).append(' '); 386 buf.append(in2).append(' '); 387 buf.append(in3).append(' '); 388 for (int i = 0; i < pagenumbers.size(); i++) { 389 buf.append(pagenumbers.get(i)).append(' '); 390 } 391 return buf.toString(); 392 } 393 } 394 } | Popular Tags |