/*!
* Copyright 2010 - 2015 Pentaho Corporation. All rights reserved.
*
* 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.pentaho.di.ui.repository.pur.repositoryexplorer.abs.controller;
import org.pentaho.di.core.EngineMetaInterface;
import org.pentaho.di.core.logging.DefaultLogLevel;
import org.pentaho.di.core.logging.LogChannel;
import org.pentaho.di.core.logging.LogChannelInterface;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.repository.pur.PurRepository;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.ui.repository.EESpoonPlugin;
import org.pentaho.di.ui.repository.pur.services.IAbsSecurityProvider;
import org.pentaho.di.ui.spoon.ISpoonMenuController;
import org.pentaho.di.ui.spoon.Spoon;
import org.pentaho.di.ui.spoon.job.JobGraph;
import org.pentaho.di.ui.spoon.trans.TransGraph;
import org.pentaho.ui.xul.components.XulMenuitem;
import org.pentaho.ui.xul.components.XulToolbarbutton;
import org.pentaho.ui.xul.containers.XulMenu;
import org.pentaho.ui.xul.containers.XulToolbar;
import org.pentaho.ui.xul.dom.Document;
public class SpoonMenuABSController implements ISpoonMenuController, java.io.Serializable {
private static final long serialVersionUID = -5878581743406400314L; /* EESOURCE: UPDATE SERIALVERUID */
protected LogChannelInterface log;
protected LogLevel logLevel = DefaultLogLevel.getLogLevel();
public SpoonMenuABSController() {
this.log = new LogChannel( this );
}
public String getName() {
return "SpoonMenuABSController"; //$NON-NLS-1$
}
public void updateMenu( Document doc ) {
try {
Spoon spoon = Spoon.getInstance();
boolean createPermitted = true;
boolean executePermitted = true;
// If we are working with an Enterprise Repository
if ( ( spoon != null ) && ( spoon.getRepository() != null ) && ( spoon.getRepository() instanceof PurRepository ) ) {
Repository repo = spoon.getRepository();
// Check for ABS Security
if ( repo.hasService( IAbsSecurityProvider.class ) ) {
IAbsSecurityProvider securityProvider = (IAbsSecurityProvider) repo.getService( IAbsSecurityProvider.class );
// Get create & execute permission
createPermitted = securityProvider.isAllowed( IAbsSecurityProvider.CREATE_CONTENT_ACTION );
executePermitted = securityProvider.isAllowed( IAbsSecurityProvider.EXECUTE_CONTENT_ACTION );
EngineMetaInterface meta = spoon.getActiveMeta();
// If (meta is not null) and (meta is either a Transformation or Job)
if ( ( meta != null ) && ( ( meta instanceof JobMeta ) || ( meta instanceof TransMeta ) ) ) {
// Main spoon toolbar
( (XulToolbarbutton) doc.getElementById( "toolbar-file-new" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulToolbarbutton) doc.getElementById( "toolbar-file-save" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulToolbarbutton) doc.getElementById( "toolbar-file-save-as" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
// Popup menus
( (XulMenuitem) doc.getElementById( "trans-class-new" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "job-class-new" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
// Main spoon menu
( (XulMenu) doc.getElementById( "file-new" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "file-save" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "file-save-as" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "file-close" ) ).setDisabled( !createPermitted ); //$NON-NLS-1$
}
// Handle Execute permissions
( (XulMenuitem) doc.getElementById( "process-run" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-preview" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-debug" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-replay" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-verify" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-impact" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "trans-get-sql" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
// Disable Show Last menu under the Action menu. Disable without execute permissions.
( (XulMenu) doc.getElementById( "trans-last" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
boolean exportAllowed = createPermitted && executePermitted;
( (XulMenu) doc.getElementById( "file-export" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "repository-export-all" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "file-save-as-vfs" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "edit-cut-steps" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "edit-copy-steps" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "edit.copy-file" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
( (XulMenuitem) doc.getElementById( "edit-paste-steps" ) ).setDisabled( !exportAllowed ); //$NON-NLS-1$
// Schedule is a plugin
if ( doc.getElementById( "trans-schedule" ) != null ) {
( (XulMenuitem) doc.getElementById( "trans-schedule" ) ).setDisabled( !executePermitted ); //$NON-NLS-1$
}
TransGraph transGraph = Spoon.getInstance().getActiveTransGraph();
if ( transGraph != null ) {
XulToolbar toolbar = transGraph.getToolbar();
XulToolbarbutton runButton = (XulToolbarbutton) toolbar.getElementById( "trans-run" );
XulToolbarbutton debugButton = (XulToolbarbutton) toolbar.getElementById( "trans-debug" );
XulToolbarbutton previewButton = (XulToolbarbutton) toolbar.getElementById( "trans-preview" );
XulToolbarbutton replayButton = (XulToolbarbutton) toolbar.getElementById( "trans-replay" );
XulToolbarbutton verifyButton = (XulToolbarbutton) toolbar.getElementById( "trans-verify" );
XulToolbarbutton impactButton = (XulToolbarbutton) toolbar.getElementById( "trans-impact" );
XulToolbarbutton generateSqlButton = (XulToolbarbutton) toolbar.getElementById( "trans-get-sql" );
if ( ( runButton != null ) && ( runButton.isDisabled() ^ !executePermitted ) ) {
runButton.setDisabled( !executePermitted );
}
if ( ( debugButton != null ) && ( debugButton.isDisabled() ^ !executePermitted ) ) {
debugButton.setDisabled( !executePermitted );
}
if ( ( previewButton != null ) && ( previewButton.isDisabled() ^ !executePermitted ) ) {
previewButton.setDisabled( !executePermitted );
}
if ( ( replayButton != null ) && ( replayButton.isDisabled() ^ !executePermitted ) ) {
replayButton.setDisabled( !executePermitted );
}
if ( ( verifyButton != null ) && ( verifyButton.isDisabled() ^ !executePermitted ) ) {
verifyButton.setDisabled( !executePermitted );
}
if ( ( impactButton != null ) && ( impactButton.isDisabled() ^ !executePermitted ) ) {
impactButton.setDisabled( !executePermitted );
}
if ( ( generateSqlButton != null ) && ( generateSqlButton.isDisabled() ^ !executePermitted ) ) {
generateSqlButton.setDisabled( !executePermitted );
}
}
JobGraph jobGraph = Spoon.getInstance().getActiveJobGraph();
if ( jobGraph != null ) {
XulToolbar toolbar = jobGraph.getToolbar();
XulToolbarbutton runButton = (XulToolbarbutton) toolbar.getElementById( "job-run" );
XulToolbarbutton generateSqlButton = (XulToolbarbutton) toolbar.getElementById( "job-get-sql" );
if ( ( runButton != null ) && ( runButton.isDisabled() ^ !executePermitted ) ) {
runButton.setDisabled( !executePermitted );
}
if ( ( generateSqlButton != null ) && ( generateSqlButton.isDisabled() ^ !executePermitted ) ) {
generateSqlButton.setDisabled( !executePermitted );
}
}
}
}
EESpoonPlugin.updateChangedWarningDialog( createPermitted );
} catch ( Exception e ) {
// don't let this bomb all the way out, otherwise we'll get stuck: PDI-4670
log.logError( e.getMessage(), e );
}
}
}