/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2016 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.partition; import org.pentaho.di.core.Const; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.exception.KettlePluginException; import org.pentaho.di.core.plugins.PluginInterface; import org.pentaho.di.partition.PartitionSchema; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.step.StepPartitioningMeta; import org.pentaho.di.ui.spoon.PartitionSchemasProvider; import java.util.Collections; import java.util.List; /** * @author Evgeniy_Lyakhov@epam.com */ public class PartitionSettings { private final StepMeta stepMeta; private final TransMeta transMeta; private final PartitionSchemasProvider schemasProvider; private final String[] options; private final String[] codes; private final StepMeta before; public PartitionSettings( int exactSize, TransMeta transMeta, StepMeta stepMeta, PartitionSchemasProvider schemasProvider ) { this.transMeta = transMeta; this.stepMeta = stepMeta; this.schemasProvider = schemasProvider; this.options = new String[ exactSize ]; this.codes = new String[ exactSize ]; this.before = (StepMeta) stepMeta.clone(); System.arraycopy( StepPartitioningMeta.methodDescriptions, 0, options, 0, StepPartitioningMeta.methodDescriptions.length ); System.arraycopy( StepPartitioningMeta.methodCodes, 0, codes, 0, StepPartitioningMeta.methodCodes.length ); } public void fillOptionsAndCodesByPlugins( List<PluginInterface> plugins ) { int pluginIndex = 0; for ( PluginInterface plugin : plugins ) { options[ StepPartitioningMeta.methodDescriptions.length + pluginIndex ] = plugin.getDescription(); codes[ StepPartitioningMeta.methodCodes.length + pluginIndex ] = plugin.getIds()[ 0 ]; pluginIndex++; } } public int getDefaultSelectedMethodIndex() { for ( int i = 0; i < codes.length; i++ ) { if ( codes[ i ].equals( stepMeta.getStepPartitioningMeta().getMethod() ) ) { return i; } } return 0; } public int getDefaultSelectedSchemaIndex() { List<String> schemaNames; try { schemaNames = schemasProvider.getPartitionSchemasNames( transMeta ); } catch ( KettleException e ) { schemaNames = Collections.emptyList(); } PartitionSchema partitioningSchema = stepMeta.getStepPartitioningMeta().getPartitionSchema(); int defaultSelectedSchemaIndex = 0; if ( partitioningSchema != null && partitioningSchema.getName() != null && !schemaNames.isEmpty() ) { defaultSelectedSchemaIndex = Const.indexOfString( partitioningSchema.getName(), schemaNames ); } return defaultSelectedSchemaIndex != -1 ? defaultSelectedSchemaIndex : 0; } public String getMethodByMethodDescription( String methodDescription ) { String method = StepPartitioningMeta.methodCodes[ StepPartitioningMeta.PARTITIONING_METHOD_NONE ]; for ( int i = 0; i < options.length; i++ ) { if ( options[ i ].equals( methodDescription ) ) { method = codes[ i ]; } } return method; } public String[] getOptions() { return options; } public String[] getCodes() { return codes; } public List<String> getSchemaNames() { try { return schemasProvider.getPartitionSchemasNames( transMeta ); } catch ( KettleException e ) { return Collections.emptyList(); } } public String[] getSchemaNamesArray() { List<String> schemas = getSchemaNames(); return schemas.toArray( new String[ schemas.size() ] ); } public List<PartitionSchema> getSchemas() { try { return schemasProvider.getPartitionSchemas( transMeta ); } catch ( KettleException e ) { return Collections.emptyList(); } } public StepMeta getStepMeta() { return stepMeta; } public void updateMethodType( int methodType ) { stepMeta.getStepPartitioningMeta().setMethodType( methodType ); } public void updateMethod( String method ) throws KettlePluginException { stepMeta.getStepPartitioningMeta().setMethod( method ); } public void updateSchema( PartitionSchema schema ) { if ( schema != null && schema.getName() != null ) { stepMeta.getStepPartitioningMeta().setPartitionSchema( schema ); } } public void rollback( StepMeta before ) throws KettlePluginException { updateMethod( before.getStepPartitioningMeta().getMethod() ); updateMethodType( before.getStepPartitioningMeta().getMethodType() ); updateSchema( before.getStepPartitioningMeta().getPartitionSchema() ); } public StepMeta getBefore() { return before; } public StepMeta getAfter() { return (StepMeta) stepMeta.clone(); } public TransMeta getTransMeta() { return transMeta; } }