Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * $Id: StyleAttrCSSResolver.java 367 2012-09-18 14:48:39Z eugenemark $
   *
   * This file is part of the iText (R) project.
   * Copyright (c) 1998-2012 1T3XT BVBA
   * Authors: Balder Van Camp, Emiel Ackermann, et al.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU Affero General Public License version 3
  * as published by the Free Software Foundation with the addition of the
  * following permission added to Section 15 as permitted in Section 7(a):
  * FOR ANY PART OF THE COVERED WORK IN WHICH THE COPYRIGHT IS OWNED BY 1T3XT,
  * 1T3XT DISCLAIMS THE WARRANTY OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  * or FITNESS FOR A PARTICULAR PURPOSE.
  * See the GNU Affero General Public License for more details.
  * You should have received a copy of the GNU Affero General Public License
  * along with this program; if not, see http://www.gnu.org/licenses or write to
  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
  * Boston, MA, 02110-1301 USA, or download the license from the following URL:
  * http://itextpdf.com/terms-of-use/
  *
  * The interactive user interfaces in modified source and object code versions
  * of this program must display Appropriate Legal Notices, as required under
  * Section 5 of the GNU Affero General Public License.
  *
  * In accordance with Section 7(b) of the GNU Affero General Public License,
  * a covered work must retain the producer line in every PDF that is created
  * or manipulated using iText.
  *
  * You can be released from the requirements of the license by purchasing
  * a commercial license. Buying such a license is mandatory as soon as you
  * develop commercial activities involving the iText software without
  * disclosing the source code of your own applications.
  * These activities include: offering paid services to customers as an ASP,
  * serving PDFs on the fly in a web application, shipping iText with a closed
  * source product.
  *
  * For more information, please contact iText Software Corp. at this
  * address: sales@itextpdf.com
  */
 package com.itextpdf.tool.xml.css;
 
 
 import java.util.Map;
Resolves CSS properties.

Author(s):
redlab_b
 
 public class StyleAttrCSSResolver implements CSSResolver {

 
 	public static final String STYLE = ..;
 	private final CssUtils utils;
 	private final CssFiles cssFiles;
 	private FileRetrieve retrieve;

Construct a new StyleAttrCSSResolver with default settings.
 
 	public StyleAttrCSSResolver() {
 		this(new CssFilesImpl(), CssUtils.getInstance());
 	}

Construct a new StyleAttrCSSResolver with the given CssFiles and the DefaultCssInheritanceRules.

Parameters:
cssFiles a CssFiles implementation.
 
 	public StyleAttrCSSResolver(final CssFiles cssFiles) {
 		this(cssFiles, CssUtils.getInstance());
 
 	}

Construct a new StyleAttrCSSResolver with the given CssFiles and CssUtils and the DefaultCssInheritanceRules.

Parameters:
cssFiles a CssFiles implementation.
utils the CssUtils to use.
	public StyleAttrCSSResolver(final CssFiles cssFilesfinal CssUtils utils) {
		this(new DefaultCssInheritanceRules(), cssFilesutils);
	}

Construct a new StyleAttrCSSResolver with the given CssFiles and CssUtils.

Parameters:
rules the CssInheritanceRules to use.
cssFiles a CssFiles implementation.
utils the CssUtils to use.
	public StyleAttrCSSResolver(final CssInheritanceRules rulesfinal CssFiles cssFilesfinal CssUtils utils) {
		this(rulescssFilesutilsnew FileRetrieveImpl());
	}
Construct a new StyleAttrCSSResolver with the given CssFiles and CssUtils.

Parameters:
rules the CssInheritanceRules to use.
cssFiles a CssFiles implementation.
utils the CssUtils to use.
fileRetrieve the com.itextpdf.tool.xml.net.FileRetrieve implementation
	public StyleAttrCSSResolver(final CssInheritanceRules rulesfinal CssFiles cssFilesfinal CssUtils utilsfinal FileRetrieve fileRetrieve) {
		this. = utils;
		this. = cssFiles;
		this. = rules;
		this. = fileRetrieve;
	}

Parameters:
cssFiles the CssFile implementation
r the com.itextpdf.tool.xml.net.FileRetrieve implementation
	public StyleAttrCSSResolver(final CssFiles cssFilesfinal FileRetrieve r) {
		this(new DefaultCssInheritanceRules(), cssFiles, CssUtils.getInstance(), r);
	}

Also taking into account the CSS properties of any parent tag in the given tag.

	public void resolveStyles(final Tag t) {
		// get css for this tag from resolver
		Map<StringStringtagCss = new HashMap<StringString>();
        Map<StringStringListCss = null;
		if (null !=  && .hasFiles()) {
			tagCss = .getCSS(t);
            if (t.getName().equalsIgnoreCase(..) || t.getName().equalsIgnoreCase(..)) {
                ListCss = .getCSS(new Tag(..));
            }
//			Map<String, String> css = cssFiles.getCSS(t);
//			if (null != css) {
//				for (Entry<String, String> entry : css.entrySet()) {
//					splitRules(tagCss,utils.stripDoubleSpacesAndTrim(entry.getKey()), utils.stripDoubleSpacesAndTrim(entry.getValue()));
//				}
//			}
		}
		// get css from style attr
		if (null != t.getAttributes() && !t.getAttributes().isEmpty()) {
			if (t.getAttributes().get(..) != null) {
			}
			if (t.getAttributes().get(..) != null) {
			}
			if (null != styleAtt && styleAtt.length() > 0) {
                Map<StringStringtagAttrCss = new HashMap<StringString>();
				String[] styles = styleAtt.split(";");
				for (String s : styles) {
					String[] part = s.split(":",2);
					if (part.length == 2) {
						splitRules(tagAttrCsskeyvalue);
					}
				}
                for (Entry<StringStringe : tagAttrCss.entrySet()) {
                    tagCss.put(e.getKey(), e.getValue());
                }
			}
		}
		// inherit css from parent tags, as defined in provided CssInheritanceRules or if property = inherit
		Map<StringStringcss = t.getCSS();
        if (ListCss != null && ListCss.containsKey(..)) {
            css.put(..ListCss.get(..));
        }
		if (mustInherit(t.getName()) && null != t.getParent() && null != t.getParent().getCSS()) {
			if (null != this.) {
				for (Entry<StringStringentry : t.getParent().getCSS().entrySet()) {
					String key = entry.getKey();
					if ((tagCss.containsKey(key) && ...equals(tagCss.get(key)) ) || canInherite(tkey)) {
						//splitRules(css, key, entry.getValue());
						css.put(keyentry.getValue());
					}
				}
else {
			}
		}
		// overwrite properties (if value != inherit)
		for (Entry<StringStringe : tagCss.entrySet()) {
				css.put(e.getKey(), e.getValue());
			}
		}
	}

Parameters:
css the css map to populate
key the property
value the value
	private void splitRules(final Map<StringStringcssfinal String keyfinal String value) {
else if (...equalsIgnoreCase(key)) {
			css.putAll(.parseBoxValues(value"margin-"""));
			css.putAll(.parseBoxValues(value"border-""-width"));
			css.putAll(.parseBoxValues(value"border-""-style"));
			css.putAll(.parseBoxValues(value"border-""-color"));
else if (...equalsIgnoreCase(key)) {
			css.putAll(.parseBoxValues(value"padding-"""));
else if (...equalsIgnoreCase(key)) {
else if (...equalsIgnoreCase(key)) {
else if (...equalsIgnoreCase(key)) {
            Map<StringStringbackgroundStyles = .processBackground(value);
            for (String backgroundKey : backgroundStyles.keySet()) {
                if (!css.containsKey(backgroundKey)) {
                    css.put(backgroundKeybackgroundStyles.get(backgroundKey));
                }
            }
        } else {
			css.put(keyvalue);
		}
	}

By setting an implementation of CssInheritanceRules a developer can set rules on what css selectors are inherited from parent tags.

Parameters:
cssInheritanceRules the inherit to set
	public void setCssInheritance(final CssInheritanceRules cssInheritanceRules) {
		this. = cssInheritanceRules;
	}

Defaults to true if no CssInheritanceRules implementation set.

Parameters:
t
property
Returns:
true if may be inherited false otherwise
	private boolean canInherite(final Tag tfinal String property) {
		if (null != this.) {
			return this..inheritCssSelector(tproperty);
		}
		return true;
	}

Defaults to true if no CssInheritanceRules implementation set.

Parameters:
tag
Returns:
true if must be inherited false otherwise
	private boolean mustInherit(final String tag) {
		if (null != this.) {
			return this..inheritCssTag(tag);
		}
		return true;
	}
	/*
	 * (non-Javadoc)
	 * @see com.itextpdf.tool.xml.pipeline.css.CSSResolver#addCss(java.lang.String, java.lang.String)
	 */
	public void addCss(final String contentfinal String charSetfinal boolean isPersistentthrows CssResolverException {
		try {
			CssFile css = proc.getCss();
			css.isPersistent(isPersistent);
			this..add(css);
			throw new CssResolverException(e);
catch (IOException e) {
			throw new CssResolverException(e);
		}
	}

Add a file to the CssFiles Collection.

Parameters:
href the path, if it starts with http we try to retrieve the file from the net, if not we try a normal file operation.
	public void addCssFile(final String hreffinal boolean isPersistentthrows CssResolverException {
		CssFileProcessor cssFileProcessor = new CssFileProcessor();
		try {
			.processFromHref(hrefcssFileProcessor);
catch (IOException e) {
			throw new CssResolverException(e);
		}
		CssFile css = cssFileProcessor.getCss();
		css.isPersistent(isPersistent);
		this..add(css);
	}

Add a file to the CssFiles Collection.

Parameters:
file the CssFile to add.
	public void addCss(final CssFile file) {
		this..add(file);
	}
	/* (non-Javadoc)
	 * @see com.itextpdf.tool.xml.pipeline.css.CSSResolver#addCss(java.lang.String)
	 */
	public void addCss(final String contentfinal boolean isPersistentthrows CssResolverException {
		FileRetrieve retrieve = new FileRetrieveImpl();
		try {
			retrieve.processFromStream(new ByteArrayInputStream(content.getBytes()), proc);
			CssFile css = proc.getCss();
			css.isPersistent(isPersistent);
			this..add(css);
			throw new CssResolverException(e);
catch (IOException e) {
			throw new CssResolverException(e);
		}
	}

Parameters:
inherit the inherit to set
	public void setCssInheritanceRules(final CssInheritanceRules inherit) {
		this. = inherit;
	}

The com.itextpdf.tool.xml.net.FileRetrieve implementation to use in addCss(java.lang.String,boolean).

Parameters:
retrieve the retrieve to set
	public void setFileRetrieve(final FileRetrieve retrieve) {
		this. = retrieve;
	}
	/* (non-Javadoc)
	 * @see com.itextpdf.tool.xml.pipeline.css.CSSResolver#clear()
	 */
	public CSSResolver clear() throws CssResolverException {
		return this;
	}
New to GrepCode? Check out our FAQ X