org.gk.engine.client.build.js.XJavaScript.java Source code

Java tutorial

Introduction

Here is the source code for org.gk.engine.client.build.js.XJavaScript.java

Source

/*
 * Copyright (C) 2000-2012  InfoChamp System Corporation
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package org.gk.engine.client.build.js;

import java.util.List;
import java.util.Map;

import jfreecode.gwt.event.client.bus.JsonConvert;
import jfreecode.gwt.event.client.bus.obj.InfoList;
import jfreecode.gwt.event.client.bus.obj.InfoMap;

import org.gk.engine.client.build.XComponent;
import org.gk.engine.client.event.EventHandler;
import org.gk.engine.client.event.IEventConstants;
import org.gk.engine.client.logging.EngineLogger;

import com.extjs.gxt.ui.client.core.XDOM;
import com.extjs.gxt.ui.client.event.DNDEvent;
import com.extjs.gxt.ui.client.widget.Component;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
import com.google.gwt.xml.client.Node;

public class XJavaScript extends XComponent {

    private static int IDIDX = 0;
    private static final String MAXIDLENGTH = "0000";

    private DNDEvent dndEvent;
    // ? (getData()?)
    private String srcData;
    // JavaScriptid
    private String comId;

    public XJavaScript(Node node) {
        super(node, null);
        Node firstNode = node.getFirstChild();
        if (firstNode != null) {
            content = firstNode.getNodeValue();
        }
        if (content == null || content.equals("null")) {
            content = "";
        }
    }

    public XJavaScript(String content) {
        id = "js-" + System.currentTimeMillis();
        this.content = content;
    }

    public XJavaScript(String id, String content) {
        this.id = id;
        this.content = content;
    }

    @Override
    public String getData() {
        return srcData;
    }

    public void setData(String srcData) {
        this.srcData = srcData;
    }

    public void setComId(String comId) {
        this.comId = comId;
    }

    public void setDNDEvent(DNDEvent be) {
        this.dndEvent = be;
    }

    public String getComId() {
        return comId;
    }

    @Override
    public Component build() {
        return null;
    }

    @Override
    public void init() {
        initJSMethod(this);
        super.init();
    }

    /**
     * ????JavaScriptDNDEventData DNDList?
     * 
     * @param jso
     */
    private void updateData(JavaScriptObject jso) {
        JSONValue json = new JSONArray(jso);
        Object obj = JsonConvert.jsonString2Object(json.toString());
        dndEvent.setData(obj);
    }

    public native void initJSMethod(XJavaScript xjavaScript)/*-{
                                                            $wnd.gk.getData = function(id) {
                                                            var value = xjavaScript.@org.gk.engine.client.build.js.XJavaScript::getData()();
                                                            var c = value.charAt(0);
                                                            return c == '[' || c == '{' ? eval('(' + value + ')') : value;
                                                            }
                                                            //JSsetDataEvent Object data?
                                                            $wnd.gk.setData = function(data) {
                                                            xjavaScript.@org.gk.engine.client.build.js.XJavaScript::updateData(Lcom/google/gwt/core/client/JavaScriptObject;)(data);
                                                            }
                                                            //<js>? gk.event ?js?id
                                                            $wnd.gk.event = function(arg1, arg2, arg3) {
                                                            //??
                                                            switch (arguments.length) {
                                                            case 1:
                                                            var id = xjavaScript.@org.gk.engine.client.build.js.XJavaScript::getId()();
                                                            @org.gk.engine.client.Engine::invokeEvent(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;)(id,arg1, null);
                                                            break;
                                                            //??,???
                                                            case 2:
                                                            //??? (id,)
                                                            if (typeof arg2 == 'string') {
                                                            @org.gk.engine.client.Engine::invokeEvent(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;)(arg1, arg2,null);
                                                            } else {
                                                            //?? (,call)
                                                            var id = xjavaScript.@org.gk.engine.client.build.js.XJavaScript::getId()();
                                                            @org.gk.engine.client.Engine::invokeEvent(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;)(id, arg1, arg2);
                                                            }
                                                            break;
                                                            //?? (id,,call)
                                                            case 3:
                                                            @org.gk.engine.client.Engine::invokeEvent(Ljava/lang/String;Ljava/lang/String;Lcom/google/gwt/core/client/JavaScriptObject;)(arg1, arg2,arg3);
                                                            break;
                                                            }
                                                            }
                                                            }-*/;

    protected static void setAttributeValue(String id, Object value) {
        try {
            EventHandler.setAttributeValue(id, value);
        } catch (Exception e) {
            EngineLogger.log(e);
        }
    }

    protected static void setAttributeValue(String id, boolean isArray, JavaScriptObject jsObj) {
        Object info = isArray ? JsonConvert.jsonToList(new JSONArray(jsObj))
                : JsonConvert.jsonToMap(new JSONObject(jsObj));
        setAttributeValue(id, info);
    }

    /**
     * ?json?JavaScript
     * 
     * @param id
     * @return String
     */
    public static String getJSONValue(String id) {
        Object obj = EventHandler.getAttributeValue(id);
        if (obj == null) {
            return null;
        } else if (obj instanceof Map) {
            return new InfoMap((Map) obj).toString();
        } else if (obj instanceof List) {
            return new InfoList((List) obj).toString();
        } else {
            return "" + obj;
        }
    }

    /**
     * id
     * 
     * @return String
     */
    private String getJSContent() {
        return "var id = '" + getComId() + "';" + content;
    }

    /**
     * JavaScripthead
     * 
     * @return Object
     */
    public native Object createScriptNodeToExecute()/*-{
                                                    var content = this.@org.gk.engine.client.build.js.XJavaScript::getJSContent()();
                                                    var id = this.@org.gk.engine.client.build.js.XJavaScript::getId()();
                                                    var script = $doc.createElement("script");
                                                    script.text = content;
                                                    script.id = id;
                                                    var header = $doc.getElementsByTagName("head")[0];
                                                    header.appendChild(script);
                                                    header.removeChild(script);
                                                    }-*/;

    /**
     * 
     * 
     * @param id
     * @param eventType
     */
    private static void fire(String id, String eventType) {
        assert (eventType != null);
        id = id + "." + IEventConstants.ATTRIB_FIRE;
        setAttributeValue(id, eventType);
    }

    /**
     * gul ${id}???id
     * 
     * @param gul
     * @return String
     */
    public static String genUniqueId(String gul) {
        int pos = 0;
        while ((pos = gul.indexOf("${id}")) >= 0) {
            String id = createUniqueId();
            gul = gul.substring(0, pos) + id + gul.substring(pos + 5);
        }
        // ?
        while ((pos = gul.indexOf("$id")) >= 0) {
            String id = createUniqueId();
            gul = gul.substring(0, pos) + id + gul.substring(pos + 3);
        }
        return gul;
    }

    /**
     * gul ${id}???id??? ${}
     * 
     * @param gul
     * @return String
     */
    public static String createUniqueId(String gul) {
        // gul
        List<String> list = JsonConvert.jsonToList(new JSONArray(findReplaceAttributes(gul)));
        for (String key : list) {
            if (key.equals("$id") || key.equals("${id}")) {
                gul = genUniqueId(gul);
            } else {
                gul = gul.replace(key, createUniqueId());
            }
        }
        return gul;
    }

    /**
     * GUL???
     * 
     * @param gul
     * @return JavaScriptObject
     */
    private static native JavaScriptObject findReplaceAttributes(String gul)/*-{
                                                                            var replaces = [];
                                                                            var split = gul.split(/(?=\$)|\'|\"/);
                                                                            for (i = 0; i < split.length; i++) {
                                                                            // ?${...}? ${...??Array
                                                                            if (split[i].match(/\$\{.*\}$/) != null) {
                                                                            replaces.push(split[i]);
                                                                            }
                                                                            }
                                                                            return replaces;
                                                                            }-*/;

    /**
     * ??id
     * 
     * @return String
     */
    private static String createUniqueId() {
        return XDOM.getUniqueId();
    }
}