Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.docx4j.openpackaging.parts.WordprocessingML;
  
  import java.util.List;
  
  
 
 	
 	private static Logger log = LoggerFactory.getLogger(MainDocumentPartMceIgnorableHelper.class);
 		
 	protected String getMceIgnorable(Body body) {
 		
 		List<Objectcontent = body.getContent();
 		
 		// To avoid the traversing a large docx,
 		// we'll try to use a hack here.
 		// The idea is to force JAXB to include
 		// namespace declarations for w14 and w15, by
 		// using them in an innocuous manner.
 		// It works by adding the following to the first
 		// paragraph encountered:
 		
 		// <w:p w14:textId="fdcbd571" w14:paraId="fdcbd571" >
 		//  <w:pPr>
 		//    <w15:collapsed w:val="false"/>
 		//  </w:pPr>
 		//
 		// If this turns out to cause problems, it could be
 		// made configurable in docx4j.properties
 
 		if (content.size()==0) {
 			return null;
 		}
 		
 		P p = null;
 		for (Object o : content ) {
 			if (o instanceof P ) {
 				p = (P)o;
 				break;
 			}
 		}
 		
 		if (p==null) {
 			// No top level paragraph, so
 			// do the work of traversing the document
 			
 			.debug("traversing for w14, w15");
 			
 			if (body.getSectPr()!=null
 				&& body.getSectPr().getFootnoteColumns()!=null) {
 					finder.needW15 = true;													
 			}
 			new TraversalUtil(contentfinder);
 			
 			String mceIgnorableVal = "";
 			if (finder.needW14) {
 				mceIgnorableVal = "w14";
 			}
 			
 			if (finder.needW15) {
 				mceIgnorableVal += " w15";
 			} 
 			
 			return mceIgnorableVal;
 			
 			
 		} else {
 			// The quick hack
 			
 			// For W14, we'll check/set paraId, textId
 			if (p.getParaId()==null) {
 				// Values MUST be greater than 0 and less than 0x80000000
 				// So let's 
 				
 				String uuid = java.util.UUID.randomUUID().toString();
 				// That's 32 digits, but 8'll do nicely
 				uuid = uuid.replace("-""").substring(0, 8);
 				
 				p.setParaId(uuid);
 				p.setTextId(uuid);
 			}
			// For W15, collapse
			PPr ppr = p.getPPr();
			if (ppr==null) {
				ppr = Context.getWmlObjectFactory().createPPr();
				p.setPPr(ppr);
			}
			if (ppr.getCollapsed()==null) {
				BooleanDefaultTrue notCollapsed = new BooleanDefaultTrue(); 
				notCollapsed.setVal(.);
				ppr.setCollapsed(notCollapsed);
			}
		}
		return "w14 w15";
    	
    }
	 /* 
		<xsd:element ref="w14:checkbox"  minOccurs="0"/>
		<xsd:element ref="w14:entityPicker"  minOccurs="0"/>
		*/
	private static final List<Stringw14SdtPrNames = new ArrayList<String>();
	 /* 
		<xsd:element ref="w15:appearance"  minOccurs="0"/>
		<xsd:element ref="w15:color"  minOccurs="0"/>
		<xsd:element ref="w15:repeatingSection"  minOccurs="0"/>
		<xsd:element ref="w15:repeatingSectionItem"  minOccurs="0"/>
		<xsd:element ref="w15:webExtensionCreated"  minOccurs="0"/>
		<xsd:element ref="w15:webExtensionLinked"  minOccurs="0"/>
		<xsd:element ref="w15:dataBinding"  minOccurs="0"/>
		*/
	private static final List<Stringw15SdtPrNames = new ArrayList<String>();
	static {
		.add("checkbox");
		.add("entityPicker");
		.add("appearance");
		.add("repeatingSection");
		.add("repeatingSectionItem");
		.add("webExtensionCreated");
		.add("webExtensionLinked");
		.add("dataBinding");
	}
    private static class IgnorablePrefixFinder extends CallbackImpl {
		boolean needW14 = false;
		boolean needW15 = false;
    	
    	
    	@Override
		public List<Objectapply(Object o) {
    		
    		// NB: the tests in this method have to be comprehensive,
    		// so if support for glow etc is introduced, tests for those
    		// will need to be added
			if (o instanceof org.docx4j.wml.P) {
				P p = (P)o;
				// W14?
				if (p.getParaId()!=null) {
					 = true;
				}
				// W15?
				if (!) {
					PPr ppr = p.getPPr();
					if (ppr!=null) {
						if (ppr.getCollapsed()!=null) {
							 = true;						
						}
						if (ppr.getSectPr()!=null
								&& ppr.getSectPr().getFootnoteColumns()!=null) {
							 = true;													
						}
					}
				}
else if ( o instanceof SdtElement) {
				SdtPr sdtPr = ((SdtElement)o).getSdtPr();
				if (sdtPr!=null) {
					if (contains(sdtPr.getRPrOrAliasOrLock(), "http://schemas.microsoft.com/office/word/2010/wordml")) {
						 = true;
					if (contains(sdtPr.getRPrOrAliasOrLock(), "http://schemas.microsoft.com/office/word/2012/wordml")) {
						 = true;
				}
else if ( o instanceof Tr) {  // TODO does this need to be unwrapped?
				if ( ((Tr)o).getParaId()!=null) {
					 = true;					
				}
else if ( o instanceof CTObject) {  
				if ( ((CTObject)o).getAnchorId()!=null) {
					 = true;					
				}
else if ( o instanceof Pict) {  
				if ( ((Pict)o).getAnchorId()!=null) {
					 = true;					
				}
			return null;
    	}
    	
        private boolean contains(List<ObjectlistString namespaceList<StringelementNames) {
        	
        	for (Object o : list) {
        		
        		if (o instanceof JAXBElement) {
        			QName qname = ((JAXBElement)o).getName();
        			if (namespace.equals(qname.getNamespaceURI())
        					&&  elementNames.contains(qname.getLocalPart())) {
            			return true;        				
        			}
        		}
        	}
        	return false;
        }
    	
    	@Override
		public boolean shouldTraverse(Object o) {
    		
    		if (o instanceof org.docx4j.wml.P) {
    			return false;
    		}
    		
    		if ( && ) {
    			// We know we're done
    			return false;
    		}
    		
    		// Keep going
			return true;
		}
    	
    }
    
New to GrepCode? Check out our FAQ X