Changeset 1725 for trunk/docx4j/src/main/java/org
- Timestamp:
- 12/03/11 12:57:19 (6 months ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j
- Files:
-
- 4 edited
-
TraversalUtil.java (modified) (4 diffs)
-
utils/CompoundTraversalUtilVisitorCallback.java (modified) (2 diffs)
-
utils/SingleTraversalUtilVisitorCallback.java (modified) (1 diff)
-
utils/TraversalUtilVisitor.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/TraversalUtil.java
r1633 r1725 122 122 /** 123 123 * Visits a node in pre order (before its children have been visited). 124 124 125 * 125 126 * A node is visited only if all its parents have been traversed ( … … 396 397 } 397 398 398 public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, TraversalUtilVisitor visitor) { 399 /** 400 * Use this if there is only a single object type (eg just P's) 401 * you are interested in doing something with. 402 * 403 * This method allows you to traverse just the main document 404 * part, or also headers/footers, footnotes/endnotes, and comments 405 * as well. 406 * 407 * @param wmlPackage 408 * @param bodyOnly 409 * @param visitor 410 */ 411 public static void visit(WordprocessingMLPackage wmlPackage, 412 boolean bodyOnly, TraversalUtilVisitor visitor) { 413 399 414 if (visitor != null) { 400 415 visit(wmlPackage, bodyOnly, new SingleTraversalUtilVisitorCallback(visitor)); 401 416 } 402 417 } 418 419 /** 420 * Use this if there is only a single object type (eg just P's) 421 * you are interested in doing something with. 422 * 423 * This method is for traversing an arbitrary WML object (eg a table), as opposed to 424 * eg the main document part, or a header. 425 * 426 * @param parent 427 * @param visitor 428 */ 429 public static void visit(Object parent, TraversalUtilVisitor visitor) { 430 431 if (visitor != null) { 432 visit(parent, new SingleTraversalUtilVisitorCallback(visitor)); 433 } 434 } 403 435 404 public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, List<TraversalUtilVisitor> visitorList) { 405 CompoundTraversalUtilVisitorCallback callback = null; 436 /** 437 * Use this if there is more than one object type (eg Tables and Paragraphs) 438 * you are interested in doing something with during the traversal. 439 * 440 * This method allows you to traverse just the main document 441 * part, or also headers/footers, footnotes/endnotes, and comments 442 * as well. 443 * 444 * @param wmlPackage 445 * @param bodyOnly 446 * @param visitorList 447 */ 448 public static void visit(WordprocessingMLPackage wmlPackage, 449 boolean bodyOnly, List<TraversalUtilVisitor> visitorList) { 450 451 CompoundTraversalUtilVisitorCallback callback = null; 406 452 if ((visitorList != null) && (!visitorList.isEmpty())) { 407 453 if (visitorList.size() > 1) { 408 visit(wmlPackage, bodyOnly, new CompoundTraversalUtilVisitorCallback(visitorList));409 }410 else {454 visit(wmlPackage, bodyOnly, 455 new CompoundTraversalUtilVisitorCallback(visitorList)); 456 } else { 411 457 visit(wmlPackage, bodyOnly, visitorList.get(0)); 412 458 } 413 459 } 414 460 } 415 416 public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, Callback callback) { 417 MainDocumentPart mainDocument = null; 418 RelationshipsPart relPart = null; 419 List<Relationship> relList = null; 420 List<Object> elementList = null; 461 462 /** 463 * Use this if there is more than one object type (eg Tables and Paragraphs) 464 * you are interested in doing something with during the traversal. 465 * 466 * This method is for traversing an arbitrary WML object (eg a table), as opposed to 467 * eg the main document part, or a header. 468 * 469 * @param parent 470 * @param visitorList 471 */ 472 public static void visit(Object parent, 473 List<TraversalUtilVisitor> visitorList) { 474 475 CompoundTraversalUtilVisitorCallback callback = null; 476 if ((visitorList != null) && (!visitorList.isEmpty())) { 477 if (visitorList.size() > 1) { 478 visit(parent, new CompoundTraversalUtilVisitorCallback( 479 visitorList)); 480 } else { 481 visit(parent, visitorList.get(0)); 482 } 483 } 484 } 485 486 public static void visit(Object parent, Callback callback) { 487 488 if ((parent != null) && (callback != null)) { 489 callback.walkJAXBElements(parent); 490 } 491 } 492 493 public static void visit(WordprocessingMLPackage wmlPackage, 494 boolean bodyOnly, Callback callback) { 495 496 MainDocumentPart mainDocument = null; 497 RelationshipsPart relPart = null; 498 List<Relationship> relList = null; 499 List<Object> elementList = null; 500 421 501 if ((wmlPackage != null) && (callback != null)) { 422 502 mainDocument = wmlPackage.getMainDocumentPart(); … … 425 505 relPart = mainDocument.getRelationshipsPart(); 426 506 relList = relPart.getRelationships().getRelationship(); 427 for (Relationship rs :relList) {507 for (Relationship rs : relList) { 428 508 elementList = null; 429 509 if (Namespaces.HEADER.equals(rs.getType())) { 430 elementList = ((HeaderPart) relPart.getPart(rs)).getJaxbElement().getEGBlockLevelElts();431 }432 else if (Namespaces.FOOTER.equals(rs.getType())) {433 elementList = ((FooterPart) relPart.getPart(rs)).getJaxbElement().getEGBlockLevelElts();434 }435 else if (Namespaces.ENDNOTES.equals(rs.getType())) {510 elementList = ((HeaderPart) relPart.getPart(rs)) 511 .getJaxbElement().getContent(); 512 } else if (Namespaces.FOOTER.equals(rs.getType())) { 513 elementList = ((FooterPart) relPart.getPart(rs)) 514 .getJaxbElement().getContent(); 515 } else if (Namespaces.ENDNOTES.equals(rs.getType())) { 436 516 elementList = new ArrayList(); 437 for (CTFtnEdn endnote: ((EndnotesPart)relPart.getPart(rs)).getJaxbElement().getEndnote()) { 517 for (CTFtnEdn endnote : ((EndnotesPart) relPart 518 .getPart(rs)).getJaxbElement().getEndnote()) { 438 519 elementList.addAll(endnote.getEGBlockLevelElts()); 439 520 } 440 } 441 else if (Namespaces.FOOTNOTES.equals(rs.getType())) { 521 } else if (Namespaces.FOOTNOTES.equals(rs.getType())) { 442 522 elementList = new ArrayList(); 443 for (CTFtnEdn footnote: ((FootnotesPart)relPart.getPart(rs)).getJaxbElement().getFootnote()) { 523 for (CTFtnEdn footnote : ((FootnotesPart) relPart 524 .getPart(rs)).getJaxbElement().getFootnote()) { 444 525 elementList.addAll(footnote.getEGBlockLevelElts()); 445 526 } 446 } 447 else if (Namespaces.COMMENTS.equals(rs.getType())) { 527 } else if (Namespaces.COMMENTS.equals(rs.getType())) { 448 528 elementList = new ArrayList(); 449 for (Comment comment: ((CommentsPart)relPart.getPart(rs)).getJaxbElement().getComment()) { 529 for (Comment comment : ((CommentsPart) relPart 530 .getPart(rs)).getJaxbElement().getComment()) { 450 531 elementList.addAll(comment.getEGBlockLevelElts()); 451 532 } 452 533 } 453 534 if ((elementList != null) && (!elementList.isEmpty())) { 454 System.out.println("Processing target: " + rs.getTarget() + ", type: " + rs.getType()); 535 System.out.println("Processing target: " 536 + rs.getTarget() + ", type: " + rs.getType()); 455 537 callback.walkJAXBElements(elementList); 456 538 } … … 460 542 } 461 543 462 public static void visit(Object parent, TraversalUtilVisitor visitor) {463 if (visitor != null) {464 visit(parent, new SingleTraversalUtilVisitorCallback(visitor));465 }466 }467 468 public static void visit(Object parent, List<TraversalUtilVisitor> visitorList) {469 CompoundTraversalUtilVisitorCallback callback = null;470 if ((visitorList != null) && (!visitorList.isEmpty())) {471 if (visitorList.size() > 1) {472 visit(parent, new CompoundTraversalUtilVisitorCallback(visitorList));473 }474 else {475 visit(parent, visitorList.get(0));476 }477 }478 }479 480 public static void visit(Object parent, Callback callback) {481 if ((parent != null) && (callback != null)) {482 callback.walkJAXBElements(parent);483 }484 }485 486 544 // private void describeDrawing( org.docx4j.wml.Drawing d) { 487 545 // -
trunk/docx4j/src/main/java/org/docx4j/utils/CompoundTraversalUtilVisitorCallback.java
r1479 r1725 6 6 import java.util.Map; 7 7 8 /** @author alberto */ 9 public class CompoundTraversalUtilVisitorCallback extends AbstractTraversalUtilVisitorCallback { 8 /** 9 * Use this if there is more than one object type (eg Tables and Paragraphs) 10 * you are interested in doing something with during the traversal. 11 * 12 * @author alberto */ 13 public class CompoundTraversalUtilVisitorCallback extends 14 AbstractTraversalUtilVisitorCallback { 15 10 16 Map<Class, List<TraversalUtilVisitor>> visitorMap = null; 11 12 public CompoundTraversalUtilVisitorCallback(List<TraversalUtilVisitor> visitorList) { 17 18 public CompoundTraversalUtilVisitorCallback( 19 List<TraversalUtilVisitor> visitorList) { 20 13 21 visitorMap = setupTraversalVistorMap(visitorList); 22 } 23 24 protected Map<Class, List<TraversalUtilVisitor>> setupTraversalVistorMap( 25 List<TraversalUtilVisitor> visitorList) { 14 26 15 } 16 17 protected Map<Class, List<TraversalUtilVisitor>> setupTraversalVistorMap(List<TraversalUtilVisitor> visitorList) { 18 Map<Class, List<TraversalUtilVisitor>> ret = new HashMap<Class, List<TraversalUtilVisitor>>(); 19 Class visitorClass = null; 20 List<TraversalUtilVisitor> classVisitorList = null; 21 for (TraversalUtilVisitor visitor:visitorList) { 27 Map<Class, List<TraversalUtilVisitor>> ret = new HashMap<Class, List<TraversalUtilVisitor>>(); 28 Class visitorClass = null; 29 List<TraversalUtilVisitor> classVisitorList = null; 30 for (TraversalUtilVisitor visitor : visitorList) { 22 31 visitorClass = findClassParameter(visitor.getClass()); 23 32 if (visitorClass == null) { 24 throw new IllegalArgumentException("Can't identify the parameter class of the visitor " + visitor.getClass().getName()); 33 throw new IllegalArgumentException( 34 "Can't identify the parameter class of the visitor " 35 + visitor.getClass().getName()); 25 36 } 26 37 classVisitorList = ret.get(visitorClass); … … 33 44 return ret; 34 45 } 35 46 36 47 @Override 37 48 protected List<Object> apply(Object child, Object parent, List siblings) { 38 List<TraversalUtilVisitor> classVisitorList = visitorMap.get(child.getClass()); 49 50 List<TraversalUtilVisitor> classVisitorList = visitorMap.get(child 51 .getClass()); 39 52 if (classVisitorList != null) { 40 for (TraversalUtilVisitor visitor :classVisitorList) {53 for (TraversalUtilVisitor visitor : classVisitorList) { 41 54 visitor.apply(child, parent, siblings); 42 55 } -
trunk/docx4j/src/main/java/org/docx4j/utils/SingleTraversalUtilVisitorCallback.java
r1479 r1725 3 3 import java.util.List; 4 4 5 /** @author alberto */ 5 /** 6 * Use this if there is only a single object type (eg just P's) 7 * you are interested in doing something with. 8 * 9 * @author alberto */ 6 10 public class SingleTraversalUtilVisitorCallback extends AbstractTraversalUtilVisitorCallback { 11 7 12 protected TraversalUtilVisitor visitor = null; 8 13 protected Class visitorClass = null; -
trunk/docx4j/src/main/java/org/docx4j/utils/TraversalUtilVisitor.java
r1479 r1725 22 22 import java.util.List; 23 23 24 /* Doing this as a class instead of an interface ensures that it is 25 * part of the inheritance hierarchy. 24 /** 26 25 * 26 * Extend this class to specify what should be done when a 27 * particular object (eg P or Table) is visited during the 28 * traversal. 29 * 27 30 * @author alberto 28 31 */ 29 32 public abstract class TraversalUtilVisitor<T> { 33 // Doing this as a class instead of an interface ensures that it is part of the inheritance hierarchy. 34 30 35 /** 31 36 *
Note: See TracChangeset
for help on using the changeset viewer.
