Package org.pentaho.mantle.client.admin

Source Code of org.pentaho.mantle.client.admin.EmailAdminPanelController

/*!
* 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.admin;

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.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.dom.client.MouseUpEvent;
import com.google.gwt.event.dom.client.MouseUpHandler;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.TextBox;
import org.pentaho.gwt.widgets.client.dialogs.IDialogCallback;
import org.pentaho.gwt.widgets.client.dialogs.MessageDialogBox;
import org.pentaho.gwt.widgets.client.utils.string.StringUtils;
import org.pentaho.mantle.client.MantleApplication;
import org.pentaho.mantle.client.messages.Messages;

public class EmailAdminPanelController extends EmailAdminPanel implements ISysAdminPanel, UpdatePasswordController {

  private boolean isDirty = false;
  private JsEmailConfiguration emailConfig;
  private static EmailAdminPanelController emailAdminPanelController;
  private EmailTester emailTester = null;
  private final EmailTestDialog etd = new EmailTestDialog();

  public static EmailAdminPanelController getInstance() {
    if ( emailAdminPanelController == null ) {
      emailAdminPanelController = new EmailAdminPanelController();
    }
    return emailAdminPanelController;
  }

  private EmailAdminPanelController() {
    activate();

    AsyncCallback<String> emailTestCallback = new AsyncCallback<String>() {
      @Override
      public void onFailure( Throwable err ) {
        MantleApplication.hideBusyIndicator();
        etd.getElement().setId( "emailTestDialog" );
        etd.show( err.getMessage() );

      }

      @Override
      public void onSuccess( String message ) {
        MantleApplication.hideBusyIndicator();
        etd.getElement().setId( "emailTestDialog" );
        etd.show( message );
      }
    };

    emailTester = new EmailTester( emailTestCallback );

    testButton.addClickHandler( new ClickHandler() {
      public void onClick( final ClickEvent clickEvent ) {
        testEmail();
      }
    } );

    authenticationCheckBox.addValueChangeHandler( new ValueChangeHandler<Boolean>() {
      public void onValueChange( final ValueChangeEvent<Boolean> booleanValueChangeEvent ) {
        emailConfig.setAuthenticate( booleanValueChangeEvent.getValue() );
        authenticationPanel.setVisible( booleanValueChangeEvent.getValue() );
        setDirty( true );
      }
    } );

    prepareTextBox( smtpHostTextBox, new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        emailConfig.setSmtpHost( smtpHostTextBox.getValue() );
        setDirty( true );
      }
    } );

    prepareTextBox( portTextBox, new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        setDirty( true );
      }
    } );
    portTextBox.addChangeHandler( new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        if ( isPortValid( portTextBox.getValue() ) ) {
          emailConfig.setSmtpPort( Integer.parseInt( portTextBox.getValue() ) );
          setDirty( true );
        } else {
          new MessageDialogBox( Messages.getString( "error" ), Messages.getString( "portValidationLength" ), false
              , false, true ).center();
        }
      }
    } );

    prepareTextBox( fromAddressTextBox, new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        emailConfig.setDefaultFrom( fromAddressTextBox.getValue() );
        setDirty( true );
      }
    } );

    prepareTextBox( fromNameTextBox, new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        emailConfig.setFromName( fromNameTextBox.getValue() );
        setDirty( true );
      }
    } );

    prepareTextBox( userNameTextBox, new ChangeHandler() {
      @Override
      public void onChange( ChangeEvent event ) {
        emailConfig.setUserId( userNameTextBox.getValue() );
        setDirty( true );
      }
    } );

    useSSLCheckBox.addValueChangeHandler( new ValueChangeHandler<Boolean>() {
      public void onValueChange( final ValueChangeEvent<Boolean> booleanValueChangeEvent ) {
        emailConfig.setUseSsl( useSSLCheckBox.getValue() );
        setDirty( true );
      }
    } );

    useStartTLSCheckBox.addValueChangeHandler( new ValueChangeHandler<Boolean>() {
      public void onValueChange( final ValueChangeEvent<Boolean> booleanValueChangeEvent ) {
        emailConfig.setUseStartTls( useStartTLSCheckBox.getValue() );
        setDirty( true );
      }
    } );

    protocolsListBox.addChangeHandler( new ChangeHandler() {
      public void onChange( final ChangeEvent changeEvent ) {
        emailConfig.setSmtpProtocol( protocolsListBox.getItemText( protocolsListBox.getSelectedIndex() ) );
        setDirty( true );
      }
    } );

    saveButton.addClickHandler( new ClickHandler() {
      public void onClick( final ClickEvent clickEvent ) {
        if ( isPortValid( portTextBox.getValue() ) ) {
          setEmailConfig();
        } else {
          new MessageDialogBox( Messages.getString( "error" ), Messages.getString( "portValidationLength" ), false
              , false, true ).center();
        }
      }
    } );

    passwordTextBox.addKeyUpHandler( new KeyUpHandler() {
      public void onKeyUp( final KeyUpEvent keyUpEvent ) {
        emailConfig.setPassword( passwordTextBox.getValue() );
        setDirty( true );
      }
    } );
  }

  public void updatePassword( String password ) {
    emailConfig.setPassword( password );
    passwordTextBox.setValue( password );
    if ( !StringUtils.isEmpty( passwordTextBox.getValue() ) ) {
      passwordTextBox.setEnabled( false );
    }
    setDirty( true );
  }

  // -- Remote Calls.

  private void setEmailConfig() {
    String serviceUrl = GWT.getHostPageBaseURL() + "api/emailconfig/setEmailConfig";
    RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.PUT, serviceUrl );
    try {
      executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
      executableTypesRequestBuilder.setHeader( "Content-Type", "application/json" );
      executableTypesRequestBuilder.sendRequest( emailConfig.getJSONString(), new RequestCallback() {
        public void onError( Request request, Throwable exception ) {
        }

        public void onResponseReceived( Request request, Response response ) {
          setDirty( false );
        }
      } );
    } catch ( RequestException e ) {
      //ignored
    }
  }

  private void testEmail() {

    // show the busy indicator...
    MantleApplication.showBusyIndicator( Messages.getString( "pleaseWait" ), Messages
        .getString( "connectionTest.inprog" ) );
    emailTester.test( emailConfig );

  }

  private void getEmailConfig() {
    String serviceUrl = GWT.getHostPageBaseURL() + "api/emailconfig/getEmailConfig?cb=" + System.currentTimeMillis();
    RequestBuilder executableTypesRequestBuilder = new RequestBuilder( RequestBuilder.GET, serviceUrl );
    executableTypesRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
    executableTypesRequestBuilder.setHeader( "accept", "application/json" );
    try {
      executableTypesRequestBuilder.sendRequest( null, new RequestCallback() {
        public void onError( Request request, Throwable exception ) {
        }

        public void onResponseReceived( Request request, Response response ) {
          emailConfig = JsEmailConfiguration.parseJsonString( response.getText() );
          authenticationCheckBox.setValue( Boolean.parseBoolean( emailConfig.isAuthenticate() + "" ) );
          authenticationPanel.setVisible( Boolean.parseBoolean( emailConfig.isAuthenticate() + "" ) );
          smtpHostTextBox.setValue( emailConfig.getSmtpHost() );
          portTextBox.setValue( emailConfig.getSmtpPort() + "" );
          useStartTLSCheckBox.setValue( Boolean.parseBoolean( emailConfig.isUseStartTls() + "" ) );
          useSSLCheckBox.setValue( Boolean.parseBoolean( emailConfig.isUseSsl() + "" ) );
          fromAddressTextBox.setValue( emailConfig.getDefaultFrom() );
          fromNameTextBox.setValue( emailConfig.getFromName() );
          userNameTextBox.setValue( emailConfig.getUserId() );

          // If password is non-empty.. disable the text-box
          String password = emailConfig.getPassword();
          passwordTextBox.setValue( password );

          String protocol = emailConfig.getSmtpProtocol();
          protocolsListBox.setSelectedIndex( -1 );
          if ( !StringUtils.isEmpty( protocol ) ) {
            for ( int i = 0; i < protocolsListBox.getItemCount(); ++i ) {
              if ( protocol.equalsIgnoreCase( protocolsListBox.getItemText( i ) ) ) {
                protocolsListBox.setSelectedIndex( i );
                break;
              }
            }
          }
        }
      } );
    } catch ( RequestException e ) {
      //ignored
    }
  }

  // -- ISysAdminPanel implementation.

  public void activate() {
    setDirty( false );
    getEmailConfig();
  }

  public String getId() {
    return "emailAdminPanel";
  }

  public void passivate( final AsyncCallback<Boolean> callback ) {
    if ( isDirty ) {
      MessageDialogBox messageBox = new MessageDialogBox( Messages.getString( "confirm" )
          , Messages.getString( "dirtyStateMessage" ), false, false, true, Messages.getString( "yes" ), null
          , Messages.getString( "no" ) );
      messageBox.setCallback( new IDialogCallback() {

        @Override
        public void okPressed() {
          if ( isPortValid( portTextBox.getValue() ) ) {
            setEmailConfig();
            callback.onSuccess( true );
            setDirty( false );
          } else {
            new MessageDialogBox( Messages.getString( "error" ), Messages.getString( "portValidationLength" ), false
                , false, true ).center();
          }
        }

        @Override
        public void cancelPressed() {
          callback.onSuccess( true );
          setDirty( false );
        }
      } );
      messageBox.center();
    } else {
      callback.onSuccess( true );
    }
  }

  private void setDirty( boolean isDirty ) {
    this.isDirty = isDirty;
    saveButton.setEnabled( isDirty );
  }

  private void prepareTextBox( final TextBox textBox, final ChangeHandler changeHandler ) {
    textBox.addKeyUpHandler( new KeyUpHandler() {
      @Override
      public void onKeyUp( KeyUpEvent event ) {
        changeHandler.onChange( null );
      }
    } );
    textBox.addMouseUpHandler( new MouseUpHandler() {
      @Override
      public void onMouseUp( MouseUpEvent event ) {
        final String oldValue = textBox.getValue();
        new Timer() { // set timer for IE 'x' clear input button.
          @Override
          public void run() {
            if ( !oldValue.equals( textBox.getValue() ) ) {
              changeHandler.onChange( null );
            }
          }
        } .schedule( 100 );
      }
    } );
  }
}
TOP

Related Classes of org.pentaho.mantle.client.admin.EmailAdminPanelController

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.