/* * Copyright 2005 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.packages; import org.drools.guvnor.client.common.ErrorPopup; import org.drools.guvnor.client.common.FormStyleLayout; import org.drools.guvnor.client.common.FormStylePopup; import org.drools.guvnor.client.common.GenericCallback; import org.drools.guvnor.client.common.HTMLFileManagerFields; import org.drools.guvnor.client.common.ImageButton; import org.drools.guvnor.client.common.LoadingPopup; import org.drools.guvnor.client.common.RulePackageSelector; import org.drools.guvnor.client.messages.Constants; import org.drools.guvnor.client.resources.Images; import org.drools.guvnor.client.rpc.RepositoryServiceFactory; import org.drools.guvnor.client.util.Format; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FileUpload; 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.SubmitCompleteHandler; import com.google.gwt.user.client.ui.FormPanel.SubmitEvent; import com.google.gwt.user.client.ui.FormPanel.SubmitHandler; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.RadioButton; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /** * This is the wizard used when creating new packages or importing them. * * @author Michael Neale */ public class NewSubPackageWizard extends FormStylePopup { private static Constants constants = GWT.create( Constants.class ); private static Images images = GWT.create( Images.class ); private TextBox nameBox; private TextBox descBox; private RulePackageSelector parentPackage; private final FormStyleLayout importLayout = new FormStyleLayout(); private final FormStyleLayout newPackageLayout = new FormStyleLayout(); public NewSubPackageWizard(final Command afterCreatedEvent) { super( images.newWiz(), constants.CreateANewSubPackage() ); nameBox = new TextBox(); descBox = new TextBox(); parentPackage = new RulePackageSelector(); newPackageLayout.addAttribute( constants.NameColon(), nameBox ); newPackageLayout.addAttribute( constants.DescriptionColon(), descBox ); newPackageLayout.addAttribute( constants.ParentPackage(), parentPackage ); nameBox.setTitle( constants.PackageNameTip() ); RadioButton newPackage = new RadioButton( "action", constants.CreateNewPackageRadio() ); //NON-NLS RadioButton importPackage = new RadioButton( "action", constants.ImportFromDrlRadio() ); //NON-NLS newPackage.setValue( true ); newPackageLayout.setVisible( true ); newPackage.addClickHandler( new ClickHandler() { public void onClick(ClickEvent event) { newPackageLayout.setVisible( true ); importLayout.setVisible( false ); } } ); this.setAfterShow( new Command() { public void execute() { nameBox.setFocus( true ); } } ); importLayout.setVisible( false ); importPackage.addClickHandler( new ClickHandler() { public void onClick(ClickEvent event) { newPackageLayout.setVisible( false ); importLayout.setVisible( true ); } } ); VerticalPanel ab = new VerticalPanel(); ab.add( newPackage ); ab.add( importPackage ); addAttribute( "", ab ); addRow( newPackageLayout ); addRow( importLayout ); importLayout.addAttribute( constants.DRLFileToImport(), newImportWidget( afterCreatedEvent, this ) ); importLayout.addRow( new HTML( "<br/><b>" + constants.NoteNewPackageDrlImportWarning() + "</b>" ) ); importLayout.addRow( new HTML( constants.ImportDRLDesc1() ) ); importLayout.addRow( new HTML( constants.ImportDRLDesc2() ) ); importLayout.addRow( new HTML( constants.ImportDRLDesc3() ) ); Button create = new Button( constants.CreatePackage() ); create.addClickHandler( new ClickHandler() { public void onClick(ClickEvent event) { if ( PackageNameValidator.validatePackageName( nameBox.getText() ) ) { createSubPackageAction( nameBox.getText(), descBox.getText(), parentPackage.getSelectedPackage(), afterCreatedEvent ); hide(); } else { nameBox.setText( "" ); Window.alert( constants.PackageNameCorrectHint() ); } } } ); newPackageLayout.addAttribute( "", create ); } private void createSubPackageAction(final String name, final String descr, String parentPackage, final Command refresh) { LoadingPopup.showMessage( constants.CreatingPackagePleaseWait() ); RepositoryServiceFactory.getService().createSubPackage( name, descr, parentPackage, new GenericCallback<String>() { public void onSuccess(String data) { RulePackageSelector.currentlySelectedPackage = name; LoadingPopup.close(); refresh.execute(); } } ); } public static Widget newImportWidget(final Command afterCreatedEvent, final FormStylePopup parent) { final FormPanel uploadFormPanel = new FormPanel(); uploadFormPanel.setAction( GWT.getModuleBaseURL() + "package" ); uploadFormPanel.setEncoding( FormPanel.ENCODING_MULTIPART ); uploadFormPanel.setMethod( FormPanel.METHOD_POST ); HorizontalPanel panel = new HorizontalPanel(); uploadFormPanel.setWidget( panel ); final FileUpload upload = new FileUpload(); upload.setName( HTMLFileManagerFields.CLASSIC_DRL_IMPORT ); panel.add( upload ); panel.add( new Label( constants.upload() ) ); ImageButton ok = new ImageButton( images.upload(), constants.Import() ); ClickHandler okClickHandler = new ClickHandler() { public void onClick(ClickEvent event) { if ( Window.confirm( constants.ImportMergeWarning() ) ) { LoadingPopup.showMessage( constants.ImportingDRLPleaseWait() ); uploadFormPanel.submit(); } } }; ok.addClickHandler( okClickHandler ); panel.add( ok ); final FormStylePopup packageNamePopup = new FormStylePopup( images.packageLarge(), constants.PackageName() ); HorizontalPanel packageNamePanel = new HorizontalPanel(); packageNamePopup.addRow( new Label( constants.ImportedDRLContainsNoNameForThePackage() ) ); final TextBox packageName = new TextBox(); packageNamePanel.add( new Label( constants.PackageName() + ":" ) ); packageNamePanel.add( packageName ); Button uploadWithNameButton = new Button( constants.OK() ); uploadWithNameButton.addClickHandler( okClickHandler ); packageNamePanel.add( uploadWithNameButton ); packageNamePopup.addRow( packageNamePanel ); uploadFormPanel.addSubmitCompleteHandler( new SubmitCompleteHandler() { public void onSubmitComplete(SubmitCompleteEvent event) { if ( event.getResults().indexOf( "OK" ) > -1 ) { //NON-NLS Window.alert( constants.PackageWasImportedSuccessfully() ); afterCreatedEvent.execute(); parent.hide(); if ( packageNamePopup != null ) { packageNamePopup.hide(); } } else if ( event.getResults().indexOf( "Missing package name." ) > -1 ) { //NON-NLS LoadingPopup.close(); packageNamePopup.show(); } else { ErrorPopup.showMessage( Format.format( constants.UnableToImportIntoThePackage0(), event.getResults() ) ); } LoadingPopup.close(); } } ); uploadFormPanel.addSubmitHandler( new SubmitHandler() { public void onSubmit(SubmitEvent event) { if ( upload.getFilename().length() == 0 ) { Window.alert( constants.YouDidNotChooseADrlFileToImport() ); event.cancel(); } else if ( !upload.getFilename().endsWith( ".drl" ) ) { //NON-NLS Window.alert( constants.YouCanOnlyImportDrlFiles() ); event.cancel(); } else if ( packageName.getText() != null && !packageName.getText().equals( "" ) ) { uploadFormPanel.setAction( uploadFormPanel.getAction() + "?packageName=" + packageName.getText() ); } } } ); return uploadFormPanel; } }