From 2fa882af41b0baaee72d4cc0faa7fa44921326aa Mon Sep 17 00:00:00 2001 From: stanislau-strelchanka Date: Fri, 19 Aug 2016 13:32:42 +0300 Subject: [PATCH] PDI-15133 KTR with Filter Rows step does not save TRUE/FALSE settings when exported to XML from repository --- .../di/trans/steps/filterrows/FilterRows.java | 5 ++- .../steps/filterrows/FilterRowsMeta.java | 41 ++++++++++++++++--- .../steps/filterrows/FilterRowsMetaTest.java | 18 ++++++++ 3 files changed, 58 insertions(+), 6 deletions(-) diff --git a/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRows.java b/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRows.java index 46ed8aed450a..bfd38a814466 100644 --- a/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRows.java +++ b/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRows.java @@ -2,7 +2,7 @@ * * Pentaho Data Integration * - * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com + * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * @@ -163,6 +163,9 @@ public boolean init( StepMetaInterface smi, StepDataInterface sdi ) { data.trueStepname = targetStreams.get( 0 ).getStepname(); data.falseStepname = targetStreams.get( 1 ).getStepname(); + meta.setTrueStepname( data.trueStepname ); + meta.setFalseStepname( data.falseStepname ); + data.chosesTargetSteps = targetStreams.get( 0 ).getStepMeta() != null || targetStreams.get( 1 ).getStepMeta() != null; return true; diff --git a/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java b/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java index e178a69af257..43840cb58063 100644 --- a/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java +++ b/engine/src/org/pentaho/di/trans/steps/filterrows/FilterRowsMeta.java @@ -2,7 +2,7 @@ * * Pentaho Data Integration * - * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com + * Copyright (C) 2002-2016 by Pentaho : http://www.pentaho.com * ******************************************************************************* * @@ -72,6 +72,10 @@ public class FilterRowsMeta extends BaseStepMeta implements StepMetaInterface { */ private Condition condition; + private String trueStepname; + + private String falseStepname; + public FilterRowsMeta() { super(); // allocate BaseStepMeta condition = new Condition(); @@ -115,9 +119,9 @@ public Object clone() { public String getXML() throws KettleException { StringBuilder retval = new StringBuilder( 200 ); - List targetStreams = getStepIOMeta().getTargetStreams(); - retval.append( XMLHandler.addTagValue( "send_true_to", targetStreams.get( 0 ).getStepname() ) ); - retval.append( XMLHandler.addTagValue( "send_false_to", targetStreams.get( 1 ).getStepname() ) ); + retval.append( XMLHandler.addTagValue( "send_true_to", trueStepname ) ); + retval.append( XMLHandler.addTagValue( "send_false_to", falseStepname ) ); + retval.append( " " ).append( Const.CR ); if ( condition != null ) { @@ -136,6 +140,9 @@ private void readData( Node stepnode ) throws KettleXMLException { targetStreams.get( 0 ).setSubject( XMLHandler.getTagValue( stepnode, "send_true_to" ) ); targetStreams.get( 1 ).setSubject( XMLHandler.getTagValue( stepnode, "send_false_to" ) ); + this.trueStepname = targetStreams.get( 0 ).getStepname(); + this.falseStepname = targetStreams.get( 1 ).getStepname(); + Node compare = XMLHandler.getSubNode( stepnode, "compare" ); Node condnode = XMLHandler.getSubNode( compare, "condition" ); @@ -203,6 +210,9 @@ public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, Lis targetStreams.get( 0 ).setSubject( rep.getStepAttributeString( id_step, "send_true_to" ) ); targetStreams.get( 1 ).setSubject( rep.getStepAttributeString( id_step, "send_false_to" ) ); + this.trueStepname = targetStreams.get( 0 ).getStepname(); + this.falseStepname = targetStreams.get( 1 ).getStepname(); + condition = rep.loadConditionFromStepAttribute( id_step, "id_condition" ); } catch ( Exception e ) { @@ -213,9 +223,13 @@ public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, Lis @Override public void searchInfoAndTargetSteps( List steps ) { - for ( StreamInterface stream : getStepIOMeta().getTargetStreams() ) { + List targetStreams = getStepIOMeta().getTargetStreams(); + for ( StreamInterface stream : targetStreams ) { stream.setStepMeta( StepMeta.findStep( steps, (String) stream.getSubject() ) ); } + + this.trueStepname = targetStreams.get( 0 ).getStepname(); + this.falseStepname = targetStreams.get( 1 ).getStepname(); } public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException { @@ -382,6 +396,7 @@ public void handleStreamSelection( StreamInterface stream ) { StepMeta falseStep = targets.get( 1 ).getStepMeta(); if ( falseStep != null && falseStep.equals( stream.getStepMeta() ) ) { targets.get( 1 ).setStepMeta( null ); + this.falseStepname = null; } } if ( index == 1 ) { @@ -390,6 +405,7 @@ public void handleStreamSelection( StreamInterface stream ) { StepMeta trueStep = targets.get( 0 ).getStepMeta(); if ( trueStep != null && trueStep.equals( stream.getStepMeta() ) ) { targets.get( 0 ).setStepMeta( null ); + this.trueStepname = null; } } } @@ -423,4 +439,19 @@ public List getOrphanFields( Condition condition, RowMetaInterface prev return orphans; } + public String getTrueStepname() { + return trueStepname; + } + + public void setTrueStepname( String trueStepname ) { + this.trueStepname = trueStepname; + } + + public String getFalseStepname() { + return falseStepname; + } + + public void setFalseStepname( String falseStepname ) { + this.falseStepname = falseStepname; + } } diff --git a/engine/test-src/org/pentaho/di/trans/steps/filterrows/FilterRowsMetaTest.java b/engine/test-src/org/pentaho/di/trans/steps/filterrows/FilterRowsMetaTest.java index 625bf6d0a973..d56a4abe9b3c 100644 --- a/engine/test-src/org/pentaho/di/trans/steps/filterrows/FilterRowsMetaTest.java +++ b/engine/test-src/org/pentaho/di/trans/steps/filterrows/FilterRowsMetaTest.java @@ -28,6 +28,8 @@ import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.*; +import org.pentaho.di.core.Condition; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.plugins.PluginRegistry; @@ -63,4 +65,20 @@ public void testSerialization() throws KettleException { loadSaveTester.testSerialization(); } + @Test + public void testClone() { + FilterRowsMeta filterRowsMeta = new FilterRowsMeta(); + filterRowsMeta.setCondition( new Condition() ); + filterRowsMeta.setTrueStepname( "true" ); + filterRowsMeta.setFalseStepname( "false" ); + + FilterRowsMeta clone = (FilterRowsMeta) filterRowsMeta.clone(); + assertNotNull( clone.getCondition() ); + assertNotNull( clone.getTrueStepname() ); + assertTrue( "true" == clone.getTrueStepname() ); + assertNotNull( clone.getFalseStepname() ); + assertTrue( "false" == clone.getFalseStepname() ); + + } + }