com.extjs.gxt.ui.client.util.Util.java Source code

Java tutorial

Introduction

Here is the source code for com.extjs.gxt.ui.client.util.Util.java

Source

/*
 * Sencha GXT 2.3.1 - Sencha for GWT
 * Copyright(c) 2007-2013, Sencha, Inc.
 * licensing@sencha.com
 * 
 * http://www.sencha.com/products/gxt/license/
 */
package com.extjs.gxt.ui.client.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.js.JsArray;
import com.extjs.gxt.ui.client.js.JsObject;
import com.extjs.gxt.ui.client.widget.Component;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.user.client.Element;

/**
 * Various utility functions.
 */
public class Util {

    /**
     * Constrains the value by a minimum and max value.
     * 
     * @param value the value
     * @param min the minimum
     * @param max the maximum
     * @return the adjusted value
     */
    public static int constrain(int value, int min, int max) {
        value = Math.max(value, min);
        value = Math.min(value, max);
        return value;
    }

    /**
     * Creates a Component[] from a list of Component's.
     * 
     * @param list the list
     * @return the array
     */
    public static Component[] createArray(List<Component> list) {
        int size = list.size();
        Component[] components = new Component[size];
        for (int i = 0; i < components.length; i++) {
            components[i] = (Component) list.get(i);
        }
        return components;
    }

    /**
     * Creates a new list from the given collection.
     * 
     * @param collection the collection
     * @return the list
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static List createList(Collection collection) {
        if (collection instanceof List) {
            return (List) collection;
        }
        List list = new ArrayList();
        Iterator it = collection.iterator();
        while (it.hasNext()) {
            list.add(it.next());

        }
        return list;
    }

    /**
     * Creates a new list and adds the element(s).
     * 
     * @param element the item to add to the list
     * @return the new list
     */
    @SuppressWarnings("rawtypes")
    public static List createList(Object... element) {
        List list = new ArrayList();
        fill(list, element);
        return list;
    }

    public static boolean equalWithNull(Object obj1, Object obj2) {
        if (obj1 == obj2) {
            return true;
        } else if (obj1 == null) {
            return false;
        } else {
            return obj1.equals(obj2);
        }
    }

    /**
     * Populates a list with an array of elements.
     * 
     * @param list the list
     * @param elements the elements to be added to the list
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void fill(List list, Object[] elements) {
        for (int i = 0; i < elements.length; i++) {
            list.add(elements[i]);
        }
    }

    /**
     * Returns the model's data as a javascript object.
     * 
     * @param model the model
     * @return the javascript object
     */
    public static JavaScriptObject getJsObject(ModelData model) {
        return getJsObject(model, 0);
    }

    /**
     * Returns the model's data as a javascript object.
     * 
     * @param model the model
     * @param maxDepth the maximum number of sub models to process
     * @return the javascript object
     */
    public static JavaScriptObject getJsObject(ModelData model, int maxDepth) {
        JsObject jsObj = new JsObject();
        for (String key : model.getPropertyNames()) {
            Object value = model.get(key);
            if (maxDepth > 0) {
                internalProcessObject(jsObj, maxDepth, value, key);
            } else {
                jsObj.set(key, value);
            }
        }
        return jsObj.getJsObject();
    }

    /**
     * Returns the list of models as a javascript array.
     * 
     * @param models the list of models
     * @param maxDepth the maximum number of sub models to process
     * @return the javascript array object
     */
    public static JavaScriptObject getJsObjects(List<? extends ModelData> models, int maxDepth) {
        JsArray js = new JsArray();
        for (ModelData m : models) {
            js.add(getJsObject(m, maxDepth));
        }
        return js.getJsObject();
    }

    /**
     * Returns the index of a object in an array.
     * 
     * @param elements the array
     * @param elem the element
     * @return the index or -1 if elem not in the array
     */
    public static int indexOf(Object[] elements, Object elem) {
        for (int i = 0; i < elements.length; i++) {
            if (elements[i] == elem) {
                return i;
            }
        }
        return -1;
    }

    /**
     * Returns true if the string is null or equals to the empty string.
     * 
     * @param string the string to test
     * @return true if the string is empty
     */
    public static boolean isEmptyString(String string) {
        return string == null || "".equals(string);
    }

    public static boolean isEmptyString(SafeHtml html) {
        if (html == null) {
            return true;
        }
        return html.asString().length() == 0;
    }

    /**
     * Returns true if the style ends with .jpg, .gif, or .png.
     * 
     * @param style the style
     * @return true for an image path
     */
    public static boolean isImagePath(String style) {
        return style != null && style.toLowerCase().matches(".*(jpg$|gif$|png$)");
    }

    /**
     * Tests if the value is an integer.
     * 
     * @param value the value to test
     * @return the integer state
     */
    public static boolean isInteger(String value) {
        try {
            Integer.parseInt(value);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public static native <E> E or(E s1, E s2) /*-{
                                              return s1 || s2;
                                              }-*/;

    public static native float parseFloat(String value, float defaultValue) /*-{
                                                                            var n = parseFloat(value, 10);
                                                                            if (n === 0) {
                                                                            return 0;
                                                                            }
                                                                            return n || defaultValue;
                                                                            }-*/;

    public static native int parseInt(String value, int defaultValue) /*-{
                                                                      var n = parseInt(value, 10);
                                                                      if (n === 0) {
                                                                      return 0;
                                                                      }
                                                                      return n || defaultValue;
                                                                      }-*/;

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static List subList(List list, int start, int end) {
        List temp = new ArrayList();
        for (int i = start; i < end; i++) {
            temp.add(list.get(i));
        }
        return temp;
    }

    public static Element[] toElementArray(NodeList<Element> nodes) {
        Element[] e = new Element[nodes.getLength()];
        for (int i = 0; i < nodes.getLength(); i++) {
            e[i] = nodes.getItem(i);
        }
        return e;
    }

    @SuppressWarnings("rawtypes")
    private static void internalProcessArray(JsArray jsArray, int maxDepth, Object value) {
        if (value instanceof ModelData) {
            jsArray.add(getJsObject((ModelData) value, maxDepth - 1));
        } else if (value instanceof Collection) {
            jsArray.add(processArray(((Collection) value).toArray(), maxDepth - 1).getJsObject());
        } else if (value instanceof Object[]) {
            jsArray.add(processArray((Object[]) value, maxDepth - 1).getJsObject());
        } else if (value instanceof Map) {
            jsArray.add(processMap((Map) value, maxDepth - 1).getJsObject());
        } else {
            jsArray.add(value);
        }
    }

    @SuppressWarnings("rawtypes")
    private static void internalProcessObject(JsObject jsObj, int maxDepth, Object value, String key) {
        if (value instanceof Collection) {
            jsObj.set(key, processArray(((Collection) value).toArray(), maxDepth - 1).getJsObject());
        } else if (value instanceof Object[]) {
            jsObj.set(key, processArray((Object[]) value, maxDepth - 1).getJsObject());
        } else if (value instanceof ModelData) {
            jsObj.set(key, getJsObject((ModelData) value, maxDepth - 1));
        } else if (value instanceof Map<?, ?>) {
            jsObj.set(key, processMap((Map) value, maxDepth - 1).getJsObject());
        } else {
            jsObj.set(key, value);
        }
    }

    /**
     * Iterates down into Object[], producing the required JsArray
     */
    private static JsArray processArray(Object[] c, int maxDepth) {
        JsArray jsArray = new JsArray();
        if (maxDepth > 0) {
            for (Object obj : c) {
                internalProcessArray(jsArray, maxDepth, obj);
            }
        }
        return jsArray;
    }

    private static JsArray processMap(Map<?, ?> map, int maxDepth) {
        JsArray jsArray = new JsArray();
        if (maxDepth > 0) {
            for (Entry<?, ?> o : map.entrySet()) {
                JsObject jsObj = new JsObject();
                internalProcessObject(jsObj, maxDepth, o.getKey(), "key");
                internalProcessObject(jsObj, maxDepth, o.getValue(), "value");
                jsArray.add(jsObj.getJsObject());
            }
        }
        return jsArray;
    }

    public static String nullToEmpty(String string) {
        if (string == null) {
            return "";
        } else {
            return string;
        }
    }
}