package boxrenderer.xhtml; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import boxrenderer.Resolver; import com.google.common.collect.Maps; import com.osbcp.cssparser.PropertyValue; public class CssStyleFactory { private static final Logger logger = LoggerFactory.getLogger(CssStyleFactory.class); public Map<String, Class<?>> styleClassMap = Maps.newHashMap(); private Resolver resolver; public CssStyleFactory() { styleClassMap.put("background-color", BackgroundColorCssStyle.class); styleClassMap.put("font-family", FontFamilyCssStyle.class); styleClassMap.put("font-size", FontSizeCssStyle.class); styleClassMap.put("border-color", BorderColorCssStyle.class); styleClassMap.put("border-width", BorderWidthCssStyle.class); styleClassMap.put("border-bottom-width", BorderWidthCssStyle.class); styleClassMap.put("border-left-width", BorderWidthCssStyle.class); styleClassMap.put("border-right-width", BorderWidthCssStyle.class); styleClassMap.put("border-top-width", BorderWidthCssStyle.class); styleClassMap.put("border-collapse", BorderCollapseCssStyle.class); // css shorthands are not properly implemented and collide with e.g. border-color and boder-width //styleClassMap.put("border", BorderCssStyle.class); styleClassMap.put("color", ColorCssStyle.class); styleClassMap.put("padding", PaddingCssStyle.class); styleClassMap.put("padding-bottom", PaddingCssStyle.class); styleClassMap.put("padding-left", PaddingCssStyle.class); styleClassMap.put("padding-right", PaddingCssStyle.class); styleClassMap.put("padding-top", PaddingCssStyle.class); styleClassMap.put("font-weight", FontWeightCssStyle.class); styleClassMap.put("width", WidthCssStyle.class); styleClassMap.put("height", HeightCssStyle.class); styleClassMap.put("text-align", TextAlignCssStyle.class); styleClassMap.put("vertical-align", VerticalAlignCssStyle.class); styleClassMap.put("margin", MarginCssStyle.class); styleClassMap.put("margin-bottom", MarginCssStyle.class); styleClassMap.put("margin-left", MarginCssStyle.class); styleClassMap.put("margin-right", MarginCssStyle.class); styleClassMap.put("margin-top", MarginCssStyle.class); styleClassMap.put("rotation", RotationCssStyle.class); styleClassMap.put("rotation-point", RotationPointCssStyle.class); styleClassMap.put("background-image", BackgroundImageCssStyle.class); styleClassMap.put("background-texture", BackgroundTextureCssStyle.class); styleClassMap.put("border-radius", BorderRadiusCssStyle.class); styleClassMap.put("background-position", BackgroundPosition.class); styleClassMap.put("background-size", BackgroundSize.class); } public CssStyleFactory(Resolver resolver) { this(); this.resolver = resolver; } public CssStyle getCssStyle(PropertyValue p) throws Exception { Class<?> styleClass = styleClassMap.get(p.getProperty()); AbstractCssStyle cssStyle = null; if(styleClass != null) { cssStyle = (AbstractCssStyle)styleClass.newInstance(); cssStyle.setProperty(p); cssStyle.setResolver(resolver); } else { logger.debug(String.format( "css style %s not implemented, ignoring...",p.getProperty())); } return cssStyle; } }