Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
     Licensed to Plutext Pty Ltd under one or more contributor license agreements.  
     
   *  This file is part of docx4j.
  
      docx4j is licensed under the Apache License, Version 2.0 (the "License"); 
      you may not use this file except in compliance with the License. 
  
      You may obtain a copy of the License at 
 
         http://www.apache.org/licenses/LICENSE-2.0 
 
     Unless required by applicable law or agreed to in writing, software 
     distributed under the License is distributed on an "AS IS" BASIS, 
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
     See the License for the specific language governing permissions and 
     limitations under the License.
 
  */
 package org.docx4j.convert.out.common;
 
 import java.util.List;
 
 
The …ExporterDelegate generates the html/fo document from the WordprocessingMLPackage. Docx4j supports convert.out via both xslt and non-xslt based approaches. So some …ExporterDelegate use a Xslt transformation; the others use a visitor (…ExporterGenerator)

Since:
3.0
 
 public abstract class AbstractVisitorExporterDelegate<CS extends AbstractConversionSettings, CC extends AbstractWmlConversionContextextends AbstractExporterDelegate<CS, CC> {
 		public AbstractVisitorExporterGenerator<CC> createInstance(CC conversionContextDocument documentNode parentNode);
 	}
 	
 
 	
 		super();
 		this. = generatorFactory;
 	}
 
 
 	public void process(CS conversionSettings, CC conversionContextOutputStream outputStreamthrows Docx4JException {
 	Document document = null;
 	Element documentRoot = null;
 	Element documentRootBody = null;
 	Element sectionRoot = null;
 	Element sectionRootBody = null;
 	Element currentParent = null;
 	Element flow = null;
 
 		conversionContext.setCurrentPartMainDocument(); 
     	document = XmlUtils.neww3cDomDocument();
     	
     	currentParent = documentRoot = createDocumentRoot(conversionContextdocument);
     	document.appendChild(documentRoot);
     	appendDocumentHeader(conversionContextdocumentdocumentRoot); 
     	
     	documentRootBody = createDocumentBody(conversionContextdocumentdocumentRoot);
     	if (documentRootBody != null) {
     		currentParent.appendChild(documentRootBody);
     		currentParent = documentRootBody;
     	}
     	
     	List<ConversionSectionWrappersectionWrappers = conversionContext.getSections().getList();
     	for (int secindex=0; secindex < sectionWrappers.size(); secindex++) {
     		ConversionSectionWrapper sectionWrapper = sectionWrappers.get(secindex);
     		conversionContext.getSections().next();
     		
     		sectionRoot = createSectionRoot(conversionContextdocumentsectionWrappercurrentParent);
     		if (sectionRoot != null) {
     			currentParent.appendChild(sectionRoot);
     			currentParent = sectionRoot;
     		}
     		appendSectionHeader(conversionContextdocumentsectionWrappercurrentParent);
     		sectionRootBody = createSectionBody(conversionContextdocumentsectionWrappercurrentParent);
     		if (sectionRootBody != null) {
     			currentParent.appendChild(sectionRootBody);
     			currentParent = sectionRootBody;
     		}
     		
    		generateBodyContent(conversionContext
    				document
    				sectionWrapper.getContent(), 
    				currentParent);
    		
    		currentParent = sectionRoot;
    		if (currentParent == null) {
    			currentParent = documentRootBody;
    			if (currentParent == null) {
    				currentParent = documentRoot;
    			}
    		}
    		
    		appendSectionFooter(conversionContextdocumentsectionWrappercurrentParent);
    		
    		currentParent = documentRootBody;
    		if (currentParent == null) {
				currentParent = documentRoot;
    		}
    	}
    	
    	appendDocumentFooter(conversionContextdocumentdocumentRoot); 
    	
    	writeDocument(conversionContextdocumentoutputStream);
	}
	protected abstract Element createDocumentRoot(CC conversionContextDocument documentthrows Docx4JException;
	protected void appendDocumentHeader(CC conversionContext
			Document documentElement documentRootthrows Docx4JException {
    	//default no document header, subclasses may change it  	
	}
	protected Element createDocumentBody(CC conversionContext
			Document documentElement documentRoot) {
    	//default noop, that is documentRoot is documentRootBody, subclasses may change it  	
		return null;
	}
	protected Element createSectionRoot(CC conversionContext
			Document document,  
			ConversionSectionWrapper sectionWrapper
			Element currentParentthrows Docx4JException {
    	//default noop, that is documentRoot is sectionRoot or sectionRoot, subclasses may change it  	
		return null;
	}
	protected void appendSectionHeader(CC conversionContextDocument document,
			ConversionSectionWrapper sectionWrapper,
			Element currentParentthrows Docx4JException {
    	//default no section header, subclasses may change it  	
	}
	protected Element createSectionBody(CC conversionContextDocument document
			ConversionSectionWrapper sectionWrapper,
			Element currentParentthrows Docx4JException {
    	//default noop, that is sectionRoot is bodyRoot and 
		//if sectionRoot is null then documentRoot becomes bodyRoot, 
		//subclasses may change it  	
    	return null;
	}
	protected void appendPartContent(CC conversionContextDocument document,
			Part partList<ObjectcontentElement currentParentthrows Docx4JException {
	Part previousPart = conversionContext.getCurrentPart();
		conversionContext.setCurrentPart(part);
    	generateBodyContent(conversionContextdocumentcontentcurrentParent);
    	conversionContext.setCurrentPart(previousPart);
	}	
	protected void generateBodyContent(CC conversionContextDocument document,
			List<ObjectcontentElement currentParentthrows Docx4JException {
			.createInstance(conversionContextdocumentcurrentParent);
		new TraversalUtil(contentgenerator);
	}
	protected void appendSectionFooter(CC conversionContextDocument document,
			ConversionSectionWrapper sectionWrapper,
			Element currentParentthrows Docx4JException {
    	//default no section footer, subclasses may change it  	
	}
	protected void appendDocumentFooter(CC conversionContextDocument document,
			Element documentRootthrows Docx4JException {
    	//default no document footer, subclasses may change it  	
	}
	protected void writeDocument(CC conversionContextDocument documentOutputStream outputStreamthrows Docx4JException {
		Transformer serializer = null;
		try {
			serializer = XmlUtils.getTransformerFactory().newTransformer();
			//serializer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");
			serializer.transformnew DOMSource(document) , new StreamResult(outputStream) );				
catch (Exception e) {
			throw new Docx4JException("Exception writing Document to OutputStream: " + e.getMessage(), e);
		}
	}
New to GrepCode? Check out our FAQ X