com.qualogy.qafe.gwt.client.factory.MainFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.qualogy.qafe.gwt.client.factory.MainFactory.java

Source

/**
 * Copyright 2008-2015 Qualogy Solutions B.V.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.qualogy.qafe.gwt.client.factory;

import org.gwt.mosaic.ui.client.MessageBox;
import org.gwt.mosaic.ui.client.ScrollLayoutPanel;
import org.gwt.mosaic.ui.client.WindowPanel;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.event.logical.shared.ResizeEvent;
import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.Frame;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.TextBoxBase;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.qualogy.qafe.gwt.client.component.ShowPanelComponent;
import com.qualogy.qafe.gwt.client.context.ClientApplicationContext;
import com.qualogy.qafe.gwt.client.vo.ui.QAFEKeywordsGVO;
import com.qualogy.qafe.gwt.client.vo.ui.TextFieldGVO;

public class MainFactory {

    private MainFactory() {
    }

    public static void createTryMeWindow(String subwindow) {

        final WindowPanel w = new WindowPanel("Try me!");

        w.setResizable(true);

        w.setAnimationEnabled(true);
        w.setSize("800px", "500px");

        VerticalPanel verticalPanel = new VerticalPanel();
        final ScrollLayoutPanel vp = new ScrollLayoutPanel();
        vp.setAlwaysShowScrollBars(false);
        vp.setWidth("800px");
        vp.setHeight("500px");
        w.setWidget(verticalPanel);
        // vp.setSpacing(5);
        // vp.setWidth("100%");
        final TabPanel tabPanel = new TabPanel();
        tabPanel.setAnimationEnabled(true);
        tabPanel.setWidth("580px");
        tabPanel.setHeight("500px");

        DockPanel dockPanel = new DockPanel();
        dockPanel.setWidth("580px");
        dockPanel.setHeight("500px");
        tabPanel.add(dockPanel, "Insert code!");
        final TextArea textArea = new TextArea();
        textArea.setVisibleLines(30);
        textArea.setHeight("auto");
        textArea.setWidth("580px");
        DOM.setElementAttribute(textArea.getElement(), "font-size", "10pt");

        dockPanel.add(textArea, DockPanel.CENTER);
        final MenuBar menu = new MenuBar();
        MenuBar renderMenu = new MenuBar(true);
        w.addResizeHandler(new ResizeHandler() {

            public void onResize(ResizeEvent event) {
                int height = event.getHeight();
                int width = event.getWidth();

                if (w.getWidget() != null) {
                    w.setHeight((height) + "px");
                    w.setWidth((width) + "px");
                    vp.setHeight((height - 20) + "px");
                    vp.setWidth((width - 20) + "px");
                    tabPanel.setHeight((height - 20) + "px");
                    tabPanel.setWidth((width - 20) + "px");
                    menu.setWidth((width) + "px");
                    textArea.setWidth((width - 20) + "px");
                }

            }
        });

        MenuItem gwtMenuItem = new MenuItem("GWT output", new Command() {

            public void execute() {
                String xml = textArea.getText();
                if (xml == null || xml.length() == 0) {
                    MessageBox.error("Try me:Error", "There is no input");
                } else {
                    MainFactoryActions.processUIXml(xml);
                }

            }
        });
        MenuItem flexMenuItem = new MenuItem("Flex output", new Command() {

            public void execute() {
                String xml = textArea.getText();
                if (xml == null || xml.length() == 0) {
                    MessageBox.error("Try me:Error", "There is no input");
                } else {
                    MainFactoryActions.processUIXmlFlex(xml);
                }

            }
        });

        renderMenu.addItem(gwtMenuItem);
        renderMenu.addItem(flexMenuItem);

        MenuBar codeMenu = new MenuBar(true);

        MenuItem clearXmlInput = new MenuItem("Clear", new Command() {

            public void execute() {
                textArea.setText("");

            }
        });

        MenuItem createHeaderButton = new MenuItem("Create Header", new Command() {

            public void execute() {
                final String headerText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"
                        + "<application-mapping xmlns=\"http://qafe.com/schema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://qafe.com/schema http://www.qafe.com/schema/2.2/application-mapping.xsd\"> \n"
                        + "  <!-- PLEASE ENTER YOUR CODE HERE --> \n" + "</application-mapping> \n";

                textArea.setText(headerText);

            }
        });

        MenuItem createSampleAppButton = new MenuItem("Create Sample Application", new Command() {

            public void execute() {
                final String sampleText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"
                        + "<application-mapping xmlns=\"http://qafe.com/schema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://qafe.com/schema http://www.qafe.com/schema/2.2/application-mapping.xsd\"> \n"
                        + "<presentation-tier>\n" + "  <view>\n"
                        + "    <window id=\"window1\" displayname=\"Hello World\" width=\"200\" height=\"200\">\n"
                        + "      <rootpanel id=\"myRootPanel\">   \n" + "        <verticallayout>\n\n"
                        + "          <!-- PLEASE ENTER HERE YOUR CODE -->\n\n"
                        + "          <label id=\"mylabel\" displayname=\"Hello World\" />\n\n"
                        + "        </verticallayout>\n" + "      </rootpanel>\n" + "    </window>\n" + " </view>\n"
                        + "</presentation-tier>\n" +

                        "</application-mapping> \n";

                textArea.setText(sampleText);

            }
        });

        codeMenu.addItem(clearXmlInput);
        codeMenu.addItem(createHeaderButton);
        codeMenu.addItem(createSampleAppButton);

        menu.addItem("Render", renderMenu);
        menu.addItem("Code", codeMenu);

        if (menu != null) {
            verticalPanel.add(menu);
        }
        verticalPanel.add(vp);

        // w.setWidget(tabPanel);

        /*
         * FMB Upload
         */
        final FormPanel fmbForm = new FormPanel();
        fmbForm.setAction(GWT.getModuleBaseURL() + "/rpc.fmbupload");

        // Because we're going to add a FileUpload widget, we'll need to set the
        // form to use the POST method, and multipart MIME encoding.
        fmbForm.setEncoding(FormPanel.ENCODING_MULTIPART);
        fmbForm.setMethod(FormPanel.METHOD_POST);
        // Create a panel to hold all of the form widgets.
        VerticalPanel panelFmbUpload = new VerticalPanel();
        panelFmbUpload.setWidth("580px");
        panelFmbUpload.setHeight("500px");
        // panelFmbUpload.setHeight("100%");

        final FileUpload fmbFile = new FileUpload();
        final TextBox emailBox = new TextBox();
        final TextBox phoneBox = new TextBox();
        fmbFile.setName("fmbUploadElement");

        // Add an event handler to the form.
        fmbForm.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {

            public void onSubmitComplete(SubmitCompleteEvent event) {

                if (event.getResults() != null) {
                    if (event.getResults().startsWith("Conversion failed")) {
                        ClientApplicationContext.getInstance().log("Conversion failed",
                                "The file doesn't seem to be a valid Oracle Forms file. If you still want it to be converted for demo purpose, you can also send it to info@qafe.com",
                                true);

                    } else if (event.getResults().startsWith("UUID")) {

                        String[] split = event.getResults().split("=");
                        if (split.length == 2) {
                            String uuid = split[1];
                            MainFactoryActions.processUIByUUID(uuid, textArea);
                            MainFactoryActions.notify("FMB uploaded with filename [" + fmbFile.getFilename() + "]",
                                    "The message was sent by " + emailBox.getText() + " with optional phonenr: "
                                            + phoneBox.getText());
                            tabPanel.selectTab(0);
                        }
                    } else {
                        // firefox workaround
                        String[] split = event.getResults().split("=");
                        if (split.length == 2) {
                            String uuid = split[1];

                            uuid = uuid.replaceAll("</pre>", "");
                            MainFactoryActions.processUIByUUID(uuid, textArea);
                            MainFactoryActions.notify("FMB uploaded with filename [" + fmbFile.getFilename() + "]",
                                    "The message was sent by " + emailBox.getText() + " with optional phonenr: "
                                            + phoneBox.getText());
                            tabPanel.selectTab(0);
                        } else {
                            ClientApplicationContext.getInstance().log(event.getResults());
                        }
                    }

                } else {
                    ClientApplicationContext.getInstance().log(
                            "The Forms Conversion process could not handle this file. Please check the file.",
                            "Check whether or not this file is an FMB (not an FMX)", true);
                }
            }
        });

        FlexTable tempFmbPanel = new FlexTable();
        tempFmbPanel.setWidget(0, 1, fmbFile);
        tempFmbPanel.setWidget(0, 0, new Label("Input for FMB"));

        tempFmbPanel.setWidget(1, 0, new HTML(
                "<p>Note: the FMB you are uploading is only for <span style=\"color:red;\">demo</span> purpose.</p>"
                        + "<p>FMB's can have external dependencies like <span style=\"color:red;\">PLL, OLB's, images</span>,etc. Since they are <span style=\"color:red;\">not</span> included in the upload, the output might not appear correct.</p>"
                        + "<p>For a more detailed conversion of your FMB's please contact us at <span style=\"color:red;\">info@qafe.com </span></p> <p/>"
                        + "<p>Please fill in the information below, so that we can contact you for more information</p> "));
        tempFmbPanel.getFlexCellFormatter().setColSpan(1, 0, 2);

        tempFmbPanel.setWidget(2, 0, new Label("E-mail: (required)"));

        emailBox.setName("fmbEmail");
        emailBox.addBlurHandler(new BlurHandler() {

            public void onBlur(BlurEvent event) {
                String textValue = ((TextBoxBase) event.getSource()).getText();
                if (textValue != null) {
                    if (textValue.replaceFirst(TextFieldGVO.REGEXP_TYPE_EMAIL_VALUE, "").length() > 0) {
                        ClientApplicationContext.getInstance().log("Email validation error",
                                TextFieldGVO.TYPE_EMAIL_DEFAULT_MESSAGE, true);
                    }
                }

            }
        });
        tempFmbPanel.setWidget(2, 1, emailBox);

        tempFmbPanel.setWidget(3, 0, new Label("Phonenr:"));

        phoneBox.setName("fmbPhone");
        phoneBox.addBlurHandler(new BlurHandler() {

            public void onBlur(BlurEvent event) {

            }
        });
        tempFmbPanel.setWidget(3, 1, phoneBox);

        fmbForm.add(tempFmbPanel);

        panelFmbUpload.add(fmbForm);
        // Add a 'submit' button.
        panelFmbUpload.add(new Button("Generate", new ClickHandler() {

            public void onClick(ClickEvent event) {
                fmbForm.submit();

            }
        }));
        // Add an event handler to the form.
        fmbForm.addSubmitHandler(new FormPanel.SubmitHandler() {
            public void onSubmit(SubmitEvent event) {
                // This event is fired just before the form is submitted. We can take
                // this opportunity to perform validation.
                if (emailBox.getText().length() == 0) {
                    ClientApplicationContext.getInstance().log("Email validation error",
                            "Please fill in your email address", true);
                    event.cancel();
                } else if (fmbFile.getFilename() == null || fmbFile.getFilename().length() == 0) {
                    ClientApplicationContext.getInstance().log("Uploaded file validation error",
                            "There is no file selected. Please select one to continue", true);
                    event.cancel();
                }
            }
        });

        tabPanel.add(panelFmbUpload, "Forms Conversion");

        vp.add(tabPanel);
        w.center();
        if (QAFEKeywordsGVO.SYSTEM_MENUITEM_TRYME_FORMS.equals(subwindow)) {
            tabPanel.selectTab(1);

        } else {
            tabPanel.selectTab(0);
        }
    }

    public static void createWindowWithUrl(String title, String url) {
        createWindowWithUrl(title, url, 640, 480, true, true, 0, 0, false);

    }

    public static void createWindowWithUrl(String title, String url, int width, int height, boolean resizable,
            boolean centered, int top, int left, boolean modal) {
        Frame frame = new Frame(url);
        DOM.setStyleAttribute(frame.getElement(), "border", "none");

        if (ClientApplicationContext.getInstance().isMDI()) {
            final WindowPanel sized = new WindowPanel(title);
            sized.addCloseHandler(new CloseHandler<PopupPanel>() {
                public void onClose(CloseEvent<PopupPanel> event) {
                    if (ClientApplicationContext.getInstance().internalWindowCount > 0) {
                        ClientApplicationContext.getInstance().internalWindowCount--;
                    }
                }
            });
            sized.setResizable(resizable);

            sized.setAnimationEnabled(true);
            sized.setSize("" + width + "px", "" + height + "px");
            sized.setModal(modal);
            sized.setWidget(frame);
            if (centered) {
                sized.center();
            } else if (top > 0 && left > 0) {
                sized.setPopupPosition(left, top);
                sized.show();
            } else {
                sized.show();
            }
        } else {
            //   ExtendedWindow.resizeTo(width, height);
            WindowFactory.setWidgetToMainPanel(frame, null);
        }

    }

    public static void showActivationDialog(String activationSignature, final AsyncCallback<String> callback) {
        final ShowPanelComponent showPanel = new ShowPanelComponent(false, true, 0, 0) {
            @Override
            public void show() {
                super.show();
                DOM.setStyleAttribute(getElement(), "position", "fixed");
            }
        };

        String activationLink = "http://www.qafe.com/activation";
        VerticalPanel verticalPanel = new VerticalPanel();
        HTML html = new HTML("A valid activation file can not be found."
                + "<p>1) Please click <a target='_blank' href='" + activationLink + "?signature="
                + activationSignature + "&product=qafe-platform'>here</a> to acquire the activation key"
                + ", use the activation signature: " + activationSignature
                + "</br>2) Then fill in the activation key you have received in the field below<p>");
        verticalPanel.add(html);

        FlexTable panel = new FlexTable();
        verticalPanel.add(panel);

        Label label = new Label("Activation key");
        panel.setWidget(0, 0, label);
        final TextBox textBoxActivationCode = new TextBox();
        panel.setWidget(0, 1, textBoxActivationCode);

        Button buttonActivate = new Button("Activate");
        buttonActivate.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                String activationCode = textBoxActivationCode.getText();
                if (activationCode.isEmpty()) {
                    ClientApplicationContext.getInstance().log("", "Activation key is required", true);
                    return;
                }
                callback.onSuccess(activationCode);
                showPanel.clear();
                showPanel.hide(true);
            }
        });
        panel.setWidget(0, 2, buttonActivate);

        showPanel.setWidget(verticalPanel);
        showPanel.center();
    }

}