All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.docx4j.model.fields.FldSimpleModel Maven / Gradle / Ivy

Go to download

docx4j is a library which helps you to work with the Office Open XML file format as used in docx documents, pptx presentations, and xlsx spreadsheets.

There is a newer version: 11.4.11
Show newest version
package org.docx4j.model.fields;

import org.docx4j.XmlUtils;
import org.docx4j.wml.CTSimpleField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;

import javax.xml.transform.TransformerException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/** Just a basic model for w:fldSimple that gets used in the 
 *  FldSimpleModelConverter for the conversion to pdf/html
 *  
 *  @see the spec
 * 
 */
public class FldSimpleModel {
	
	private static Logger log = LoggerFactory.getLogger(FldSimpleModel.class);		
	
	protected CTSimpleField fldSimple = null;
	protected Node content = null;
	protected String fldName = null;
	protected String fldParameterString = null;
	protected List fldParameters = null;
	
	public void build(CTSimpleField fldSimple, Node content) throws TransformerException {
		this.fldSimple = fldSimple;
        if(log.isDebugEnabled()) {
            log.debug("\n" + XmlUtils.marshaltoString(fldSimple, true, true));
        }
		this.content = content;
		setupNameParameterString(fldSimple.getInstr());
	}
	
	public void build(String inStr) throws TransformerException {
		reset();
		setupNameParameterString(inStr);
	}
	
	protected void setupNameParameterString(String text) {
	int nameStart = 0;
	int nameEnd = 0;
		if ((text != null) && (text.length() > 0)) {
			while ((nameStart < text.length()) && (text.charAt(nameStart) == ' '))
				nameStart++;
			if (nameStart < text.length()) {
				nameEnd = nameStart + 1;
				
				if (text.charAt(nameStart) == '=') {
					// Special case =nn
					// NB, we can't process this field unless it is just a number (as opposed to a calculation)
				} else {
					while ((nameEnd < text.length()) && (text.charAt(nameEnd) != ' '))
						nameEnd++;
				}				
			}
			if (nameStart < nameEnd) {
				fldName = text.substring(nameStart, nameEnd);
				log.debug("fldName: " + fldName);
				if (nameEnd < text.length()) {
					fldParameterString = text.substring(nameEnd).trim();
					log.debug("fldParameterString: " + fldParameterString);
				}
			}
		}
		if (fldName != null) fldName = fldName.toUpperCase(); 
	}

	public static List splitParameters(String text) {
		
		log.debug("splitParameters: " + text);
		List ret = Collections.EMPTY_LIST;
		int valStart = -1;
		boolean inLiteral = false;
		char ch = '\0';
		if ((text != null) && (text.length() > 0)) {
			ret = new ArrayList(4);
			for (int chidx = 0; chidx -1) && (!inLiteral)) {
						appendParameter(ret, text.substring(valStart, chidx));
						valStart = -1;
					}
				}
				else if (valStart == -1) {
					valStart = chidx;
				}
			}
			if (valStart > -1) {
				appendParameter(ret, text.substring(valStart));
				valStart = -1;
			}
		}
		return ret;
	}
	
	public static void appendParameter(List parameters, String value) {
		log.debug("parameter: " + value);
		parameters.add(value);
	}

	/**
	 * The name of the field, for example DATE, MERGEFIELD
	 * @see field syntax
	 * @return
	 */
	public String getFldName() {
		return fldName;
	}
	
	public String getFldArgument() {
		return getFldParameters().get(0);
	}	
	
	/**
	 * For example, "caContractId  \* UPPER"
	 */
	public String getFldParameterString() {
		return fldParameterString;
	}
	
	
	public List getFldParameters() {
		if (fldParameters == null) {
			fldParameters = splitParameters(fldParameterString );
		}
		return fldParameters;
	}

	public CTSimpleField getFldSimple() {
		return fldSimple;
	}
	
	public Node getContent() {
		return content;
	}
	
	protected void reset() {
		fldSimple = null;
		content = null;
		fldName = null;
		fldParameterString = null;
		fldParameters = null;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy