Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2009, Plutext Pty Ltd.
   *   
   *  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.model.properties;
 
 import java.util.List;
 
 
 public class PropertyFactory {
 	
 	/* We could have separate factories for paragraph
 	 * and run properties, but having a single factory
 	 * is better, since it means we don't need to know
 	 * whether the property for which we are creating
 	 * a Property object is paragraph or run level.
 	 */
 	
 	protected static Logger log = LoggerFactory.getLogger(PropertyFactory.class);
 	
 	public static List<PropertycreateProperties(CTTblPrBase  tblPr) {
 		
 		List<Propertyproperties = new ArrayList<Property>();
 
 		if (tblPr.getJc()!=null
				&& 
			// ignore TblInd (since docx4j 3.0.1)
else {
			if (tblPr.getTblInd()!=null
				properties.add(new org.docx4j.model.properties.table.Indent(tblPr.getTblInd()) );
		}
		if (tblPr.getTblBorders()!=null) {
			TblBorders tblBorders = tblPr.getTblBorders();
			if (tblBorders.getTop()!=null
				properties.add(new BorderTop(tblBorders.getTop()) );				
			if (tblBorders.getBottom()!=null
				properties.add(new BorderBottom(tblBorders.getBottom()) );				
			if (tblBorders.getLeft()!=null
				properties.add(new BorderLeft(tblBorders.getLeft()) );				
			if (tblBorders.getRight()!=null
				properties.add(new BorderRight(tblBorders.getRight()) );	
			// TODO
//			if (tblBorders.getInsideH()!=null) 
//				properties.add(new BorderRight(tblBorders.getRight()) );				
//			if (tblBorders.getInsideV()!=null) 
//				properties.add(new BorderRight(tblBorders.getRight()) );				
		}
//		if (tblPr.getTblCellSpacing()==null) {
//			// If borderConflictResolutionRequired is required, we need
//			// to set this explicitly, because in CSS, 'separate' is
//			// the default.  The problem is that we need to avoid
//			// overruling an inherited value (ie where TblCellSpacing
//			// is set).
//			properties.add(new AdHocProperty("border-collapse", "collapse") );
//		} else {
//			properties.add(new AdHocProperty("border-collapse", "separate") ); // default 
//		}
		if (tblPr.getTblW()!=null ){
    		// @w:w
    		if (tblPr.getTblW().getW()!=null 
    				&& tblPr.getTblW().getW() != .) {
    			properties.add(new AdHocProperty("table-layout""fixed""table-layout""fixed") );
    		} else if (tblPr.getTblW().getType()!=null
    				&& tblPr.getTblW().getType().equals("auto") ) {
    			properties.add(new AdHocProperty("table-layout""auto""table-layout""auto") );  
    				// FOP doesn't support auto, but it degrades gracefully
    		} // otherwise the default 'auto' is implied
		}
		if (tblPr.getShd() != null) {
			properties.add(new Shading(tblPr.getShd()));
		}
		return properties;		
	}
	public static List<PropertycreateProperties(List<CTTblStylePrtblStylePrList) {
		List<Propertyproperties = new ArrayList<Property>();
		.warn("TODO - implement for CTTblStylePr!");
		return properties;		
	}
	public static List<PropertycreateProperties(TrPr trPr) {
		List<Propertyproperties = new ArrayList<Property>();
		.warn("TODO - implement for TrPr!");
		return properties;		
	}
	public static List<PropertycreateProperties(TcPr tcPr) {
		List<Propertyproperties = new ArrayList<Property>();
		createProperties(propertiestcPr);
		return properties;		
	}
	/*
	 *  @since 3.0.0
	 */
	public static void createPropertiesTable(List<PropertypropertiesTcPr tcPr) {
		if (tcPr.getTcBorders()!=null) {
			TcPrInner.TcBorders tcBorders = tcPr.getTcBorders();
			if (tcBorders.getTop()!=null
				properties.add(new BorderTop(tcBorders.getTop()) );				
			if (tcBorders.getBottom()!=null
				properties.add(new BorderBottom(tcBorders.getBottom()) );				
			if (tcBorders.getLeft()!=null
				properties.add(new BorderLeft(tcBorders.getLeft()) );				
			if (tcBorders.getRight()!=null
				properties.add(new BorderRight(tcBorders.getRight()) );	
		}
		if (tcPr.getVAlign()!=null) {
		}
		if (tcPr.getShd()!=null) {
			properties.add(new Shading(tcPr.getShd())); 
		}
	}
	public static void createProperties(List<PropertypropertiesTcPr tcPr) {
		createPropertiesTable(propertiestcPr);
		if (tcPr.getTcMar() != null) {
			TcMar tcMar = tcPr.getTcMar();
			if (tcMar.getTop() != null)
				properties.add(new CellMarginTop(tcMar.getTop()));
			if (tcMar.getBottom() != null)
				properties.add(new CellMarginBottom(tcMar.getBottom()));
			if (tcMar.getLeft() != null)
				properties.add(new CellMarginLeft(tcMar.getLeft()));
			if (tcMar.getRight() != null)
				properties.add(new CellMarginRight(tcMar.getRight()));
		}
	}
	public static List<PropertycreateProperties(OpcPackage wmlPackageRPr rPr) {
		List<Propertyproperties = new ArrayList<Property>();
		if (rPr.getB() != null)
			properties.add(new Bold(rPr.getB()) );
//		if (rPr.getBCs() != null)
//			dest.setBCs(rPr.getBCs());
		if (rPr.getBdr() != null)
			properties.add(new RBorder(rPr.getBdr()));
//		if (rPr.getCaps() != null)
//			dest.setCaps(rPr.getCaps());
		if (rPr.getColor() != null)
			properties.add(new FontColor(rPr.getColor()) );
//		if (rPr.getCs() != null)
//			dest.setCs(rPr.getCs());
//		if (rPr.getDstrike() != null)
//			dest.setDstrike(rPr.getDstrike());
//		if (rPr.getEastAsianLayout() != null)
//			dest.setEastAsianLayout(rPr.getEastAsianLayout());
//		if (rPr.getEffect() != null)
//			dest.setEffect(rPr.getEffect());
//		if (rPr.getEm() != null)
//			dest.setEm(rPr.getEm());
//		if (rPr.getEmboss() != null)
//			dest.setEmboss(rPr.getEmboss());
//		if (rPr.getFitText() != null)
//			dest.setFitText(rPr.getFitText());
		if (rPr.getHighlight() != null)
			properties.add(new HighlightColor(rPr.getHighlight()));
		if (rPr.getI() != null)
			properties.add(new Italics(rPr.getI()) );
//		if (rPr.getICs() != null)
//			dest.setICs(rPr.getICs());
//		if (rPr.getImprint() != null)
//			dest.setImprint(rPr.getImprint());
//		if (rPr.getKern() != null)
//			dest.setKern(rPr.getKern());
//		if (rPr.getLang() != null)
//			dest.setLang(rPr.getLang());
//		if (rPr.getNoProof() != null)
//			dest.setNoProof(rPr.getNoProof());
//		if (rPr.getOMath() != null)
//			dest.setOMath(rPr.getOMath());
//		if (rPr.getOutline() != null)
//			dest.setOutline(rPr.getOutline());
//		if (rPr.getPosition() != null)
//			dest.setPosition(rPr.getPosition());
		// RFonts is done at the w:t level, via RunFontSelector
//		if (rPr.getRFonts() != null)
//			properties.add(new Font(wmlPackage, rPr.getRFonts() ) );
//		if (rPr.getRPrChange() != null)
//			dest.setRPrChange(rPr.getRPrChange());
//		if (rPr.getRStyle() != null)
//			dest.setRStyle(rPr.getRStyle());
		if (rPr.getRtl() != null)
			properties.add(new TextDirection(rPr.getRtl() ));
//		if (rPr.getShadow() != null)
//			dest.setShadow(rPr.getShadow());
		if (rPr.getShd() != null)
			properties.add(new RShading(rPr.getShd()));
//		if (rPr.getSmallCaps() != null)
//			dest.setSmallCaps(rPr.getSmallCaps());
//		if (rPr.getSnapToGrid() != null)
//			dest.setSnapToGrid(rPr.getSnapToGrid());
//		if (rPr.getSpacing() != null)
//			dest.setSpacing(rPr.getSpacing());
//		if (rPr.getSpecVanish() != null)
//			dest.setSpecVanish(rPr.getSpecVanish());
		if (rPr.getStrike() != null)
			properties.add(new Strike(rPr.getStrike() ) );
		if (rPr.getSz() != null)
			properties.add(new FontSize(rPr.getSz() ) );
//		if (rPr.getSzCs() != null)
//			dest.setSzCs(rPr.getSzCs());
		if (rPr.getU() != null)
			properties.add(new Underline(rPr.getU() ) );
//		if (rPr.getVanish() != null)
//			dest.setVanish(rPr.getVanish());
		if (rPr.getVertAlign() != null)
			properties.add(new VerticalAlignment(rPr.getVertAlign()) );
//		if (rPr.getW() != null)
//			dest.setW(rPr.getW());
//		if (rPr.getWebHidden() != null)
//			dest.setWebHidden(rPr.getWebHidden());
		return properties;		
	}
	public static List<PropertycreateProperties(OpcPackage wmlPackageParaRPr rPr) {
		List<Propertyproperties = new ArrayList<Property>();
		if (rPr.getB() != null)
			properties.add(new Bold(rPr.getB()) );
//		if (rPr.getBCs() != null)
//			dest.setBCs(rPr.getBCs());
//		if (rPr.getBdr() != null)
//			properties.add(new RBorder(rPr.getBdr()));
//		if (rPr.getCaps() != null)
//			dest.setCaps(rPr.getCaps());
		if (rPr.getColor() != null)
			properties.add(new FontColor(rPr.getColor()) );
//		if (rPr.getCs() != null)
//			dest.setCs(rPr.getCs());
//		if (rPr.getDstrike() != null)
//			dest.setDstrike(rPr.getDstrike());
//		if (rPr.getEastAsianLayout() != null)
//			dest.setEastAsianLayout(rPr.getEastAsianLayout());
//		if (rPr.getEffect() != null)
//			dest.setEffect(rPr.getEffect());
//		if (rPr.getEm() != null)
//			dest.setEm(rPr.getEm());
//		if (rPr.getEmboss() != null)
//			dest.setEmboss(rPr.getEmboss());
//		if (rPr.getFitText() != null)
//			dest.setFitText(rPr.getFitText());
//		if (rPr.getHighlight() != null)
//			properties.add(new HighlightColor(rPr.getHighlight()));
		if (rPr.getI() != null)
			properties.add(new Italics(rPr.getI()) );
//		if (rPr.getICs() != null)
//			dest.setICs(rPr.getICs());
//		if (rPr.getImprint() != null)
//			dest.setImprint(rPr.getImprint());
//		if (rPr.getKern() != null)
//			dest.setKern(rPr.getKern());
//		if (rPr.getLang() != null)
//			dest.setLang(rPr.getLang());
//		if (rPr.getNoProof() != null)
//			dest.setNoProof(rPr.getNoProof());
//		if (rPr.getOMath() != null)
//			dest.setOMath(rPr.getOMath());
//		if (rPr.getOutline() != null)
//			dest.setOutline(rPr.getOutline());
//		if (rPr.getPosition() != null)
//			dest.setPosition(rPr.getPosition());
		// RFonts is done at the w:t level, via RunFontSelector
//		if (rPr.getRFonts() != null)
//			properties.add(new Font(wmlPackage, rPr.getRFonts() ) );
//		if (rPr.getRPrChange() != null)
//			dest.setRPrChange(rPr.getRPrChange());
//		if (rPr.getRStyle() != null)
//			dest.setRStyle(rPr.getRStyle());
//		if (rPr.getRtl() != null)
//			dest.setRtl(rPr.getRtl());
//		if (rPr.getShadow() != null)
//			dest.setShadow(rPr.getShadow());
//		if (rPr.getShd() != null)
//			properties.add(new RShading(rPr.getShd()));
//		if (rPr.getSmallCaps() != null)
//			dest.setSmallCaps(rPr.getSmallCaps());
//		if (rPr.getSnapToGrid() != null)
//			dest.setSnapToGrid(rPr.getSnapToGrid());
//		if (rPr.getSpacing() != null)
//			dest.setSpacing(rPr.getSpacing());
//		if (rPr.getSpecVanish() != null)
//			dest.setSpecVanish(rPr.getSpecVanish());
		if (rPr.getStrike() != null)
			properties.add(new Strike(rPr.getStrike() ) );
		if (rPr.getSz() != null)
			properties.add(new FontSize(rPr.getSz() ) );
//		if (rPr.getSzCs() != null)
//			dest.setSzCs(rPr.getSzCs());
		if (rPr.getU() != null)
			properties.add(new Underline(rPr.getU() ) );
//		if (rPr.getVanish() != null)
//			dest.setVanish(rPr.getVanish());
		if (rPr.getVertAlign() != null)
			properties.add(new VerticalAlignment(rPr.getVertAlign()) );
//		if (rPr.getW() != null)
//			dest.setW(rPr.getW());
//		if (rPr.getWebHidden() != null)
//			dest.setWebHidden(rPr.getWebHidden());
		return properties;		
	}
	public static List<PropertycreateProperties(OpcPackage wmlPackagePPr pPr) {
		List<Propertyproperties = new ArrayList<Property>();
//		if (pPr.getAdjustRightInd() != null)
//			dest.setAdjustRightInd(pPr.getAdjustRightInd());
//		if (pPr.getAutoSpaceDE() != null)
//			dest.setAutoSpaceDE(pPr.getAutoSpaceDE());
//		if (pPr.getAutoSpaceDN() != null)
//			dest.setAutoSpaceDN(pPr.getAutoSpaceDN());
//		if (pPr.getBidi() != null)
//			dest.setBidi(pPr.getBidi());
//		if (pPr.getCnfStyle() != null)
//			dest.setCnfStyle(pPr.getCnfStyle());
//		if (pPr.getContextualSpacing() != null)
//			dest.setContextualSpacing(pPr.getContextualSpacing());
//		if (pPr.getDivId() != null)
//			dest.setDivId(pPr.getDivId());
//		if (pPr.getFramePr() != null)
//			dest.setFramePr(pPr.getFramePr());
		if (pPr.getJc() != null)
			properties.add(new Justification(pPr.getJc()));
//		if (pPr.getKeepLines() != null)
//			dest.setKeepLines(pPr.getKeepLines());
		if (pPr.getKeepNext() != null)
			properties.add(new KeepNext(pPr.getKeepNext()));
//		if (pPr.getKinsoku() != null)
//			dest.setKinsoku(pPr.getKinsoku());
//		if (pPr.getMirrorIndents() != null)
//			dest.setMirrorIndents(pPr.getMirrorIndents());
		Indent indent = null
		if (pPr.getNumPr() == null) {
			.debug("No numPr.. ") ; 									
else {
			// Numbering is mostly handled directly in the HTML & PDF stylesheets			
			properties.add(new NumberingProperty(pPr.getNumPr()));
		}
		if (pPr.getInd() != null) {
			.debug("Indent from ppr: " + XmlUtils.marshaltoString(pPr.getInd(),  truetrue)) ; 
			properties.add(new Indent(pPr.getInd()));			
		}
//		if (pPr.getOutlineLvl() != null)
//			dest.setOutlineLvl(pPr.getOutlineLvl());
//		if (pPr.getOverflowPunct() != null)
//			dest.setOverflowPunct(pPr.getOverflowPunct());
		if (pPr.getPageBreakBefore() != null)
			properties.add(new PageBreakBefore(pPr.getPageBreakBefore()));
		if (pPr.getPBdr() != null) {
			PBdr pBdr = pPr.getPBdr();
			if (pBdr.getTop()!=null
				properties.add(new PBorderTop(pBdr.getTop()) );				
			if (pBdr.getBottom()!=null
				properties.add(new PBorderBottom(pBdr.getBottom()) );				
			if (pBdr.getLeft()!=null
				properties.add(new PBorderLeft(pBdr.getLeft()) );				
			if (pBdr.getRight()!=null
				properties.add(new PBorderRight(pBdr.getRight()) );	
		}
//		if (pPr.getPPrChange() != null)
//			dest.setPPrChange(pPr.getPPrChange());
//		if (pPr.getPStyle() != null)
//			dest.setPStyle(pPr.getPStyle());
//		if (pPr.getSectPr() != null)
//			dest.setSectPr(pPr.getSectPr());
		if (pPr.getShd() != null)
			properties.add(new PShading(pPr.getShd()));
//		if (pPr.getSnapToGrid() != null)
//			dest.setSnapToGrid(pPr.getSnapToGrid());
		if (pPr.getSpacing() != null) {
			Spacing spacing = pPr.getSpacing();
			if (spacing.getBefore()!=null) {
				properties.add(new SpaceBefore(spacing.getBefore()));
			}
			if (spacing.getAfter()!=null) {
				properties.add(new SpaceAfter(spacing.getAfter()));				
			}
			if (spacing.getLine()!=null) {
				properties.add(new LineSpacing(spacing.getLine()));								
			}
			// Others not implemented:
			// "beforeLines" 
			// beforeAutospacing" 
			// afterLines" 
			// afterAutospacing" 
			// lineRule" 
		}
//		if (pPr.getSuppressAutoHyphens() != null)
//			dest.setSuppressAutoHyphens(pPr.getSuppressAutoHyphens());
//		if (pPr.getSuppressLineNumbers() != null)
//			dest.setSuppressLineNumbers(pPr.getSuppressLineNumbers());
//		if (pPr.getSuppressOverlap() != null)
//			dest.setSuppressOverlap(pPr.getSuppressOverlap());
//		if (pPr.getTabs() != null)
//			dest.setTabs(pPr.getTabs());
		if (pPr.getTextAlignment() != null)
//		if (pPr.getTextboxTightWrap() != null)
//			dest.setTextboxTightWrap(pPr.getTextboxTightWrap());
//		if (pPr.getTextDirection() != null)
//			dest.setTextDirection(pPr.getTextDirection());
//		if (pPr.getTopLinePunct() != null)
//			dest.setTopLinePunct(pPr.getTopLinePunct());
//		if (pPr.getWidowControl() != null)
//			dest.setWidowControl(pPr.getWidowControl());
//		if (pPr.getWordWrap() != null)
//			dest.setWordWrap(pPr.getWordWrap());
		return properties;		
	}
	public static Property createPropertyFromCssName(String nameCSSValue value) {
		try {
			// Run properties
			if (name.equals(. )) {
				// font-weight
				return new Bold(value);
else if (name.equals(. )) {
				// font-style
				return new Italics(value);
else if (name.equals("text-decoration")) {
				if (value.getCssText().toLowerCase().equals("line-through")
				        || value.getCssText().toLowerCase().equals("[line-through]")) {
					return new Strike(value);
else if (value.getCssText().toLowerCase().equals("underline")
						|| value.getCssText().toLowerCase().equals("[underline]")) {
					return new Underline(value);
else if (value.getCssText().toLowerCase().equals("none")) {
					return null;
else {
					.error("What to do for " + name + ":" + value.getCssText());
				}
else if (name.equals(. )) {
				// color
				return new FontColor(value);
else if (name.equals(. )) {
				// font-size
				return new FontSize(value);
else if (name.equals(. )) {
			    // background color
			    if(value.getCssText().toLowerCase().equals("transparent")){
			        return null;
			    }
			    // if css value is presented as color, make shading;
			    // else assume it is string value so highlight
			    if(simpleRGBCheck(value.getCssText())){
			        return new RShading(value);
			    } else {
			        return new HighlightColor(value);
			    }
else if (name.equals(.)) {
			    //default value
			    if(value.getCssText().equals("baseline")){
			        return null;
			    }
			    return new VerticalAlignment(value);
			}
			// Paragraph properties
			if (name.equals(. )) {
				// left
				return new Indent(value);
else if (name.equals(. )) {
				// text-align
				return new Justification(value);
else if (name.equals(. )) {
				// page-break-after
				return new KeepNext(value);
else if (name.equals(.)) {
				// page-break-before
				return new PageBreakBefore(value);
else if (name.equals(. )) {
				// vertical-align
				return new TextAlignmentVertical(value);
else if (name.equals(. )) {
				// space-after
				return new SpaceAfter(value);
			}		
			// TODO: consider whether it is right to catch this,
			// or whether calling code should handle a docx4j exception wrapping this
			.error("Can't create property from: " + name + ":" + value.getCssText() );
			return null;
		}
		.debug("How to handle: " + name + "?");
		return null;
	}

Now used to create fill property for paragraph only
	public static Property createPropertyFromCssNameForPPr(String nameCSSValue value) {
	    try {
	        if (name.equals(. )) {
	            // background color
	            if(value.getCssText().toLowerCase().equals("transparent")){
	                return null;
	            }
	            if(simpleRGBCheck(value.getCssText())){
	                return new PShading(value);
	            }
	        }
	    } catch (java.lang.UnsupportedOperationException uoe) {
	        // TODO: consider whether it is right to catch this,
	        // or whether calling code should handle a docx4j exception wrapping this
	        .error("Can't create property from: " + name + ":" + value.getCssText() );
	        return null;
	    }
	    .debug("How to handle: " + name + "?");
	    return null;
	}
	private static boolean simpleRGBCheck(String cssText){
	    if(cssText.contains("#") || cssText.contains("rgb")){
	        return true;
	    }
	    return false;
	}
New to GrepCode? Check out our FAQ X