/*
* *****************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2017 by Pentaho : http://www.pentaho.com
*
* *******************************************************************************
* 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.engine.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Tree;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.extension.ExtensionPoint;
import org.pentaho.di.core.extension.ExtensionPointInterface;
import org.pentaho.di.core.logging.LogChannelInterface;
import org.pentaho.di.engine.configuration.api.RunConfiguration;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.ui.core.ConstUI;
import org.pentaho.di.ui.spoon.Spoon;
import org.pentaho.di.ui.spoon.TreeSelection;
import java.util.function.Supplier;
/**
* Created by bmorrise on 3/14/17.
*/
@ExtensionPoint( id = "RunConfigurationPopupMenuExtension", description = "Creates popup menus for execution "
+ "environments", extensionPointId = "SpoonPopupMenuExtension" )
public class RunConfigurationPopupMenuExtension implements ExtensionPointInterface {
private static Class<?> PKG = RunConfigurationPopupMenuExtension.class;
private Supplier<Spoon> spoonSupplier = Spoon::getInstance;
private RunConfiguration runConfiguration;
private RunConfigurationDelegate runConfigurationDelegate;
private Menu rootMenu;
private Menu itemMenu;
public RunConfigurationPopupMenuExtension( RunConfigurationDelegate runConfigurationDelegate ) {
this.runConfigurationDelegate = runConfigurationDelegate;
}
@Override public void callExtensionPoint( LogChannelInterface logChannelInterface, Object extension )
throws KettleException {
Menu popupMenu = null;
Tree selectionTree = (Tree) extension;
TreeSelection[] objects = spoonSupplier.get().getTreeObjects( selectionTree );
TreeSelection object = objects[ 0 ];
Object selection = object.getSelection();
if ( selection == RunConfiguration.class ) {
popupMenu = createRootPopupMenu( selectionTree );
} else if ( selection instanceof RunConfiguration ) {
runConfiguration = (RunConfiguration) selection;
if ( runConfiguration.isReadOnly() ) {
return;
}
popupMenu = createItemPopupMenu( selectionTree );
}
if ( popupMenu != null ) {
ConstUI.displayMenu( popupMenu, selectionTree );
} else {
selectionTree.setMenu( null );
}
}
private Menu createRootPopupMenu( Tree tree ) {
if ( rootMenu == null ) {
rootMenu = new Menu( tree );
MenuItem menuItem = new MenuItem( rootMenu, SWT.NONE );
menuItem.setText( BaseMessages.getString( PKG, "RunConfigurationPopupMenuExtension.MenuItem.New" ) );
menuItem.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( SelectionEvent selectionEvent ) {
runConfigurationDelegate.create();
}
} );
}
return rootMenu;
}
private Menu createItemPopupMenu( Tree tree ) {
if ( itemMenu == null ) {
itemMenu = new Menu( tree );
MenuItem editMenuItem = new MenuItem( itemMenu, SWT.NONE );
editMenuItem.setText( BaseMessages.getString( PKG, "RunConfigurationPopupMenuExtension.MenuItem.Edit" ) );
editMenuItem.addSelectionListener( new SelectionAdapter() {
@Override public void widgetSelected( SelectionEvent selectionEvent ) {
runConfigurationDelegate.edit( runConfiguration );
}
} );
MenuItem deleteMenuItem = new MenuItem( itemMenu, SWT.NONE );
deleteMenuItem.setText( BaseMessages.getString( PKG, "RunConfigurationPopupMenuExtension.MenuItem.Delete" ) );
deleteMenuItem.addSelectionListener( new SelectionAdapter() {
@Override public void widgetSelected( SelectionEvent selectionEvent ) {
runConfigurationDelegate.delete( runConfiguration );
}
} );
}
return itemMenu;
}
}