setProperty( root, prop, 0, data != null ? data.get( 0 ) : null, dataName, dataValue ); } catch ( Exception ex ) { throw new KettleException( "Error inject property '" + propName + "' into " + root.getClass(), ex ); if ( data != null ) { for ( int i = 0; i < data.size(); i++ ) { setProperty( root, prop, i, data.get( i ), dataName, dataValue ); boolean found = setProperty( root, prop, i, null, null, dataValue ); if ( !found ) { break;
private void injectVal( BeanInjectionInfo.Property beanInfoProp, Prop prop, StepMetaInterface stepMetaInterface, BeanInjector injector ) { if ( prop.value == null || prop.value.size() == 0 ) { prop.value = singletonList( null ); } try { injector.setProperty( stepMetaInterface, beanInfoProp.getName(), prop.value.stream() .map( value -> { RowMetaAndData rmad = new RowMetaAndData(); rmad.addValue( new ValueMetaString( prop.getName() ), envSubs( value ) ); return rmad; } ).collect( Collectors.toList() ), beanInfoProp.getName() ); } catch ( KettleException e ) { throw new RuntimeException( e ); } }
/** * Check enum property. */ protected void check( String propertyName, EnumGetter getter, Class<?> enumType ) throws KettleException { ValueMetaInterface valueMeta = new ValueMetaString( "f" ); Object[] values = enumType.getEnumConstants(); for ( Object v : values ) { injector.setProperty( meta, propertyName, setValue( valueMeta, v ), "f" ); assertEquals( v, getter.get() ); } try { injector.setProperty( meta, propertyName, setValue( valueMeta, "###" ), "f" ); fail( "Should be passed to enum" ); } catch ( KettleException ex ) { } skipPropertyTest( propertyName ); }
/** * Check string-to-int property. */ protected void checkStringToInt( String propertyName, IntGetter getter, String[] codes, int[] ids ) throws KettleException { if ( codes.length != ids.length ) { throw new RuntimeException( "Wrong codes/ids sizes" ); } ValueMetaInterface valueMetaString = new ValueMetaString( "f" ); for ( int i = 0; i < codes.length; i++ ) { injector.setProperty( meta, propertyName, setValue( valueMetaString, codes[i] ), "f" ); assertEquals( ids[i], getter.get() ); } skipPropertyTest( propertyName ); }
injector.setProperty( targetStepMeta, target.getAttributeKey(), null, source.getField() ); } else {
/** * Check boolean property. */ protected void check( String propertyName, BooleanGetter getter ) throws KettleException { ValueMetaInterface valueMetaString = new ValueMetaString( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "Y" ), "f" ); assertEquals( true, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "N" ), "f" ); assertEquals( false, getter.get() ); ValueMetaInterface valueMetaBoolean = new ValueMetaBoolean( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaBoolean, true ), "f" ); assertEquals( true, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaBoolean, false ), "f" ); assertEquals( false, getter.get() ); skipPropertyTest( propertyName ); }
/** * Check int property. */ protected void check( String propertyName, IntGetter getter ) throws KettleException { ValueMetaInterface valueMetaString = new ValueMetaString( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "1" ), "f" ); assertEquals( 1, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "45" ), "f" ); assertEquals( 45, getter.get() ); ValueMetaInterface valueMetaInteger = new ValueMetaInteger( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaInteger, 1234L ), "f" ); assertEquals( 1234, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaInteger, (long) Integer.MAX_VALUE ), "f" ); assertEquals( Integer.MAX_VALUE, getter.get() ); skipPropertyTest( propertyName ); }
/** * Check long property. */ protected void check( String propertyName, LongGetter getter ) throws KettleException { ValueMetaInterface valueMetaString = new ValueMetaString( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "1" ), "f" ); assertEquals( 1, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaString, "45" ), "f" ); assertEquals( 45, getter.get() ); ValueMetaInterface valueMetaInteger = new ValueMetaInteger( "f" ); injector.setProperty( meta, propertyName, setValue( valueMetaInteger, 1234L ), "f" ); assertEquals( 1234, getter.get() ); injector.setProperty( meta, propertyName, setValue( valueMetaInteger, Long.MAX_VALUE ), "f" ); assertEquals( Long.MAX_VALUE, getter.get() ); skipPropertyTest( propertyName ); }
injector.setProperty( targetStepMeta, target.getAttributeKey(), rows, source.getField() ); wasInjection = true;
@Test public void testInjectionConstant() throws Exception { MetaBeanLevel1 obj = new MetaBeanLevel1(); BeanInjector inj = buildBeanInjectorFor( MetaBeanLevel1.class ); inj.setProperty( obj, "SEPARATOR", null, "<sep>" ); inj.setProperty( obj, "FINT", null, "123" ); inj.setProperty( obj, "FLONG", null, "1234567891213" ); inj.setProperty( obj, "FBOOLEAN", null, "true" ); inj.setProperty( obj, "FILENAME", null, "f1" ); inj.setProperty( obj, "FILENAME_ARRAY", null, "f2" ); assertEquals( "<sep>", obj.getSub().getSeparator() ); assertTrue( obj.fboolean ); assertEquals( 123, obj.fint ); assertEquals( 1234567891213L, obj.flong ); assertNull( obj.getSub().getFiles() ); assertNull( obj.getSub().getFilenames() ); obj.getSub().files = new MetaBeanLevel3[] { new MetaBeanLevel3(), new MetaBeanLevel3() }; obj.getSub().filenames = new String[] { "", "", "" }; inj.setProperty( obj, "FILENAME", null, "f1" ); inj.setProperty( obj, "FILENAME_ARRAY", null, "f2" ); assertEquals( 2, obj.getSub().getFiles().length ); assertEquals( "f1", obj.getSub().getFiles()[0].getName() ); assertEquals( "f1", obj.getSub().getFiles()[1].getName() ); assertArrayEquals( new String[] { "f2", "f2", "f2" }, obj.getSub().getFilenames() ); }
@Test public void testInjectionSets() throws Exception { MetaBeanLevel1 obj = new MetaBeanLevel1(); RowMeta meta = new RowMeta(); meta.addValueMeta( new ValueMetaString( "f1" ) ); meta.addValueMeta( new ValueMetaString( "f2" ) ); meta.addValueMeta( new ValueMetaString( "fstrint" ) ); meta.addValueMeta( new ValueMetaString( "fstrlong" ) ); meta.addValueMeta( new ValueMetaString( "fstrboolean" ) ); // TODO STLOCALE List<RowMetaAndData> rows = new ArrayList<>(); rows.add( new RowMetaAndData( meta, "<sep>", "/tmp/file.txt", "123", "1234567891213", "y" ) ); rows.add( new RowMetaAndData( meta, "<sep>", "/tmp/file2.txt", "123", "1234567891213", "y" ) ); BeanInjector inj = buildBeanInjectorFor( MetaBeanLevel1.class ); inj.setProperty( obj, "SEPARATOR", rows, "f1" ); inj.setProperty( obj, "FILENAME", rows, "f2" ); inj.setProperty( obj, "FILENAME_ARRAY", rows, "f2" ); inj.setProperty( obj, "FBOOLEAN", rows, "fstrboolean" ); inj.setProperty( obj, "FINT", rows, "fstrint" ); inj.setProperty( obj, "FLONG", rows, "fstrlong" ); inj.setProperty( obj, "FIRST", rows, "fstrint" ); assertEquals( "<sep>", obj.getSub().getSeparator() ); assertEquals( "/tmp/file.txt", obj.getSub().getFiles()[0].getName() ); assertTrue( obj.fboolean ); assertEquals( 123, obj.fint ); assertEquals( 1234567891213L, obj.flong ); assertEquals( "123", obj.getSub().first() ); assertArrayEquals( new String[] { "/tmp/file.txt", "/tmp/file2.txt" }, obj.getSub().getFilenames() ); }
/** * Check string property. */ protected void check( String propertyName, StringGetter getter, String... values ) throws KettleException { ValueMetaInterface valueMeta = new ValueMetaString( "f" ); if ( values.length == 0 ) { values = new String[] { "v", "v2", null }; } String correctValue = null; for ( String v : values ) { injector.setProperty( meta, propertyName, setValue( valueMeta, v ), "f" ); if ( v != null ) { // only not-null values injected correctValue = v; } assertEquals( correctValue, getter.get() ); } skipPropertyTest( propertyName ); }
@Test public void testDefaultValue() throws Exception { ValueMetaInterface valueMeta = new ValueMetaString( "f" ); injector.setProperty( meta, "FIELD_NAME", setValue( valueMeta, "testValue" ), "f" ); nonTestedProperties.clear(); // we don't need to test other properties assertEquals( SelectValuesMeta.UNDEFINED, meta.getSelectFields()[ 0 ].getLength() ); assertEquals( SelectValuesMeta.UNDEFINED, meta.getSelectFields()[ 0 ].getPrecision() ); } }
injector.setProperty( meta, "FIELD_TYPE", setValue( mftt, "String" ), "f" ); assertEquals( ValueMetaInterface.TYPE_STRING, meta.getFieldInfo().get( 0 ).type ); injector.setProperty( meta, "FIELD_TYPE", setValue( mftt, "Integer" ), "f" ); assertEquals( ValueMetaInterface.TYPE_INTEGER, meta.getFieldInfo().get( 0 ).type ); injector.setProperty( meta, "FIELD_LENGTH", setValue( new ValueMetaString( "" ), "" ), "" ); assertEquals( -1, meta.getFieldInfo().get( 0 ).length ); injector.setProperty( meta, "FIELD_LENGTH", setValue( new ValueMetaString( " " ), " " ), " " ); assertEquals( -1, meta.getFieldInfo().get( 0 ).length ); injector.setProperty( meta, "FIELD_LENGTH", setValue( new ValueMetaString( "5" ), "5" ), "5" ); assertEquals( 5, meta.getFieldInfo().get( 0 ).length ); injector.setProperty( meta, "FIELD_LENGTH", setValue( new ValueMetaInteger( "4" ), new Long( 4 ) ), "4" ); assertEquals( 4, meta.getFieldInfo().get( 0 ).length ); injector.setProperty( meta, "FIELD_PRECISION", setValue( new ValueMetaString( "" ), "" ), "" ); assertEquals( -1, meta.getFieldInfo().get( 0 ).precision ); injector.setProperty( meta, "FIELD_PRECISION", setValue( new ValueMetaString( " " ), " " ), " " ); assertEquals( -1, meta.getFieldInfo().get( 0 ).precision ); injector.setProperty( meta, "FIELD_PRECISION", setValue( new ValueMetaString( "5" ), "5" ), "5" ); assertEquals( 5, meta.getFieldInfo().get( 0 ).precision ); injector.setProperty( meta, "FIELD_PRECISION", setValue( new ValueMetaInteger( "4" ), new Long( 4 ) ), "4" ); assertEquals( 4, meta.getFieldInfo().get( 0 ).precision );
injector.setProperty( meta, "PARAMETER_NAME", setValue( valueMeta, "f1", "f2" ), "f" ); injector.setProperty( meta, "FIELDNAME", setValue( valueMeta, "v1", "v2" ), "f" ); assertEquals( "v1", meta.getParameterFieldMap().get( "f1" ) ); assertEquals( "v2", meta.getParameterFieldMap().get( "f2" ) );
meta.setDatabasesList( databasesList ); ValueMetaInterface valueMeta = new ValueMetaString( "DBMETA" ); injector.setProperty( meta, "CONNECTION_NAME", setValue( valueMeta, "testDBMeta" ), "DBMETA" ); assertEquals( "testDBMeta", meta.getDatabaseMeta().getName() );
@Test public void testInjectionForArrayPropertyWithoutDefaultConstructor_interface_parameter() throws KettleException { BeanInjector beanInjector = buildBeanInjectorFor( MetadataBeanImplementsInterface.class ); MetadataBeanImplementsInterface targetBean = new MetadataBeanImplementsInterface(); beanInjector.setProperty( targetBean, COMPLEX_NAME, createRowMetaAndData(), FIELD_ONE ); assertNotNull( targetBean.getComplexField() ); assertTrue( targetBean.getComplexField().length == 1 ); assertEquals( TEST_NAME, targetBean.getComplexField()[0].getFieldName() ); }
@Test public void testInjectionForArrayPropertyWithoutDefaultConstructor_class_parameter() throws KettleException { BeanInjector beanInjector = buildBeanInjectorFor( MetadataBean.class ); MetadataBean targetBean = new MetadataBean(); beanInjector.setProperty( targetBean, COMPLEX_NAME, createRowMetaAndData(), FIELD_ONE ); assertNotNull( targetBean.getComplexField() ); assertTrue( targetBean.getComplexField().length == 1 ); assertEquals( TEST_NAME, targetBean.getComplexField()[0].getFieldName() ); }
injector.setProperty( meta, "FIELD_FORMAT", setValue( mftt, "OK" ), "f" ); assertEquals( 0, meta.getFieldFormatType()[0] ); injector.setProperty( meta, "FIELD_FORMAT", setValue( mftt, "DATE" ), "f" ); assertEquals( 1, meta.getFieldFormatType()[0] ); injector.setProperty( meta, "FIELD_FORMAT", setValue( mftt, "TIMESTAMP" ), "f" ); assertEquals( 2, meta.getFieldFormatType()[0] ); injector.setProperty( meta, "FIELD_FORMAT", setValue( mftt, "NUMBER" ), "f" ); assertEquals( 3, meta.getFieldFormatType()[0] ); injector.setProperty( meta, "FIELD_FORMAT", setValue( mftt, "STRING_ESC" ), "f" ); assertEquals( 4, meta.getFieldFormatType()[0] ); skipPropertyTest( "FIELD_FORMAT" );
meta.setParentStepMeta( parentStepMeta ); injector.setProperty( meta, "CONNECTIONNAME", setValue( new ValueMetaString( "my connection 2" ), "my connection 2" ), "my connection 2" );