Java tutorial
/* * 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; } }