org.drools.guvnor.client.admin.RepoConfigManager.java Source code

Java tutorial

Introduction

Here is the source code for org.drools.guvnor.client.admin.RepoConfigManager.java

Source

/*
 * Copyright 2010 JBoss Inc
 *
 * 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 org.drools.guvnor.client.admin;

import org.drools.guvnor.client.common.GenericCallback;
import org.drools.guvnor.client.common.InfoPopup;
import org.drools.guvnor.client.common.PrettyFormLayout;
import org.drools.guvnor.client.common.RdbmsConfigurable;
import org.drools.guvnor.client.messages.Constants;
import org.drools.guvnor.client.resources.Images;
import org.drools.guvnor.client.rpc.RepositoryServiceAsync;
import org.drools.guvnor.client.rpc.RepositoryServiceFactory;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.RichTextArea;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class RepoConfigManager extends Composite {

    private static Images images = (Images) GWT.create(Images.class);
    private Constants constants = ((Constants) GWT.create(Constants.class));

    private RepositoryServiceAsync service = RepositoryServiceFactory.getService();
    private RdbmsConfigurable rdbmsConf = new RdbmsConfigurable();
    private VerticalPanel dataInputPanel = new VerticalPanel();
    private HorizontalPanel hPanel1 = new HorizontalPanel();
    private VerticalPanel vPanel2 = new VerticalPanel();
    private RichTextArea repoDisplayArea = new RichTextArea();
    private FlexTable layoutB = new FlexTable();
    private FlexTable layoutC = new FlexTable();
    private DecoratorPanel noJndiInfo = getNoJNDIDbPanel();
    private DecoratorPanel jndiInfo = getJNDIDbPanel();
    private FormPanel saveRepoConfigForm = new FormPanel();
    private Hidden hiddenRepoConfig = new Hidden("repoConfig");

    @SuppressWarnings("deprecation")
    public RepoConfigManager() {
        PrettyFormLayout form = new PrettyFormLayout();
        form.addHeader(images.config(), new HTML(constants.ManageRepositoryConfig()));

        DockPanel dock = new DockPanel();
        dock.setSpacing(4);
        dock.setHorizontalAlignment(DockPanel.ALIGN_CENTER);
        hPanel1.add(getDbTypePanel());
        dataInputPanel.add(hPanel1);
        SimplePanel divider = new SimplePanel();
        divider.setSize("100px", "30px");
        vPanel2.add(divider);
        vPanel2.add(noJndiInfo);
        vPanel2.add(jndiInfo);
        vPanel2.setVisible(false);
        dataInputPanel.add(vPanel2);
        dock.add(dataInputPanel, DockPanel.WEST);

        repoDisplayArea.setSize("740px", "470px");
        repoDisplayArea.setTitle("repository.xml");
        repoDisplayArea.setVisible(false);

        DockPanel idock = new DockPanel();
        idock.setSpacing(4);
        idock.setHorizontalAlignment(DockPanel.ALIGN_CENTER);
        idock.add(repoDisplayArea, DockPanel.WEST);

        final Button saveButton = new Button(constants.SaveRepo());
        saveButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                String name = rdbmsConf.getDbType() + "-repository";
                if (rdbmsConf.isJndi())
                    name += "-jndi";
                hiddenRepoConfig.setValue(repoDisplayArea.getText());
                saveRepoConfigForm.submit();
            }
        });

        saveRepoConfigForm.setEncoding(FormPanel.ENCODING_URLENCODED);
        saveRepoConfigForm.setMethod(FormPanel.METHOD_POST);
        saveRepoConfigForm.setAction(GWT.getModuleBaseURL() + "backup");

        //hiddenRepoConfig.setID("repoConfig");
        //hiddenRepoConfig.setName("repoConfig");

        VerticalPanel formHolder = new VerticalPanel();
        HorizontalPanel saveInfoHolder = new HorizontalPanel();
        saveInfoHolder.add(saveButton);
        saveInfoHolder.add(new InfoPopup(constants.SaveRepo(), constants.SaveRepoInfo()));
        formHolder.add(saveInfoHolder);
        formHolder.add(hiddenRepoConfig);

        saveRepoConfigForm.add(formHolder);
        saveRepoConfigForm.setVisible(false);

        idock.add(saveRepoConfigForm, DockPanel.EAST);

        dock.add(idock, DockPanel.EAST);

        form.startSection(constants.ManageRepositoryConfigDesc());
        form.addAttribute("", dock);
        form.endSection();
        initWidget(form);
    }

    public static ListBox getDatabaseList() {
        Constants cons = ((Constants) GWT.create(Constants.class));
        ListBox list = new ListBox();
        list.addItem(cons.Choose());

        list.addItem("Microsoft SQL Server", "mssql");
        list.addItem("MySQL", "mysql");
        list.addItem("Oracle 9i", "oracle9i");
        list.addItem("Oracle 10g", "oracle10g");
        list.addItem("Oracle 11", "oracle11");
        list.addItem("PostgreSQL", "postgressql");
        list.addItem("Derby", "derby");
        list.addItem("H2", "h2");

        return list;
    }

    private void generateConfig() {
        String name = rdbmsConf.getDbType() + "-repository";
        if (rdbmsConf.isJndi())
            name += "-jndi";
        service.processTemplate(name, rdbmsConf.getMapRep(), new GenericCallback<String>() {
            public void onSuccess(String repoc) {
                showRepoSource(repoc);
            }
        });
        if (!repoDisplayArea.isVisible()) {
            repoDisplayArea.setVisible(true);
            saveRepoConfigForm.setVisible(true);
        }
    }

    private void showRepoSource(String src) {
        //repoDisplayArea.setText(src);
        repoDisplayArea.setHTML("<pre>" + src + "</pre>");
    }

    public DecoratorPanel getDbTypePanel() {
        FlexTable layoutA = new FlexTable();
        layoutA.setCellSpacing(6);
        FlexCellFormatter cellFormatter = layoutA.getFlexCellFormatter();

        // Add a title to the form
        layoutA.setHTML(0, 0, "RDBMS Info");
        cellFormatter.setColSpan(0, 0, 2);
        cellFormatter.setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER);

        layoutA.setHTML(1, 0, constants.SelectRdbmsType());
        final ListBox databaseList = getDatabaseList();
        databaseList.addChangeHandler(new ChangeHandler() {

            public void onChange(ChangeEvent event) {
                ListBox listBox = (ListBox) event.getSource();
                int index = listBox.getSelectedIndex();
                rdbmsConf.setDbType(listBox.getItemText(index));
                layoutB.setHTML(0, 0, listBox.getItemText(index) + " Info");
                layoutC.setHTML(0, 0, listBox.getItemText(index) + " Info");
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        if (rdbmsConf.getDbType() == null || rdbmsConf.getDbType().length() < 1) {
            databaseList.setSelectedIndex(0);
        } else {
            for (int i = 0; i < databaseList.getItemCount(); i++) {
                if (rdbmsConf.getDbType().equals(databaseList.getItemText(i))) {
                    databaseList.setSelectedIndex(i);
                    break;
                }
            }
        }
        databaseList.addChangeHandler(new ChangeHandler() {
            public void onChange(ChangeEvent event) {
                rdbmsConf.setDbType(databaseList.getValue(databaseList.getSelectedIndex()));
            }
        });
        layoutA.setWidget(1, 1, databaseList);

        layoutA.setHTML(2, 0, constants.UseJndi());

        final CheckBox useJndi = new CheckBox();
        useJndi.setValue(rdbmsConf.isJndi());
        useJndi.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                rdbmsConf.setJndi(useJndi.isEnabled());
                if (useJndi.isEnabled()) {
                    noJndiInfo.setVisible(false);
                    jndiInfo.setVisible(true);
                } else {
                    noJndiInfo.setVisible(true);
                    jndiInfo.setVisible(false);
                }
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutA.setWidget(2, 1, useJndi);

        Button continueButton = new Button("Continue");
        continueButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                if (databaseList.getSelectedIndex() == 0) {
                    Window.alert(constants.PleaseSelectRdbmsType());
                    return;
                }
                if (!useJndi.isEnabled()) {
                    jndiInfo.setVisible(false);
                }
                vPanel2.setVisible(true);
            }
        });

        layoutA.setWidget(3, 1, continueButton);
        DecoratorPanel decPanel = new DecoratorPanel();
        decPanel.setWidget(layoutA);
        return decPanel;
    }

    public DecoratorPanel getNoJNDIDbPanel() {
        layoutB.setCellSpacing(6);
        FlexCellFormatter cellFormatter = layoutB.getFlexCellFormatter();

        layoutB.setHTML(0, 0, "");
        cellFormatter.setColSpan(0, 0, 2);
        cellFormatter.setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER);

        layoutB.setHTML(1, 0, "Driver:");
        final TextBox driverInput = new TextBox();
        if (rdbmsConf.getDbDriver() != null && rdbmsConf.getDbDriver().trim().length() > 0) {
            driverInput.setValue(rdbmsConf.getDbDriver());
        }
        driverInput.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutB.setWidget(1, 1, driverInput);

        layoutB.setHTML(2, 0, "URL:");
        final TextBox urlInput = new TextBox();
        if (rdbmsConf.getDbUrl() != null && rdbmsConf.getDbUrl().trim().length() > 0) {
            urlInput.setValue(rdbmsConf.getDbUrl());
        }
        urlInput.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutB.setWidget(2, 1, urlInput);

        layoutB.setHTML(3, 0, "User:");
        final TextBox userNameInput = new TextBox();
        if (rdbmsConf.getDbUser() != null && rdbmsConf.getDbUser().trim().length() > 0) {
            userNameInput.setValue(rdbmsConf.getDbUser());
        }
        userNameInput.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutB.setWidget(3, 1, userNameInput);

        layoutB.setHTML(4, 0, "Password:");
        final PasswordTextBox userPassInput = new PasswordTextBox();
        if (rdbmsConf.getDbPass() != null && rdbmsConf.getDbPass().trim().length() > 0) {
            userPassInput.setValue(rdbmsConf.getDbPass());
        }
        userPassInput.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutB.setWidget(4, 1, userPassInput);

        Button generateButton = new Button(constants.GenerateRepositoryConfiguration());
        generateButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                if (driverInput.getValue() == null || driverInput.getValue().trim().length() < 1) {
                    Window.alert(constants.PleaseEnterDriver());
                    return;
                } else if (urlInput.getValue() == null || urlInput.getValue().trim().length() < 1) {
                    Window.alert(constants.PleaseEnterUrl());
                    return;
                } else if (userNameInput.getValue() == null || userNameInput.getValue().trim().length() < 1) {
                    Window.alert(constants.PleaseEnterUserName());
                    return;
                } else if (userPassInput.getValue() == null || userPassInput.getValue().trim().length() < 1) {
                    Window.alert(constants.PleaseEnterPassword());
                    return;
                }
                rdbmsConf.setDbDriver(driverInput.getValue());
                rdbmsConf.setDbUrl(urlInput.getValue());
                rdbmsConf.setDbUser(userNameInput.getValue());
                rdbmsConf.setDbPass(userPassInput.getValue());
                //rdbmsConf.setJndiDsName(jndiNameInput.getValue());
                generateConfig();
            }
        });
        layoutB.setWidget(5, 1, generateButton);
        DecoratorPanel decPanel = new DecoratorPanel();
        decPanel.setWidget(layoutB);
        return decPanel;
    }

    public DecoratorPanel getJNDIDbPanel() {
        layoutC.setCellSpacing(6);
        FlexCellFormatter cellFormatter = layoutC.getFlexCellFormatter();

        layoutC.setHTML(0, 0, "");
        cellFormatter.setColSpan(0, 0, 2);
        cellFormatter.setHorizontalAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER);

        layoutC.setHTML(1, 0, "JNDI Name");
        final TextBox jndiNameInput = new TextBox();
        if (rdbmsConf.getJndiDsName() != null && rdbmsConf.getJndiDsName().trim().length() > 0) {
            jndiNameInput.setValue(rdbmsConf.getJndiDsName());
        }
        jndiNameInput.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                repoDisplayArea.setVisible(false);
                saveRepoConfigForm.setVisible(false);
            }
        });
        layoutC.setWidget(1, 1, jndiNameInput);

        Button generateButton = new Button(constants.GenerateRepositoryConfiguration());
        generateButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent w) {
                if (jndiNameInput.getValue() == null || jndiNameInput.getValue().trim().length() < 1) {
                    Window.alert(constants.PleaseEnterJndiName());
                    return;
                }
                rdbmsConf.setJndiDsName(jndiNameInput.getValue());
                generateConfig();
            }
        });
        layoutC.setWidget(2, 1, generateButton);

        // Wrap the content in a DecoratorPanel
        DecoratorPanel decPanel = new DecoratorPanel();
        decPanel.setWidget(layoutC);
        return decPanel;
    }
}