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