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

com.googlecode.gwt.test.internal.utils.GwtStyleUtils Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.internal.utils;

import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.googlecode.gwt.test.utils.JavaScriptObjects;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Some {@link Style} utility methods. For internal use only.
 *
 * @author Gael Lazzari
 */
public class GwtStyleUtils {

    public static final String STYLE_OBJECT_FIELD = "STYLE_OBJECT";

    public static final String STYLE_PROPERTIES = "STYLE_PROPERTIES";
    // map initialized with default style values
    private static final Map DEFAULT_STYLE_VALUES = new HashMap() {

        private static final long serialVersionUID = 1L;

        {
            put("whiteSpace", "nowrap");
        }
    };

    private static final Pattern STYLE_PATTERN = Pattern.compile("(.+):(.+)");

    public static void cloneStyle(Style newStyle, Style oldStyle) {
        Map oldProperties = getStyleProperties(oldStyle);
        Map newProperties = getStyleProperties(newStyle);
        newProperties.clear();
        newProperties.putAll(oldProperties);
    }

    public static String getProperty(Style style, String propertyName) {
        String value = getStyleProperties(style).get(propertyName);

        if (value == null) {
            String defaultValue = DEFAULT_STYLE_VALUES.get(propertyName);
            value = defaultValue != null ? defaultValue : "";
        }

        return value;
    }

    public static Style getStyle(Element element) {
        assert Element.is(element) : "not an Element";

        Style style = JavaScriptObjects.getObject(element, STYLE_OBJECT_FIELD);
        if (style == null) {
            style = newStyle();
            JavaScriptObjects.setProperty(element, STYLE_OBJECT_FIELD, style);
        }

        return style;

    }

    public static LinkedHashMap getStyleProperties(String style) {
        LinkedHashMap result = new LinkedHashMap();

        if (style == null || style.trim().length() == 0) {
            return result;
        }

        String[] styles = style.split("\\s*;\\s*");
        for (String property : styles) {
            Matcher m = STYLE_PATTERN.matcher(property);
            if (m.matches()) {
                result.put(m.group(1).trim(), m.group(2).trim());
            }
        }

        return result;
    }

    public static LinkedHashMap getStyleProperties(Style style) {
        LinkedHashMap properties = JavaScriptObjects.getObject(style,
                STYLE_PROPERTIES);

        assert properties != null : "not a Style";

        return properties;
    }

    public static boolean isStyle(JavaScriptObject jso) {
        return JavaScriptObjects.hasProperty(jso, STYLE_PROPERTIES);
    }

    public static void overrideStyle(Style target, String newValue) {
        for (Map.Entry entry : getStyleProperties(newValue).entrySet()) {
            target.setProperty(GwtStringUtils.camelize(entry.getKey()), entry.getValue());
        }
    }

    public static void setProperty(Style style, String propertyName, String propertyValue) {
        // treat case when propertyValue = "250.0px" => "250px" instead
        propertyValue = GwtStringUtils.treatDoubleValue(propertyValue);

        Map styleProperties = GwtStyleUtils.getStyleProperties(style);

        // ensure the style will be added at the end of the LinkedHashMap
        styleProperties.remove(propertyName);
        styleProperties.put(propertyName, propertyValue);
    }

    public static String toString(Style style) {
        LinkedHashMap styleProperties = GwtStyleUtils.getStyleProperties(style);
        StringBuilder sb = new StringBuilder();

        for (Map.Entry entry : styleProperties.entrySet()) {
            String cssPropertyValue = entry.getValue().trim();

            if (!"".equals(cssPropertyValue)) {
                String cssProperyName = GwtStringUtils.hyphenize(entry.getKey());
                sb.append(cssProperyName).append(": ").append(cssPropertyValue).append("; ");
            }
        }

        return sb.toString();

    }

    private static Style newStyle() {
        Style style = JavaScriptObject.createObject().cast();

        JavaScriptObjects.setProperty(style, STYLE_PROPERTIES, new LinkedHashMap());

        return style;
    }

    private GwtStyleUtils() {

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy