Skip to content

Commit

Permalink
[BACKLOG-5733] - Add MDI support to XML Add - type conversion + fix e…
Browse files Browse the repository at this point in the history
…rror message
  • Loading branch information
AndreyBurikhin committed Mar 17, 2016
1 parent 2e4016d commit f3a89ce
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 5 deletions.
Expand Up @@ -94,9 +94,10 @@ public boolean processRow( StepMetaInterface smi, StepDataInterface sdi ) throws
//
data.fieldIndexes = new int[meta.getOutputFields().length];
for ( int i = 0; i < data.fieldIndexes.length; i++ ) {
data.fieldIndexes[i] = getInputRowMeta().indexOfValue( meta.getOutputFields()[i].getFieldName() );
String fieldsName = meta.getOutputFields()[i].getFieldName();
data.fieldIndexes[i] = getInputRowMeta().indexOfValue( fieldsName );
if ( data.fieldIndexes[i] < 0 ) {
throw new KettleException( BaseMessages.getString( PKG, "AddXML.Exception.FieldNotFound" ) );
throw new KettleException( BaseMessages.getString( PKG, "AddXML.Exception.FieldNotFound", fieldsName ) );
}
}
}
Expand Down
Expand Up @@ -40,7 +40,6 @@ public class XMLField implements Cloneable {
@Injection( name = "OUTPUT_ELEMENT_NAME", group = "OUTPUT_FIELDS" )
private String elementName;

@Injection( name = "OUTPUT_TYPE", group = "OUTPUT_FIELDS" )
private int type;

@Injection( name = "OUTPUT_FORMAT", group = "OUTPUT_FIELDS" )
Expand Down Expand Up @@ -139,6 +138,7 @@ public void setType( int type ) {
this.type = type;
}

@Injection( name = "OUTPUT_TYPE", group = "OUTPUT_FIELDS" )
public void setType( String typeDesc ) {
this.type = ValueMeta.getType( typeDesc );
}
Expand Down
Expand Up @@ -25,6 +25,7 @@
import org.junit.Before;
import org.junit.Test;
import org.pentaho.di.core.injection.BaseMetadataInjectionTest;
import org.pentaho.di.core.row.value.ValueMetaBase;

public class AddXMLMetaInjectionTest extends BaseMetadataInjectionTest<AddXMLMeta> {

Expand Down Expand Up @@ -78,11 +79,12 @@ public String get() {
}
} );

check( "OUTPUT_TYPE", new IntGetter() {
String[] typeNames = ValueMetaBase.getAllTypes();
checkStringToInt( "OUTPUT_TYPE", new IntGetter() {
public int get() {
return meta.getOutputFields()[0].getType();
}
} );
}, typeNames, getTypeCodes( typeNames ) );

check( "OUTPUT_FORMAT", new StringGetter() {
public String get() {
Expand Down Expand Up @@ -139,4 +141,12 @@ public String get() {
} );
}

private static int[] getTypeCodes( String[] typeNames ) {
int[] typeCodes = new int[typeNames.length];
for ( int i = 0; i < typeNames.length; i++ ) {
typeCodes[i] = ValueMetaBase.getType( typeNames[i] );
}
return typeCodes;
}

}
@@ -0,0 +1,79 @@
/*! ******************************************************************************
*
* 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.trans.steps.addxml;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.junit.Test;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.trans.steps.loadsave.LoadSaveTester;
import org.pentaho.di.trans.steps.loadsave.validator.ArrayLoadSaveValidator;
import org.pentaho.di.trans.steps.loadsave.validator.FieldLoadSaveValidator;

public class AddXMLMetaTest {

@Test
public void loadSaveTest() throws KettleException {
List<String> attributes =
Arrays.asList( "omitXMLheader", "omitNullValues", "encoding", "valueName", "rootNode", "outputFields" );

XMLField xmlField = new XMLField();
xmlField.setFieldName( "TEST_FIELD" );
xmlField.setType( 0 );

Map<String, FieldLoadSaveValidator<?>> fieldLoadSaveValidatorTypeMap =
new HashMap<String, FieldLoadSaveValidator<?>>();
fieldLoadSaveValidatorTypeMap.put( XMLField[].class.getCanonicalName(), new ArrayLoadSaveValidator<>(
new XMLFieldLoadSaveValidator( xmlField ), 1 ) );

LoadSaveTester tester =
new LoadSaveTester( AddXMLMeta.class, attributes, new HashMap<String, String>(), new HashMap<String, String>(),
new HashMap<String, FieldLoadSaveValidator<?>>(), fieldLoadSaveValidatorTypeMap );

tester.testRepoRoundTrip();
tester.testXmlRoundTrip();
}

public static class XMLFieldLoadSaveValidator implements FieldLoadSaveValidator<XMLField> {

private final XMLField defaultValue;

public XMLFieldLoadSaveValidator( XMLField defaultValue ) {
this.defaultValue = defaultValue;
}

@Override
public XMLField getTestObject() {
return defaultValue;
}

@Override
public boolean validateTestObject( XMLField testObject, Object actual ) {
return EqualsBuilder.reflectionEquals( testObject, actual );
}
}
}

0 comments on commit f3a89ce

Please sign in to comment.