Package org.pentaho.mantle.client.admin

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

/*!
* 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.core.client.JsArray;
import com.google.gwt.core.client.JsonUtils;
import com.google.gwt.dom.client.Style.Unit;
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.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.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockPanel;
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 org.pentaho.gwt.widgets.client.dialogs.IDialogCallback;
import org.pentaho.gwt.widgets.client.utils.string.StringUtils;
import org.pentaho.gwt.widgets.client.wizards.AbstractWizardDialog;
import org.pentaho.mantle.client.dialogs.scheduling.ScheduleRecurrenceDialog;
import org.pentaho.mantle.client.messages.Messages;
import org.pentaho.mantle.client.workspace.JsJob;
import org.pentaho.mantle.client.workspace.JsJobParam;

import java.util.Date;

public class ContentCleanerPanel extends DockPanel implements ISysAdminPanel {

  private static ContentCleanerPanel instance = new ContentCleanerPanel();

  /**
   * Use get instance for use in Admin, otherwise use constructor
   *
   * @return singleton ContentCleanerPanel
   */
  public static ContentCleanerPanel getInstance() {
    return instance;
  }

  public ContentCleanerPanel() {
    setStyleName( "pentaho-admin-panel" );
    activate();
  }

  public void activate() {
    clear();
    String moduleBaseURL = GWT.getModuleBaseURL();
    String moduleName = GWT.getModuleName();
    String contextURL = moduleBaseURL.substring( 0, moduleBaseURL.lastIndexOf( moduleName ) );

    RequestBuilder scheduleFileRequestBuilder =
        new RequestBuilder( RequestBuilder.GET, contextURL + "api/scheduler/getContentCleanerJob?cb="
            + System.currentTimeMillis() );
    scheduleFileRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
    scheduleFileRequestBuilder.setHeader( "Content-Type", "application/json" ); //$NON-NLS-1$//$NON-NLS-2$
    scheduleFileRequestBuilder.setHeader( "accept", "application/json" ); //$NON-NLS-1$//$NON-NLS-2$

    try {
      scheduleFileRequestBuilder.sendRequest( "", new RequestCallback() {
        public void onError( Request request, Throwable exception ) {
        }

        public void onResponseReceived( Request request, Response response ) {
          final TextBox nowTextBox = new TextBox();
          nowTextBox.setWidth( "24px" );
          nowTextBox.getElement().getStyle().setPadding( 5, Unit.PX );
          nowTextBox.getElement().getStyle().setMarginLeft( 5, Unit.PX );
          nowTextBox.getElement().getStyle().setMarginRight( 5, Unit.PX );
          final TextBox scheduleTextBox = new TextBox();
          scheduleTextBox.setVisibleLength( 4 );

          JsJob tmpJsJob = parseJsonJob( JsonUtils.escapeJsonForEval( response.getText() ) );

          boolean fakeJob = false;
          if ( tmpJsJob == null ) {
            tmpJsJob = createJsJob();
            fakeJob = true;
          }
          final JsJob jsJob = tmpJsJob;

          if ( jsJob != null ) {
            scheduleTextBox.setValue( "" + ( Long.parseLong( jsJob.getJobParamValue( "age" ) ) / 86400L ) );
          } else {
            scheduleTextBox.setText( "180" );
          }
          scheduleTextBox.addChangeHandler( new ChangeHandler() {
            public void onChange( ChangeEvent event ) {
              if ( jsJob != null ) {
                JsArray<JsJobParam> params = jsJob.getJobParams();
                for ( int i = 0; i < params.length(); i++ ) {
                  if ( params.get( i ).getName().equals( "age" ) ) {
                    params.get( i ).setValue( "" + ( Long.parseLong( scheduleTextBox.getText() ) * 86400L ) );
                    break;
                  }
                }
              }
            }
          } );

          Label settingsLabel = new Label( Messages.getString( "settings" ) );
          settingsLabel.setStyleName( "pentaho-fieldgroup-major" );
          add( settingsLabel, DockPanel.NORTH );

          VerticalPanel nowPanelWrapper = new VerticalPanel();
          Label deleteNowLabel = new Label( Messages.getString( "deleteGeneratedFilesNow" ) );
          deleteNowLabel.getElement().getStyle().setPaddingTop( 15, Unit.PX );
          deleteNowLabel.setStyleName( "pentaho-fieldgroup-minor" );
          nowPanelWrapper.add( deleteNowLabel );

          HorizontalPanel nowLabelPanel = new HorizontalPanel();
          nowLabelPanel.getElement().getStyle().setPaddingTop( 10, Unit.PX );
          nowLabelPanel.getElement().getStyle().setPaddingBottom( 10, Unit.PX );

          Label deleteGeneratedFilesOlderThan = new Label( Messages.getString( "deleteGeneratedFilesOlderThan" ) );
          deleteGeneratedFilesOlderThan.getElement().getStyle().setPaddingTop( 7, Unit.PX );
          nowLabelPanel.add( deleteGeneratedFilesOlderThan );

          nowLabelPanel.add( nowTextBox );
          nowTextBox.setText( "180" );
          Label days = new Label( Messages.getString( "daysDot" ) );
          days.getElement().getStyle().setPaddingTop( 7, Unit.PX );
          nowLabelPanel.add( days );
          Button deleteNowButton = new Button( Messages.getString( "deleteNow" ) );
          deleteNowButton.setStylePrimaryName( "pentaho-button" );
          deleteNowButton.addStyleName( "first" );
          deleteNowButton.addClickHandler( new ClickHandler() {
            public void onClick( ClickEvent event ) {
              deleteContentNow( Long.parseLong( nowTextBox.getValue() ) * 86400L );
            }
          } );
          nowPanelWrapper.add( nowLabelPanel );
          nowPanelWrapper.add( deleteNowButton );
          add( nowPanelWrapper, DockPanel.NORTH );

          // scheduled
          VerticalPanel scheduledPanel = new VerticalPanel();
          Label deleteScheduleLabel = new Label( Messages.getString( "scheduleDeletionOfGeneratedFiles" ) );
          deleteScheduleLabel.setStyleName( "pentaho-fieldgroup-minor" );
          deleteScheduleLabel.getElement().getStyle().setPaddingTop( 15, Unit.PX );
          scheduledPanel.add( deleteScheduleLabel );

          Label descLabel;
          if ( !fakeJob ) {
            String desc = jsJob.getJobTrigger().getDescription();
            descLabel = new Label( desc );
            scheduledPanel.add( descLabel );
          } else {
            descLabel = new Label( Messages.getString( "generatedFilesAreNotScheduledToBeDeleted" ) );
            scheduledPanel.add( descLabel );
          }
          descLabel.getElement().getStyle().setPaddingTop( 10, Unit.PX );
          descLabel.getElement().getStyle().setPaddingBottom( 10, Unit.PX );

          Button editScheduleButton = new Button( Messages.getString( "edit" ) );
          if ( fakeJob ) {
            editScheduleButton.setText( Messages.getString( "scheduleDeletion" ) );
          }
          Button deleteScheduleButton = new Button( Messages.getString( "cancelSchedule" ) );
          deleteScheduleButton.setStylePrimaryName( "pentaho-button" );
          deleteScheduleButton.addStyleName( "last" );
          deleteScheduleButton.addClickHandler( new ClickHandler() {
            public void onClick( ClickEvent event ) {
              deleteContentCleaner( jsJob );
            }
          } );
          editScheduleButton.setStylePrimaryName( "pentaho-button" );
          editScheduleButton.addStyleName( "first" );
          editScheduleButton.addClickHandler( new ClickHandler() {
            public void onClick( ClickEvent event ) {
              IDialogCallback callback = new IDialogCallback() {
                public void okPressed() {
                  deleteContentCleaner( jsJob );
                }

                public void cancelPressed() {
                }
              };

              HorizontalPanel scheduleLabelPanel = new HorizontalPanel();
              scheduleLabelPanel.add( new Label( Messages.getString( "deleteGeneratedFilesOlderThan" ), false ) );
              scheduleLabelPanel.add( scheduleTextBox );
              scheduleLabelPanel.add( new Label( Messages.getString( "daysUsingTheFollowingRules" ), false ) );
              ScheduleRecurrenceDialog editSchedule =
                  new ScheduleRecurrenceDialog( null, jsJob, callback, false, false,
                      AbstractWizardDialog.ScheduleDialogType.SCHEDULER );
              editSchedule.setShowSuccessDialog( false );
              editSchedule.addCustomPanel( scheduleLabelPanel, DockPanel.NORTH );
              editSchedule.center();
            }
          } );
          HorizontalPanel scheduleButtonPanel = new HorizontalPanel();
          scheduleButtonPanel.add( editScheduleButton );
          if ( !fakeJob ) {
            scheduleButtonPanel.add( deleteScheduleButton );
          }
          scheduledPanel.add( scheduleButtonPanel );
          add( scheduledPanel, DockPanel.NORTH );

          VerticalPanel fillPanel = new VerticalPanel();
          add( fillPanel, DockPanel.NORTH );
          fillPanel.getElement().getParentElement().getStyle().setHeight( 100, Unit.PCT );
        }
      } );
    } catch ( RequestException re ) {
      //ignored
    }

  }

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

  public void passivate( AsyncCallback<Boolean> passivateCallback ) {
    passivateCallback.onSuccess( true );
  }

  /**
   * @param age
   *          in milliseconds
   */
  public void deleteContentNow( long age ) {
    String date = DateTimeFormat.getFormat( PredefinedFormat.ISO_8601 ).format( new Date() );
    String json =
        "{\"jobName\": \"Content Cleaner\", \"actionClass\": \"org.pentaho.platform.admin.GeneratedContentCleaner\","
          + " \"jobParameters\":[ { \"name\": \"age\", \"stringValue\": \""
            + age
            + "\", \"type\": \"string\" }], \"simpleJobTrigger\": { \"endTime\": null, \"repeatCount\": \"0\", "
          + "\"repeatInterval\": \"0\", \"startTime\": \"" + date + "\", \"uiPassParam\": \"RUN_ONCE\"} }";

    String moduleBaseURL = GWT.getModuleBaseURL();
    String moduleName = GWT.getModuleName();
    String contextURL = moduleBaseURL.substring( 0, moduleBaseURL.lastIndexOf( moduleName ) );

    RequestBuilder scheduleFileRequestBuilder =
        new RequestBuilder( RequestBuilder.POST, contextURL + "api/scheduler/job" );
    scheduleFileRequestBuilder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
    scheduleFileRequestBuilder.setHeader( "Content-Type", "application/json" ); //$NON-NLS-1$//$NON-NLS-2$
    try {
      scheduleFileRequestBuilder.sendRequest( json, new RequestCallback() {
        public void onError( Request request, Throwable exception ) {
        }

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

  private final native JsJob parseJsonJob( String json )
  /*-{
    window.top.jobjson = json;
    if (null == json || "" == json) {
      return null;
    }
    var obj = eval('(' + json + ')');
    return obj;
  }-*/;

  private final native JsJob createJsJob()
  /*-{
    var jsJob = new Object();
    jsJob.jobParams = new Object();
    jsJob.jobParams.jobParams = [];
    jsJob.jobParams.jobParams[0] = new Object();
    jsJob.jobParams.jobParams[0].name = "ActionAdapterQuartzJob-ActionClass";
    jsJob.jobParams.jobParams[0].value = "org.pentaho.platform.admin.GeneratedContentCleaner";
    jsJob.jobParams.jobParams[1] = new Object();
    jsJob.jobParams.jobParams[1].name = "age";
    jsJob.jobParams.jobParams[1].value = "15552000";
    jsJob.jobTrigger = new Object();
    jsJob.jobTrigger['@type'] = "simpleJobTrigger";
    jsJob.jobTrigger.repeatCount = -1;
    jsJob.jobTrigger.repeatInterval = 86400;
    jsJob.jobTrigger.scheduleType = "DAILY";
    //jsJob.jobTrigger.startTime = "2013-03-22T09:35:52.276-04:00";
    jsJob.jobName = "GeneratedContentCleaner";
    return jsJob;
  }-*/;

  private void deleteContentCleaner( JsJob jsJob ) {
    if ( jsJob == null || StringUtils.isEmpty( jsJob.getJobId() ) ) {
      activate();
      return;
    }
    final String url = GWT.getHostPageBaseURL() + "api/scheduler/removeJob"; //$NON-NLS-1$
    RequestBuilder builder = new RequestBuilder( RequestBuilder.DELETE, url );
    builder.setHeader( "If-Modified-Since", "01 Jan 1970 00:00:00 GMT" );
    builder.setHeader( "Content-Type", "application/json" ); //$NON-NLS-1$//$NON-NLS-2$

    JSONObject startJobRequest = new JSONObject();
    startJobRequest.put( "jobId", new JSONString( jsJob.getJobId() ) ); //$NON-NLS-1$

    try {
      builder.sendRequest( startJobRequest.toString(), new RequestCallback() {

        public void onError( Request request, Throwable exception ) {
          // showError(exception);
          activate();
        }

        public void onResponseReceived( Request request, Response response ) {
          activate();
        }
      } );
    } catch ( RequestException re ) {
      Window.alert( re.getMessage() );
    }
  }

}
TOP

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

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.