org.openxdata.querybuilder.client.view.QueryBuilderView.java Source code

Java tutorial

Introduction

Here is the source code for org.openxdata.querybuilder.client.view.QueryBuilderView.java

Source

package org.openxdata.querybuilder.client.view;

import org.openxdata.querybuilder.client.sql.SqlBuilder;
import org.openxdata.querybuilder.client.sql.XmlBuilder;
import org.openxdata.sharedlib.client.OpenXdataConstants;
import org.openxdata.sharedlib.client.model.FormDef;
import org.openxdata.sharedlib.client.util.FormUtil;
import org.openxdata.sharedlib.client.xforms.XformParser;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DecoratedTabPanel;
import com.google.gwt.user.client.ui.TextArea;

/**
 * 
 *  www.openxdata.org - Licensed as written in license.txt and original sources of this file and its authors are found in sources.txt.
 *
 */
public class QueryBuilderView extends Composite implements SelectionHandler<Integer>, ResizeHandler {

    private int selectedTabIndex;
    private DecoratedTabPanel tabs = new DecoratedTabPanel();
    private TextArea txtXform = new TextArea();
    private TextArea txtDefXml = new TextArea();
    private TextArea txtSql = new TextArea();

    private FilterConditionsView filterConditionsView = new FilterConditionsView();
    private DisplayFieldsView displayFieldsView = new DisplayFieldsView();

    public QueryBuilderView() {

        txtXform.setWidth("100%");
        txtXform.setHeight("100%");
        tabs.setWidth("100%");
        tabs.setHeight("100%");

        tabs.add(txtXform, "XForms Source");
        tabs.add(filterConditionsView, "Filter Conditions");
        tabs.add(displayFieldsView, "Display Fields");
        tabs.add(txtDefXml, "Definition XML");
        tabs.add(txtSql, "SQL");

        tabs.addSelectionHandler(this);
        initWidget(tabs);

        tabs.selectTab(1);

        Window.addResizeHandler(this);

        //      This is needed for IE
        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
            public void execute() {
                onWindowResized(Window.getClientWidth(), Window.getClientHeight());
            }
        });

        txtXform.addChangeHandler(new ChangeHandler() {
            public void onChange(ChangeEvent event) {
                parseXform();
            }
        });

        txtDefXml.addChangeHandler(new ChangeHandler() {
            public void onChange(ChangeEvent event) {
                parseQueryDef();
            }
        });

        //txtXform.setText(FormUtil.formatXml(getTestXform()));
        //parseXform();

        //txtDefXml.setText(getTestQueryDef());
        //parseQueryDef();
    }

    /**
     * @see com.google.gwt.event.logical.shared.SelectionHandler#onSelection(SelectionEvent)
     */
    public void onSelection(SelectionEvent<Integer> event) {
        selectedTabIndex = event.getSelectedItem();

        FormUtil.dlg.setText("Building " + (selectedTabIndex == 3 ? "Query Definition" : "SQL")); //LocaleText.get("???????")
        FormUtil.dlg.center();

        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
            public void execute() {
                try {
                    if (selectedTabIndex == 3)
                        buildQueryDef();
                    else if (selectedTabIndex == 4)
                        buildSql();

                    FormUtil.dlg.hide();
                } catch (Exception ex) {
                    FormUtil.displayException(ex);
                }
            }
        });
    }

    public void onWindowResized(int width, int height) {
        txtXform.setHeight(height - 50 + OpenXdataConstants.UNITS);
        txtDefXml.setHeight(height - 50 + OpenXdataConstants.UNITS);
        txtSql.setHeight(height - 50 + OpenXdataConstants.UNITS);
    }

    private void parseXform() {
        FormUtil.dlg.setText("Parsing Xform");
        FormUtil.dlg.center();

        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
            public void execute() {
                try {
                    FormDef formDef = null;
                    String xml = txtXform.getText().trim();
                    if (xml.length() > 0)
                        formDef = XformParser.fromXform2FormDef(xml);

                    filterConditionsView.setFormDef(formDef);
                    displayFieldsView.setFormDef(formDef);

                    FormUtil.dlg.hide();
                } catch (Exception ex) {
                    FormUtil.displayException(ex);
                }
            }
        });
    }

    private void parseQueryDef() {
        FormUtil.dlg.setText("Parsing Query Definition");
        FormUtil.dlg.center();

        Scheduler.get().scheduleDeferred(new ScheduledCommand() {
            public void execute() {
                try {
                    String xml = txtDefXml.getText().trim();
                    if (xml.length() > 0) {
                        filterConditionsView.loadQueryDef(xml);
                        displayFieldsView.loadQueryDef(xml);
                    }

                    FormUtil.dlg.hide();
                } catch (Exception ex) {
                    FormUtil.displayException(ex);
                }
            }
        });
    }

    private void buildSql() {
        txtSql.setText(SqlBuilder.buildSql(filterConditionsView.getFormDef(), displayFieldsView.getDisplayFields(),
                filterConditionsView.getFilterConditionRows(), displayFieldsView.getSortFields()));
    }

    private void buildQueryDef() {
        txtDefXml.setText(
                FormUtil.formatXml(FormUtil.formatXml(XmlBuilder.buildXml(filterConditionsView.getFormDef(),
                        filterConditionsView.getFilterConditionRows(), displayFieldsView.getDisplayFields(),
                        displayFieldsView.getSortFields()))));
    }

    public String getQueryDef() {
        buildQueryDef();
        return txtDefXml.getText();
    }

    public String getSql() {
        buildSql();
        return txtSql.getText();
    }

    public void setXform(String xml) {
        txtXform.setText(xml);
        //parseXform();
    }

    public void setQueryDef(String xml) {
        txtDefXml.setText(xml);
        //parseQueryDef();
    }

    public void setSql(String sql) {
        txtSql.setText(sql);
    }

    public void load() {
        parseXform();
        parseQueryDef();
    }

    public void onResize(ResizeEvent event) {
        onWindowResized(Window.getClientWidth(), Window.getClientHeight());
    }

    public void hideDebugTabs() {
        tabs.remove(0);
        tabs.remove(2);
        tabs.remove(2);
    }
}