/*! ****************************************************************************** * * 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.ui.spoon.delegates; import java.util.List; import org.eclipse.swt.SWT; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.Const; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.i18n.BaseMessages; import org.pentaho.di.repository.Repository; import org.pentaho.di.trans.HasSlaveServersInterface; import org.pentaho.di.ui.cluster.dialog.SlaveServerDialog; import org.pentaho.di.ui.core.PropsUI; import org.pentaho.di.ui.core.dialog.ErrorDialog; import org.pentaho.di.ui.spoon.Spoon; import org.pentaho.di.ui.spoon.SpoonSlave; import org.pentaho.di.ui.spoon.TabMapEntry; import org.pentaho.di.ui.spoon.TabMapEntry.ObjectType; import org.pentaho.xul.swt.tab.TabItem; import org.pentaho.xul.swt.tab.TabSet; public class SpoonSlaveDelegate extends SpoonSharedObjectDelegate { private static Class<?> PKG = Spoon.class; // for i18n purposes, needed by Translator2!! public SpoonSlaveDelegate( Spoon spoon ) { super( spoon ); } public void addSpoonSlave( SlaveServer slaveServer ) { TabSet tabfolder = spoon.tabfolder; // See if there is a SpoonSlave for this slaveServer... String tabName = spoon.delegates.tabs.makeSlaveTabName( slaveServer ); TabMapEntry tabMapEntry = spoon.delegates.tabs.findTabMapEntry( tabName, ObjectType.SLAVE_SERVER ); if ( tabMapEntry == null ) { SpoonSlave spoonSlave = new SpoonSlave( tabfolder.getSwtTabset(), SWT.NONE, spoon, slaveServer ); PropsUI props = PropsUI.getInstance(); TabItem tabItem = new TabItem( tabfolder, tabName, tabName, props.getSashWeights() ); tabItem.setToolTipText( "Status of slave server : " + slaveServer.getName() + " : " + slaveServer.getServerAndPort() ); tabItem.setControl( spoonSlave ); tabMapEntry = new TabMapEntry( tabItem, null, tabName, null, null, spoonSlave, ObjectType.SLAVE_SERVER ); spoon.delegates.tabs.addTab( tabMapEntry ); } int idx = tabfolder.indexOf( tabMapEntry.getTabItem() ); tabfolder.setSelected( idx ); } public void delSlaveServer( HasSlaveServersInterface hasSlaveServersInterface, SlaveServer slaveServer ) throws KettleException { Repository rep = spoon.getRepository(); if ( rep != null && slaveServer.getObjectId() != null ) { // remove the slave server from the repository too... rep.deleteSlave( slaveServer.getObjectId() ); if ( sharedObjectSyncUtil != null ) { sharedObjectSyncUtil.deleteSlaveServer( slaveServer ); } } hasSlaveServersInterface.getSlaveServers().remove( slaveServer ); spoon.refreshTree(); } public void newSlaveServer( HasSlaveServersInterface hasSlaveServersInterface ) { SlaveServer slaveServer = new SlaveServer(); SlaveServerDialog dialog = new SlaveServerDialog( spoon.getShell(), slaveServer, hasSlaveServersInterface.getSlaveServers() ); if ( dialog.open() ) { slaveServer.verifyAndModifySlaveServerName( hasSlaveServersInterface.getSlaveServers(), null ); hasSlaveServersInterface.getSlaveServers().add( slaveServer ); if ( spoon.rep != null ) { try { if ( !spoon.rep.getSecurityProvider().isReadOnly() ) { spoon.rep.save( slaveServer, Const.VERSION_COMMENT_INITIAL_VERSION, null ); // repository objects are "global" if ( sharedObjectSyncUtil != null ) { sharedObjectSyncUtil.reloadJobRepositoryObjects( false ); sharedObjectSyncUtil.reloadTransformationRepositoryObjects( false ); } } else { showSaveErrorDialog( slaveServer, new KettleException( BaseMessages.getString( PKG, "Spoon.Dialog.Exception.ReadOnlyRepositoryUser" ) ) ); } } catch ( KettleException e ) { showSaveErrorDialog( slaveServer, e ); } } spoon.refreshTree(); } } public boolean edit( SlaveServer slaveServer, List<SlaveServer> existingServers ) { String originalName = slaveServer.getName(); SlaveServerDialog dialog = new SlaveServerDialog( spoon.getShell(), slaveServer, existingServers ); if ( dialog.open() ) { if ( spoon.rep != null ) { try { saveSharedObjectToRepository( slaveServer, null ); } catch ( KettleException e ) { showSaveErrorDialog( slaveServer, e ); } } if ( sharedObjectSyncUtil != null ) { sharedObjectSyncUtil.synchronizeSlaveServers( slaveServer, originalName ); } spoon.refreshTree(); spoon.refreshGraph(); return true; } return false; } private void showSaveErrorDialog( SlaveServer slaveServer, KettleException e ) { new ErrorDialog( spoon.getShell(), BaseMessages.getString( PKG, "Spoon.Dialog.ErrorSavingSlave.Title" ), BaseMessages.getString( PKG, "Spoon.Dialog.ErrorSavingSlave.Message", slaveServer.getName() ), e ); } }