Package org.pentaho.mantle.client.dialogs

Source Code of org.pentaho.mantle.client.dialogs.ImportDialog

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.mantle.client.dialogs;

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.Element;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.DisclosurePanel;
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.Hidden;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback;
import org.pentaho.gwt.widgets.client.dialogs.IDialogValidatorCallback;
import org.pentaho.gwt.widgets.client.dialogs.PromptDialogBox;
import org.pentaho.gwt.widgets.client.filechooser.RepositoryFile;
import org.pentaho.gwt.widgets.client.listbox.CustomListBox;
import org.pentaho.gwt.widgets.client.listbox.DefaultListItem;
import org.pentaho.mantle.client.MantleApplication;
import org.pentaho.mantle.client.events.EventBusUtil;
import org.pentaho.mantle.client.events.GenericEvent;
import org.pentaho.mantle.client.messages.Messages;

/**
* @author wseyler/modifed for Import parameters by tband
*/
@SuppressWarnings( "deprecation" )
public class ImportDialog extends PromptDialogBox {

  private FormPanel form;
  private final CustomListBox retainOwnershipDropDown = new CustomListBox();
  final CheckBox applyAclPermissions = new CheckBox( Messages.getString( "applyAclPermissions" ), true );

  /**
   * @param repositoryFile
   */
  public ImportDialog( RepositoryFile repositoryFile ) {
    super( Messages.getString( "import" ), Messages.getString( "ok" ), Messages.getString( "cancel" ), false, true ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

    form = new FormPanel();
    form.addSubmitHandler( new SubmitHandler() {
      @Override
      public void onSubmit( SubmitEvent se ) {
        // if no file is selected then do not proceed
        okButton.setEnabled( false );
        cancelButton.setEnabled( false );
        MantleApplication.showBusyIndicator( Messages.getString( "pleaseWait" ), Messages
            .getString( "importInProgress" ) );
      }
    } );
    form.addSubmitCompleteHandler( new SubmitCompleteHandler() {
      @Override
      public void onSubmitComplete( SubmitCompleteEvent sce ) {
        MantleApplication.hideBusyIndicator();
        okButton.setEnabled( false );
        cancelButton.setEnabled( true );
        ImportDialog.this.hide();
        String result = sce.getResults();
        if ( result.length() > 5 ) {
          HTML messageTextBox = null;
          if ( result.contains( "INVALID_MIME_TYPE" ) == true ) {
            messageTextBox = new HTML( Messages.getString( "uploadInvalidFileTypeQuestion", result ) );
          } else {
            logWindow( result, Messages.getString( "importLogWindowTitle" ) );
          }

          if ( messageTextBox != null ) {
            PromptDialogBox dialogBox =
                new PromptDialogBox( Messages.getString( "uploadUnsuccessful" ), Messages.getString( "close" ), null,
                    true, true );
            dialogBox.setContent( messageTextBox );
            dialogBox.center();
          }
        }

        // if mantle_isBrowseRepoDirty=true: do getChildren call
        // if mantle_isBrowseRepoDirty=false: use stored fileBrowserModel in myself.get("cachedData")
        setBrowseRepoDirty( Boolean.TRUE );

        // BISERVER-9319 Refresh browse perspective after import
        final GenericEvent event = new GenericEvent();
        event.setEventSubType( "ImportDialogEvent" );
        EventBusUtil.EVENT_BUS.fireEvent( event );
      }
    } );

    VerticalPanel rootPanel = new VerticalPanel();

    VerticalPanel spacer = new VerticalPanel();
    spacer.setHeight( "10px" );
    rootPanel.add( spacer );

    Label fileLabel = new Label( Messages.getString( "file" ) + ":" );
    final TextBox importDir = new TextBox();
    rootPanel.add( fileLabel );

    okButton.setEnabled( false );

    final TextBox fileTextBox = new TextBox();
    fileTextBox.setHeight( "26px" );
    fileTextBox.setEnabled( false );
   
    //We use an fileNameOverride because FileUpload can only handle US character set reliably.
    final Hidden fileNameOverride = new Hidden( "fileNameOverride" );

    final FileUpload upload = new FileUpload();
    upload.setName( "fileUpload" );
    ChangeHandler fileUploadHandler = new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        fileTextBox.setText( upload.getFilename() );
        if ( !"".equals( importDir.getValue() ) ) {
          //Set the fileNameOverride because the fileUpload object can only reliably transmit US-ASCII
          //character set.  See RFC283 section 2.3 for details
          String fileNameValue = upload.getFilename().replaceAll( "\\\\", "/" );
          fileNameValue = fileNameValue.substring( fileNameValue.lastIndexOf( "/" ) + 1 );
          fileNameOverride.setValue( fileNameValue );
          okButton.setEnabled( true );
        } else {
          okButton.setEnabled( false );
        }
      }
    };
    upload.addChangeHandler( fileUploadHandler );
    upload.setVisible( false );

    HorizontalPanel fileUploadPanel = new HorizontalPanel();
    fileUploadPanel.add( fileTextBox );
    fileUploadPanel.add( new HTML( " " ) );

    Button browseButton = new Button( Messages.getString( "browse" ) + "..." );
    browseButton.setStyleName( "pentaho-button" );
    fileUploadPanel.add( browseButton );
    browseButton.addClickHandler( new ClickHandler() {
      @Override
      public void onClick( ClickEvent event ) {
        setRetainOwnershipState();
        jsClickUpload( upload.getElement() );
      }
    } );

    rootPanel.add( fileUploadPanel );
    rootPanel.add( upload );

    applyAclPermissions.setName( "applyAclPermissions" );
    applyAclPermissions.setValue( Boolean.FALSE );
    applyAclPermissions.setFormValue( "false" );
    applyAclPermissions.setEnabled( true );
    applyAclPermissions.setVisible( false );

    final CheckBox overwriteAclPermissions = new CheckBox( Messages.getString( "overwriteAclPermissions" ), true );
    overwriteAclPermissions.setName( "overwriteAclPermissions" );
    applyAclPermissions.setValue( Boolean.FALSE );
    applyAclPermissions.setFormValue( "false" );
    overwriteAclPermissions.setEnabled( true );
    overwriteAclPermissions.setVisible( false );

    final Hidden overwriteFile = new Hidden( "overwriteFile" );
    overwriteFile.setValue( "true" );

    final Hidden logLevel = new Hidden( "logLevel" );
    logLevel.setValue( "ERROR" );

    final Hidden retainOwnership = new Hidden( "retainOwnership" );
    retainOwnership.setValue( "true" );
   
    rootPanel.add( applyAclPermissions );
    rootPanel.add( overwriteAclPermissions );
    rootPanel.add( overwriteFile );
    rootPanel.add( logLevel );
    rootPanel.add( retainOwnership );
    rootPanel.add( fileNameOverride );

    spacer = new VerticalPanel();
    spacer.setHeight( "4px" );
    rootPanel.add( spacer );

    DisclosurePanel disclosurePanel = new DisclosurePanel( Messages.getString( "advancedOptions" ) );
    disclosurePanel.getHeader().setStyleName( "gwt-Label" );
    HorizontalPanel mainPanel = new HorizontalPanel();
    mainPanel.add( new HTML( " " ) );
    VerticalPanel disclosureContent = new VerticalPanel();

    HTML replaceLabel = new HTML( Messages.getString( "fileExists" ) );
    replaceLabel.setStyleName( "gwt-Label" );
    disclosureContent.add( replaceLabel );

    final CustomListBox overwriteFileDropDown = new CustomListBox();
    final CustomListBox filePermissionsDropDown = new CustomListBox();

    DefaultListItem replaceListItem = new DefaultListItem( Messages.getString( "replaceFile" ) );
    replaceListItem.setValue( "true" );
    overwriteFileDropDown.addItem( replaceListItem );
    DefaultListItem doNotImportListItem = new DefaultListItem( Messages.getString( "doNotImport" ) );
    doNotImportListItem.setValue( "false" );
    overwriteFileDropDown.addItem( doNotImportListItem );
    overwriteFileDropDown.setVisibleRowCount( 1 );
    disclosureContent.add( overwriteFileDropDown );

    spacer = new VerticalPanel();
    spacer.setHeight( "4px" );
    disclosureContent.add( spacer );

    HTML filePermissionsLabel = new HTML( Messages.getString( "filePermissions" ) );
    filePermissionsLabel.setStyleName( "gwt-Label" );
    disclosureContent.add( filePermissionsLabel );

    DefaultListItem usePermissionsListItem = new DefaultListItem( Messages.getString( "usePermissions" ) );
    usePermissionsListItem.setValue( "false" );
    filePermissionsDropDown.addItem( usePermissionsListItem ); // If selected set "overwriteAclPermissions" to
    // false.
    DefaultListItem retainPermissionsListItem = new DefaultListItem( Messages.getString( "retainPermissions" ) );
    retainPermissionsListItem.setValue( "true" );
    filePermissionsDropDown.addItem( retainPermissionsListItem ); // If selected set "overwriteAclPermissions" to
    // true.

    final ChangeListener filePermissionsHandler = new ChangeListener() {
      @Override
      public void onChange( Widget sender ) {
        String value = filePermissionsDropDown.getSelectedItem().getValue().toString();

        applyAclPermissions.setValue( Boolean.valueOf( value ) );
        applyAclPermissions.setFormValue( value );
        overwriteAclPermissions.setFormValue( value );
        overwriteAclPermissions.setValue( Boolean.valueOf( value ) );
        setRetainOwnershipState();
      }
    };
    filePermissionsDropDown.addChangeListener( filePermissionsHandler );
    filePermissionsDropDown.setVisibleRowCount( 1 );
    disclosureContent.add( filePermissionsDropDown );

    spacer = new VerticalPanel();
    spacer.setHeight( "4px" );
    disclosureContent.add( spacer );

    HTML fileOwnershipLabel = new HTML( Messages.getString( "fileOwnership" ) );
    fileOwnershipLabel.setStyleName( "gwt-Label" );
    disclosureContent.add( fileOwnershipLabel );

    retainOwnershipDropDown.addChangeListener( new ChangeListener() {
      @Override
      public void onChange( Widget sender ) {
        String value = retainOwnershipDropDown.getSelectedItem().getValue().toString();
        retainOwnership.setValue( value );
      }
    } );
    DefaultListItem keepOwnershipListItem = new DefaultListItem( Messages.getString( "keepOwnership" ) );
    keepOwnershipListItem.setValue( "true" );
    retainOwnershipDropDown.addItem( keepOwnershipListItem );
    DefaultListItem assignOwnershipListItem = new DefaultListItem( Messages.getString( "assignOwnership" ) );
    assignOwnershipListItem.setValue( "false" );
    retainOwnershipDropDown.addItem( assignOwnershipListItem );

    retainOwnershipDropDown.setVisibleRowCount( 1 );
    disclosureContent.add( retainOwnershipDropDown );

    spacer = new VerticalPanel();
    spacer.setHeight( "4px" );
    disclosureContent.add( spacer );

    ChangeListener overwriteFileHandler = new ChangeListener() {
      @Override
      public void onChange( Widget sender ) {
        String value = overwriteFileDropDown.getSelectedItem().getValue().toString();
        overwriteFile.setValue( value );
      }
    };
    overwriteFileDropDown.addChangeListener( overwriteFileHandler );

    HTML loggingLabel = new HTML( Messages.getString( "logging" ) );
    loggingLabel.setStyleName( "gwt-Label" );
    disclosureContent.add( loggingLabel );

    final CustomListBox loggingDropDown = new CustomListBox();
    loggingDropDown.addChangeListener( new ChangeListener() {
      public void onChange( Widget sender ) {
        String value = loggingDropDown.getSelectedItem().getValue().toString();
        logLevel.setValue( value );
      }
    } );
    DefaultListItem noneListItem = new DefaultListItem( Messages.getString( "none" ) );
    noneListItem.setValue( "ERROR" );
    loggingDropDown.addItem( noneListItem );
    DefaultListItem shortListItem = new DefaultListItem( Messages.getString( "short" ) );
    shortListItem.setValue( "WARN" );
    loggingDropDown.addItem( shortListItem );
    DefaultListItem debugListItem = new DefaultListItem( Messages.getString( "verbose" ) );
    debugListItem.setValue( "TRACE" );
    loggingDropDown.addItem( debugListItem );
    loggingDropDown.setVisibleRowCount( 1 );
    disclosureContent.add( loggingDropDown );

    mainPanel.add( disclosureContent );
    disclosurePanel.setContent( mainPanel );
    rootPanel.add( disclosurePanel );

    importDir.setName( "importDir" );
    importDir.setText( repositoryFile.getPath() );
    importDir.setVisible( false );

    rootPanel.add( importDir );

    form.setEncoding( FormPanel.ENCODING_MULTIPART );
    form.setMethod( FormPanel.METHOD_POST );

    setFormAction();

    form.add( rootPanel );

    setContent( form );
  }

  native void jsClickUpload( Element uploadElement )
  /*-{
     uploadElement.click();
  }-*/;

  private static native void logWindow( String innerText, String windowTitle )
  /*-{
     var logWindow = window.open('', '', 'width=640, height=480, location=no, menubar=yes, toolbar=yes', false);
     var htmlText = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
     <html><head><title>' + windowTitle + '</title></head><body bgcolor="#FFFFFF" topmargin="6" leftmargin="6">'
     + innerText + "</body></html>";
     logWindow.document.write(htmlText);
  }-*/;

  private void setFormAction() {
    String moduleBaseURL = GWT.getModuleBaseURL();
    String moduleName = GWT.getModuleName();
    String contextURL = moduleBaseURL.substring( 0, moduleBaseURL.lastIndexOf( moduleName ) );
    String importURL = contextURL + "api/repo/files/import";
    form.setAction( importURL );
  }

  public FormPanel getForm() {
    return form;
  }

  protected void onOk() {
    IDialogCallback callback = this.getCallback();
    IDialogValidatorCallback validatorCallback = this.getValidatorCallback();
    if ( validatorCallback == null || ( validatorCallback != null && validatorCallback.validate() ) ) {
      try {
        if ( callback != null ) {
          setFormAction();
          callback.okPressed();
        }
      } catch ( Throwable dontCare ) {
        // ignored
      }
    }
  }

  private static native void setBrowseRepoDirty( boolean isDirty )
  /*-{
      $wnd.mantle_isBrowseRepoDirty = isDirty;
  }-*/;

  // This is a work around of a GWT Widget bug. If you disable a CustomerListBox before
  // it is rendered it will stay two lines even when setVisibleRowCount( 1 ) is called.
  // Furthermore, the listbox will not be resized to fit the text. By forcing the list
  // box to disable during the browse button hander, instead of prior to displaying, we
  // circumvent this problem while still forcing the disabled state, as needed.
  private void setRetainOwnershipState() {
    if ( !applyAclPermissions.getValue() ) {
      retainOwnershipDropDown.setSelectedIndex( 0 );
      retainOwnershipDropDown.setEnabled( false );
    } else {
      retainOwnershipDropDown.setEnabled( true );
    }
  }
}
TOP

Related Classes of org.pentaho.mantle.client.dialogs.ImportDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.