Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.docx4j.model.structure;
  
  /*
   * Inspired/converted from org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy,
   *  which
   *  
   *  ====================================================================
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You 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.
 ==================================================================== */
 
 
 import java.util.List;
 
 
 public class HeaderFooterPolicy {
 
 	protected static Logger log = LoggerFactory.getLogger(HeaderFooterPolicy.class);	
 	
 	private HeaderPart firstHeader;  // Need this so it can be copied in next section, even if not used in this one
 	
 	private HeaderPart evenHeader;
 	private FooterPart evenFooter;
 	
 
 	//dummyHeader and dummyFooter are only used when evenAndOddHeaders == true.
 	//they should only be used in "read-mode" and never changed
 	//they are not added to the rels
 	private static Object dummyHeaderFooterMutex = new Object();
 	private static HeaderPart dummyHeader;
 	private static FooterPart dummyFooter;
 	
 	/* "same as previous" functionality:
 	 * 
 	 * When "same as previous" is set, the sectPr Word emits contains 
 	 * no w:headerReference at all. Absence of such implies settings 
 	 * are inherited from the previous sectPr.
 	 * 
 	 * In the Word UI, you can change headers in either section, and
 	 * see them reflected in the other.
 	 * 
 	 * This does not apply to a first page header.  That remains 
 	 * independent! 
 	 * 
 	 * If you say you want no header in a sectPr, Word inserts something like:
 	 * 
 	 *   <w:sectPr><w:headerReference w:type="default" r:id="rId8"/>
 	 *   
 	 * with that w:hdr containing an empty paragraph. 
 	 * 
 	 * Note that "same as previous" in header behaves independently from 
 	 * footer.
 	 * 
 	 * 
 	 */
 	
 	private HeaderFooterPolicy() {}

Figures out the policy for the given section, and creates any header and footer objects as required.
 
 	public HeaderFooterPolicy(SectPr sectPrHeaderFooterPolicy previousHF
 			RelationshipsPart relsBooleanDefaultTrue evenAndOddHeaders
 //		throws Exception
		{
		// Grab what headers and footers have been defined		
		if (sectPr == null) {
			.debug("No headers/footers in this sectPr");
			return;
		}
		if (previousHF==nullpreviousHFnew HeaderFooterPolicy();
		List<CTRelhdrFtrRefs = sectPr.getEGHdrFtrReferences();
		BooleanDefaultTrue titlePage = sectPr.getTitlePg();
		// Headers. 
		// Init from previousHF
		   = previousHF.firstHeader;
		if (titlePage!=null && titlePage.isVal() ) {
			   = previousHF.firstHeader;
		}
		 = previousHF.defaultHeader;
		    =  previousHF.evenHeader
		// and overwrite with whatever we have
		// specific to this sectPr
		setHeaderReferences(hdrFtrRefsrelstitlePage );
		// Now, same for Footers. 
		// Init from previousHF
		   = previousHF.firstFooter;
		if (titlePage!=null && titlePage.isVal() ) {
			   = previousHF.firstFooter;
		}
		 = previousHF.defaultFooter;
		    =  previousHF.evenFooter
		// and overwrite with whatever we have
		// specific to this sectPr
		setFooterReferences(hdrFtrRefsrelstitlePage );
		if ((titlePage != null) && (titlePage.isVal())) {
			if ( == null) {
			}
			if ( == null) {
			}
		}
		if (evenAndOddHeaders == null) {
			.debug("evenAndOddHeader setting missing; defaults to false");
			// per spec, assume false, so use odd only:-
			//Any even header/footer will be ignored
			//As the setting is on the document level it is not necessary to
			//keep any defined header/footer for inheritance
			 = null;
			 = null;
else {
			.debug("evenAndOddHeader: "evenAndOddHeaders.isVal());
			if (evenAndOddHeaders.isVal()) {
				// If true, per the spec, use both even and odd
				//If there is only a default/odd header/footer present, then 
				//the even header/footer is always a dummy empty header/footer
				if ( == null) {
				}
				if ( == null) {
				}
			}
			else {
				// Per spec, use odd only.  Any even header/footer will be ignored
				//As the setting is on the document level it is not necessary to
				//keep any defined header/footer for inheritance
				 = null;
				 = null;
			}
		}
	}
		if ( == null) {
		}
		return ;
	}
		if ( == null) {
		}
		return ;
	}
	private void createDummyHeaderFooter() {
		synchronized () {
			if ( == null) {
				ObjectFactory factory = new ObjectFactory();
				try {
					 = new HeaderPart(new PartName("/word/dummyheader.xml"));
					 = new FooterPart(new PartName("/word/dummyfooter.xml"));
catch (InvalidFormatException e) {
					//should not happen
				}
			}
		}
	}
//	private boolean hasHdrRef(List<CTRel> hdrFtrRefs) {
//		
//		if (hdrFtrRefs==null) return false;
//		for (CTRel rel : hdrFtrRefs) {
//			if (rel instanceof HeaderReference ) return true; 
//		}
//		return false;
//	}
//	private boolean hasFtrRef(List<CTRel> hdrFtrRefs) {
//		
//		if (hdrFtrRefs==null) return false;
//		for (CTRel rel : hdrFtrRefs) {
//			if (rel instanceof FooterReference ) return true; 
//		}
//		return false;
//	}
	private void setHeaderReferences(List<CTRelhdrFtrRefsRelationshipsPart rels,
			BooleanDefaultTrue titlePage) {
		for (CTRel rel : hdrFtrRefs) {
			String relId = rel.getId();
			.debug("for h|f relId: " + relId);
			Part part = rels.getPart(relId);
			if (rel instanceof HeaderReference  ) {
				HeaderReference headerReference = (HeaderReference)rel;
				if (headerReference.getType() == .) {
					if (titlePage!=null && titlePage.isVal()) {
						.debug("setting first page header");
else if (headerReference.getType() == .) {
					.debug("setting even page header");
					 =  (HeaderPart)part
				}  else {
					.debug("setting default page header");
				}
			}
		}
	}
	private void setFooterReferences(List<CTRelhdrFtrRefsRelationshipsPart rels,
			BooleanDefaultTrue titlePage) {
		for (CTRel rel : hdrFtrRefs) {
			String relId = rel.getId();
			.debug("for h|f relId: " + relId);
			Part part = rels.getPart(relId);
			if (rel instanceof FooterReference  ) {
				FooterReference footerReference = (FooterReference)rel;
				if (footerReference.getType() == .) {
					if (titlePage!=null && titlePage.isVal()) {								
						.debug("setting first page footer");
					}
else if (footerReference.getType() == .) {
					.debug("setting even page footer");
					 =  (FooterPart)part
				}  else {
					.debug("setting default page footer");
				}
			}
		}
	}
	}
	}
		return ;
	}
		return ;
	}
If an even header is present this is the odd header otherwise it is both, even and odd header
	}
If an even footer is present this is the odd footer otherwise it is both, even and odd footer
	}

Get the header that applies to the given (1 based) page.

Parameters:
pageNumber The one based page number
	public HeaderPart getHeader(int pageNumber) {
		if(pageNumber == 1 &&  != null) {
		}
		if(pageNumber % 2 == 0 &&  != null) {
			return ;
		}
	}
Get the footer that applies to the given (1 based) page.

Parameters:
pageNumber The one based page number
	public FooterPart getFooter(int pageNumber) {
		if(pageNumber == 1 &&  != null) {
		}
		if(pageNumber % 2 == 0 &&  != null) {
			return ;
		}
	}
New to GrepCode? Check out our FAQ X