Changeset 1479


Ignore:
Timestamp:
04/17/11 00:45:09 (13 months ago)
Author:
jharrop
Message:

Alberto's extension to TraversalUtil?, which allows you to define the tag you are interested in as a generic of the visitor class.

Location:
trunk/docx4j/src/main/java/org/docx4j
Files:
4 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/docx4j/src/main/java/org/docx4j/TraversalUtil.java

    r1476 r1479  
     1/* 
     2 *  Copyright 2010-2011, Plutext Pty Ltd. 
     3 *    
     4 *  This file is part of docx4j. 
     5 
     6    docx4j is licensed under the Apache License, Version 2.0 (the "License");  
     7    you may not use this file except in compliance with the License.  
     8 
     9    You may obtain a copy of the License at  
     10 
     11        http://www.apache.org/licenses/LICENSE-2.0  
     12 
     13    Unless required by applicable law or agreed to in writing, software  
     14    distributed under the License is distributed on an "AS IS" BASIS,  
     15    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
     16    See the License for the specific language governing permissions and  
     17    limitations under the License. 
     18 
     19 */ 
    120package org.docx4j; 
    221 
     
    827 
    928import org.apache.log4j.Logger; 
    10 import org.docx4j.dml.picture.Pic; 
    11 import org.docx4j.dml.wordprocessingDrawing.Anchor; 
    12 import org.docx4j.dml.wordprocessingDrawing.Inline; 
    1329import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
     30import org.docx4j.openpackaging.parts.WordprocessingML.CommentsPart; 
     31import org.docx4j.openpackaging.parts.WordprocessingML.EndnotesPart; 
     32import org.docx4j.openpackaging.parts.WordprocessingML.FooterPart; 
     33import org.docx4j.openpackaging.parts.WordprocessingML.FootnotesPart; 
     34import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart; 
    1435import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; 
     36import org.docx4j.openpackaging.parts.relationships.Namespaces; 
     37import org.docx4j.openpackaging.parts.relationships.RelationshipsPart; 
     38import org.docx4j.relationships.Relationship; 
     39import org.docx4j.utils.CompoundTraversalUtilVisitorCallback; 
     40import org.docx4j.utils.SingleTraversalUtilVisitorCallback; 
     41import org.docx4j.utils.TraversalUtilVisitor; 
    1542import org.docx4j.wml.Body; 
     43import org.docx4j.wml.CTFtnEdn; 
    1644import org.docx4j.wml.CTObject; 
    17 import org.docx4j.wml.CTSdtContentRow; 
    1845import org.docx4j.wml.Pict; 
     46import org.docx4j.wml.Comments.Comment; 
     47 
    1948 
    2049/** 
     
    2756 * since visitChildren is not (yet) comprehensive. 
    2857 *  
    29  * @author jharrop 
     58 * @author jharrop, alberto 
    3059 * 
    3160 */ 
     
    345374                } 
    346375        } 
     376         
     377        public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, TraversalUtilVisitor visitor) { 
     378                if (visitor != null) { 
     379                        visit(wmlPackage, bodyOnly, new SingleTraversalUtilVisitorCallback(visitor)); 
     380                } 
     381        } 
     382         
     383        public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, List<TraversalUtilVisitor> visitorList) { 
     384        CompoundTraversalUtilVisitorCallback callback = null; 
     385                if ((visitorList != null) && (!visitorList.isEmpty())) { 
     386                        if (visitorList.size() > 1) { 
     387                                visit(wmlPackage, bodyOnly, new CompoundTraversalUtilVisitorCallback(visitorList)); 
     388                        } 
     389                        else { 
     390                                visit(wmlPackage, bodyOnly, visitorList.get(0)); 
     391                        } 
     392                } 
     393        } 
     394         
     395        public static void visit(WordprocessingMLPackage wmlPackage, boolean bodyOnly, Callback callback) { 
     396        MainDocumentPart mainDocument = null; 
     397        RelationshipsPart relPart = null; 
     398        List<Relationship> relList = null; 
     399        List<Object> elementList = null; 
     400                if ((wmlPackage != null) && (callback != null)) { 
     401                        mainDocument = wmlPackage.getMainDocumentPart(); 
     402                        callback.walkJAXBElements(mainDocument.getJaxbElement().getBody()); 
     403                        if (!bodyOnly) { 
     404                                relPart = mainDocument.getRelationshipsPart(); 
     405                                relList = relPart.getRelationships().getRelationship(); 
     406                                for (Relationship rs:relList) { 
     407                                        elementList = null; 
     408                                        if (Namespaces.HEADER.equals(rs.getType())) { 
     409                                                elementList = ((HeaderPart)relPart.getPart(rs)).getJaxbElement().getEGBlockLevelElts(); 
     410                                        } 
     411                                        else if (Namespaces.FOOTER.equals(rs.getType())) { 
     412                                                elementList = ((FooterPart)relPart.getPart(rs)).getJaxbElement().getEGBlockLevelElts(); 
     413                                        } 
     414                                        else if (Namespaces.ENDNOTES.equals(rs.getType())) { 
     415                                                elementList = new ArrayList(); 
     416                                                for (CTFtnEdn endnote: ((EndnotesPart)relPart.getPart(rs)).getJaxbElement().getEndnote()) { 
     417                                                        elementList.addAll(endnote.getEGBlockLevelElts()); 
     418                                                } 
     419                                        } 
     420                                        else if (Namespaces.FOOTNOTES.equals(rs.getType())) { 
     421                                                elementList = new ArrayList(); 
     422                                                for (CTFtnEdn footnote: ((FootnotesPart)relPart.getPart(rs)).getJaxbElement().getFootnote()) { 
     423                                                        elementList.addAll(footnote.getEGBlockLevelElts()); 
     424                                                } 
     425                                        } 
     426                                        else if (Namespaces.COMMENTS.equals(rs.getType())) { 
     427                                                elementList = new ArrayList(); 
     428                                                for (Comment comment: ((CommentsPart)relPart.getPart(rs)).getJaxbElement().getComment()) { 
     429                                                        elementList.addAll(comment.getEGBlockLevelElts()); 
     430                                                } 
     431                                        } 
     432                                        if ((elementList != null) && (!elementList.isEmpty())) { 
     433                                                System.out.println("Processing target: " + rs.getTarget() + ", type: " + rs.getType()); 
     434                                                callback.walkJAXBElements(elementList); 
     435                                        } 
     436                                } 
     437                        } 
     438                } 
     439        } 
     440         
     441        public static void visit(Object parent, TraversalUtilVisitor visitor) { 
     442                if (visitor != null) { 
     443                        visit(parent, new SingleTraversalUtilVisitorCallback(visitor)); 
     444                } 
     445        } 
     446         
     447        public static void visit(Object parent, List<TraversalUtilVisitor> visitorList) { 
     448        CompoundTraversalUtilVisitorCallback callback = null; 
     449                if ((visitorList != null) && (!visitorList.isEmpty())) { 
     450                        if (visitorList.size() > 1) { 
     451                                visit(parent, new CompoundTraversalUtilVisitorCallback(visitorList)); 
     452                        } 
     453                        else { 
     454                                visit(parent, visitorList.get(0)); 
     455                        } 
     456                } 
     457        } 
     458         
     459        public static void visit(Object parent, Callback callback) { 
     460                if ((parent != null) && (callback != null)) { 
     461                        callback.walkJAXBElements(parent); 
     462                } 
     463        } 
     464 
    347465        // private void describeDrawing( org.docx4j.wml.Drawing d) { 
    348466        //                       
Note: See TracChangeset for help on using the changeset viewer.