/*! ******************************************************************************
*
* 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.rest;
import java.util.List;
import org.pentaho.di.core.CheckResult;
import org.pentaho.di.core.CheckResultInterface;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.util.Utils;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.encryption.Encr;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleStepException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.row.RowMetaInterface;
import org.pentaho.di.core.row.ValueMetaInterface;
import org.pentaho.di.core.row.value.ValueMetaInteger;
import org.pentaho.di.core.row.value.ValueMetaString;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.core.xml.XMLHandler;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.shared.SharedObjectInterface;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDataInterface;
import org.pentaho.di.trans.step.StepInterface;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.step.StepMetaInterface;
import org.pentaho.metastore.api.IMetaStore;
import org.w3c.dom.Node;
/**
* @author Samatar
* @since 16-jan-2011
*
*/
public class RestMeta extends BaseStepMeta implements StepMetaInterface {
private static Class<?> PKG = RestMeta.class; // for i18n purposes, needed by Translator2!!
public static final String[] APPLICATION_TYPES = new String[] {
"TEXT PLAIN", "XML", "JSON", "OCTET STREAM", "XHTML", "FORM URLENCODED", "ATOM XML", "SVG XML", "TEXT XML" };
public static final String APPLICATION_TYPE_TEXT_PLAIN = "TEXT PLAIN";
public static final String APPLICATION_TYPE_XML = "XML";
public static final String APPLICATION_TYPE_JSON = "JSON";
public static final String APPLICATION_TYPE_OCTET_STREAM = "OCTET STREAM";
public static final String APPLICATION_TYPE_XHTML = "XHTML";
public static final String APPLICATION_TYPE_FORM_URLENCODED = "FORM URLENCODED";
public static final String APPLICATION_TYPE_ATOM_XML = "ATOM XML";
public static final String APPLICATION_TYPE_SVG_XML = "SVG XML";
public static final String APPLICATION_TYPE_TEXT_XML = "TEXT XML";
private String applicationType;
public static final String[] HTTP_METHODS = new String[] { "GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS", "PATCH"};
public static final String HTTP_METHOD_GET = "GET";
public static final String HTTP_METHOD_POST = "POST";
public static final String HTTP_METHOD_PUT = "PUT";
public static final String HTTP_METHOD_DELETE = "DELETE";
public static final String HTTP_METHOD_HEAD = "HEAD";
public static final String HTTP_METHOD_OPTIONS = "OPTIONS";
public static final String HTTP_METHOD_PATCH = "PATCH";
/** URL / service to be called */
private String url;
private boolean urlInField;
private String urlField;
/** headers name */
private String[] headerField;
private String[] headerName;
/** Query parameters name */
private String[] parameterField;
private String[] parameterName;
/** Matrix parameters name */
private String[] matrixParameterField;
private String[] matrixParameterName;
/** function result: new value name */
private String fieldName;
private String resultCodeFieldName;
private String responseTimeFieldName;
private String responseHeaderFieldName;
/** proxy **/
private String proxyHost;
private String proxyPort;
private String httpLogin;
private String httpPassword;
private boolean preemptive;
/** Body fieldname **/
private String bodyField;
/** HTTP Method **/
private String method;
private boolean dynamicMethod;
private String methodFieldName;
/** Trust store **/
private String trustStoreFile;
private String trustStorePassword;
public RestMeta() {
super(); // allocate BaseStepMeta
}
/**
* @return Returns the method.
*/
public String getMethod() {
return method;
}
/**
* @param value
* The method to set.
*/
public void setMethod( String value ) {
this.method = value;
}
/**
* @return Returns the bodyField.
*/
public String getBodyField() {
return bodyField;
}
/**
* @param value
* The bodyField to set.
*/
public void setBodyField( String value ) {
this.bodyField = value;
}
/**
* @return Returns the headerName.
*/
public String[] getHeaderName() {
return headerName;
}
/**
* @param value
* The headerName to set.
*/
public void setHeaderName( String[] value ) {
this.headerName = value;
}
/**
* @return Returns the parameterField.
*/
public String[] getParameterField() {
return parameterField;
}
/**
* @param value
* The parameterField to set.
*/
public void setParameterField( String[] value ) {
this.parameterField = value;
}
/**
* @return Returns the parameterName.
*/
public String[] getParameterName() {
return parameterName;
}
/**
* @param value
* The parameterName to set.
*/
public void setParameterName( String[] value ) {
this.parameterName = value;
}
/**
* @return Returns the matrixParameterField.
*/
public String[] getMatrixParameterField() {
return matrixParameterField;
}
/**
* @param value
* The matrixParameterField to set.
*/
public void setMatrixParameterField( String[] value ) {
this.matrixParameterField = value;
}
/**
* @return Returns the matrixParameterName.
*/
public String[] getMatrixParameterName() {
return matrixParameterName;
}
/**
* @param value
* The matrixParameterName to set.
*/
public void setMatrixParameterName( String[] value ) {
this.matrixParameterName = value;
}
/**
* @return Returns the headerField.
*/
public String[] getHeaderField() {
return headerField;
}
/**
* @param value
* The headerField to set.
*/
public void setHeaderField( String[] value ) {
this.headerField = value;
}
/**
* @return Returns the procedure.
*/
public String getUrl() {
return url;
}
/**
* @param procedure
* The procedure to set.
*/
public void setUrl( String procedure ) {
this.url = procedure;
}
/**
* @return Is the url coded in a field?
*/
public boolean isUrlInField() {
return urlInField;
}
/**
* @param urlInField
* Is the url coded in a field?
*/
public void setUrlInField( boolean urlInField ) {
this.urlInField = urlInField;
}
/**
* @return Is preemptive?
*/
public boolean isPreemptive() {
return preemptive;
}
/**
* @param preemptive
* Ispreemptive?
*/
public void setPreemptive( boolean preemptive ) {
this.preemptive = preemptive;
}
/**
* @return Is the method defined in a field?
*/
public boolean isDynamicMethod() {
return dynamicMethod;
}
/**
* @param dynamicMethod
* If the method is defined in a field?
*/
public void setDynamicMethod( boolean dynamicMethod ) {
this.dynamicMethod = dynamicMethod;
}
/**
* @return methodFieldName
*/
public String getMethodFieldName() {
return methodFieldName;
}
/**
* @param methodFieldName
*/
public void setMethodFieldName( String methodFieldName ) {
this.methodFieldName = methodFieldName;
}
/**
* @return The field name that contains the url.
*/
public String getUrlField() {
return urlField;
}
/**
* @param urlField
* name of the field that contains the url
*/
public void setUrlField( String urlField ) {
this.urlField = urlField;
}
/**
* @return Returns the resultName.
*/
public String getFieldName() {
return fieldName;
}
/**
* @param resultName
* The resultName to set.
*/
public void setFieldName( String resultName ) {
this.fieldName = resultName;
}
@Override
public void loadXML( Node stepnode, List<DatabaseMeta> databases, IMetaStore metaStore ) throws KettleXMLException {
readData( stepnode, databases );
}
@Deprecated
public void allocate( int nrheaders, int nrparamers ) {
allocate( nrheaders, nrparamers, 0 );
}
public void allocate( int nrheaders, int nrparamers, int nrmatrixparameters ) {
headerField = new String[nrheaders];
headerName = new String[nrheaders];
parameterField = new String[nrparamers];
parameterName = new String[nrparamers];
matrixParameterField = new String[nrmatrixparameters];
matrixParameterName = new String[nrmatrixparameters];
}
@Override
public Object clone() {
RestMeta retval = (RestMeta) super.clone();
int nrheaders = headerName.length;
int nrparameters = parameterField.length;
int nrmatrixparameters = matrixParameterField.length;
retval.allocate( nrheaders, nrparameters, nrmatrixparameters );
System.arraycopy( headerField, 0, retval.headerField, 0, nrheaders );
System.arraycopy( headerName, 0, retval.headerName, 0, nrheaders );
System.arraycopy( parameterField, 0, retval.parameterField, 0, nrparameters );
System.arraycopy( parameterName, 0, retval.parameterName, 0, nrparameters );
System.arraycopy( matrixParameterField, 0, retval.matrixParameterField, 0, nrmatrixparameters );
System.arraycopy( matrixParameterName, 0, retval.matrixParameterName, 0, nrmatrixparameters );
return retval;
}
@Override
public void setDefault() {
int i;
int nrheaders = 0;
int nrparameters = 0;
int nrmatrixparameters = 0;
allocate( nrheaders, nrparameters, nrmatrixparameters );
for ( i = 0; i < nrheaders; i++ ) {
this.headerField[i] = "header" + i;
this.headerName[i] = "header";
}
for ( i = 0; i < nrparameters; i++ ) {
this.parameterField[i] = "param" + i;
this.parameterName[i] = "param";
}
for ( i = 0; i < nrmatrixparameters; i++ ) {
this.matrixParameterField[i] = "matrixparam" + i;
this.matrixParameterName[i] = "matrixparam";
}
this.fieldName = "result";
this.resultCodeFieldName = "";
this.responseTimeFieldName = "";
this.responseHeaderFieldName = "";
this.method = HTTP_METHOD_GET;
this.dynamicMethod = false;
this.methodFieldName = null;
this.preemptive = false;
this.trustStoreFile = null;
this.trustStorePassword = null;
this.applicationType = APPLICATION_TYPE_TEXT_PLAIN;
}
@Override
public void getFields( RowMetaInterface inputRowMeta, String name, RowMetaInterface[] info, StepMeta nextStep,
VariableSpace space, Repository repository, IMetaStore metaStore ) throws KettleStepException {
if ( !Utils.isEmpty( fieldName ) ) {
ValueMetaInterface v = new ValueMetaString( space.environmentSubstitute( fieldName ) );
v.setOrigin( name );
inputRowMeta.addValueMeta( v );
}
if ( !Utils.isEmpty( resultCodeFieldName ) ) {
ValueMetaInterface v =
new ValueMetaInteger( space.environmentSubstitute( resultCodeFieldName ) );
v.setOrigin( name );
inputRowMeta.addValueMeta( v );
}
if ( !Utils.isEmpty( responseTimeFieldName ) ) {
ValueMetaInterface v =
new ValueMetaInteger( space.environmentSubstitute( responseTimeFieldName ) );
v.setOrigin( name );
inputRowMeta.addValueMeta( v );
}
String headerFieldName = space.environmentSubstitute( responseHeaderFieldName );
if ( !Utils.isEmpty( headerFieldName ) ) {
ValueMetaInterface v =
new ValueMetaString( headerFieldName );
v.setOrigin( name );
inputRowMeta.addValueMeta( v );
}
}
@Override
public String getXML() {
StringBuilder retval = new StringBuilder();
retval.append( " " ).append( XMLHandler.addTagValue( "applicationType", applicationType ) );
retval.append( " " ).append( XMLHandler.addTagValue( "method", method ) );
retval.append( " " ).append( XMLHandler.addTagValue( "url", url ) );
retval.append( " " ).append( XMLHandler.addTagValue( "urlInField", urlInField ) );
retval.append( " " ).append( XMLHandler.addTagValue( "dynamicMethod", dynamicMethod ) );
retval.append( " " ).append( XMLHandler.addTagValue( "methodFieldName", methodFieldName ) );
retval.append( " " ).append( XMLHandler.addTagValue( "urlField", urlField ) );
retval.append( " " ).append( XMLHandler.addTagValue( "bodyField", bodyField ) );
retval.append( " " ).append( XMLHandler.addTagValue( "httpLogin", httpLogin ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "httpPassword", Encr.encryptPasswordIfNotUsingVariables( httpPassword ) ) );
retval.append( " " ).append( XMLHandler.addTagValue( "proxyHost", proxyHost ) );
retval.append( " " ).append( XMLHandler.addTagValue( "proxyPort", proxyPort ) );
retval.append( " " ).append( XMLHandler.addTagValue( "preemptive", preemptive ) );
retval.append( " " ).append( XMLHandler.addTagValue( "trustStoreFile", trustStoreFile ) );
retval.append( " " ).append(
XMLHandler.addTagValue( "trustStorePassword", Encr.encryptPasswordIfNotUsingVariables( trustStorePassword ) ) );
retval.append( " <headers>" ).append( Const.CR );
for ( int i = 0, len = ( headerName != null ? headerName.length : 0 ); i < len; i++ ) {
retval.append( " <header>" ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "field", headerField[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "name", headerName[i] ) );
retval.append( " </header>" ).append( Const.CR );
}
retval.append( " </headers>" ).append( Const.CR );
retval.append( " <parameters>" ).append( Const.CR );
for ( int i = 0, len = ( parameterName != null ? parameterName.length : 0 ); i < len; i++ ) {
retval.append( " <parameter>" ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "field", parameterField[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "name", parameterName[i] ) );
retval.append( " </parameter>" ).append( Const.CR );
}
retval.append( " </parameters>" ).append( Const.CR );
retval.append( " <matrixParameters>" ).append( Const.CR );
for ( int i = 0, len = ( matrixParameterName != null ? matrixParameterName.length : 0 ); i < len; i++ ) {
retval.append( " <matrixParameter>" ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "field", matrixParameterField[i] ) );
retval.append( " " ).append( XMLHandler.addTagValue( "name", matrixParameterName[i] ) );
retval.append( " </matrixParameter>" ).append( Const.CR );
}
retval.append( " </matrixParameters>" ).append( Const.CR );
retval.append( " <result>" ).append( Const.CR );
retval.append( " " ).append( XMLHandler.addTagValue( "name", fieldName ) );
retval.append( " " ).append( XMLHandler.addTagValue( "code", resultCodeFieldName ) );
retval.append( " " ).append( XMLHandler.addTagValue( "response_time", responseTimeFieldName ) );
retval.append( " " ).append( XMLHandler.addTagValue( "response_header", responseHeaderFieldName ) );
retval.append( " </result>" ).append( Const.CR );
return retval.toString();
}
private void readData( Node stepnode, List<? extends SharedObjectInterface> databases ) throws KettleXMLException {
try {
applicationType = XMLHandler.getTagValue( stepnode, "applicationType" );
method = XMLHandler.getTagValue( stepnode, "method" );
url = XMLHandler.getTagValue( stepnode, "url" );
urlInField = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "urlInField" ) );
methodFieldName = XMLHandler.getTagValue( stepnode, "methodFieldName" );
dynamicMethod = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "dynamicMethod" ) );
urlField = XMLHandler.getTagValue( stepnode, "urlField" );
bodyField = XMLHandler.getTagValue( stepnode, "bodyField" );
httpLogin = XMLHandler.getTagValue( stepnode, "httpLogin" );
httpPassword = Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( stepnode, "httpPassword" ) );
proxyHost = XMLHandler.getTagValue( stepnode, "proxyHost" );
proxyPort = XMLHandler.getTagValue( stepnode, "proxyPort" );
preemptive = "Y".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, "preemptive" ) );
trustStoreFile = XMLHandler.getTagValue( stepnode, "trustStoreFile" );
trustStorePassword =
Encr.decryptPasswordOptionallyEncrypted( XMLHandler.getTagValue( stepnode, "trustStorePassword" ) );
Node headernode = XMLHandler.getSubNode( stepnode, "headers" );
int nrheaders = XMLHandler.countNodes( headernode, "header" );
Node paramnode = XMLHandler.getSubNode( stepnode, "parameters" );
int nrparameters = XMLHandler.countNodes( paramnode, "parameter" );
Node matrixparamnode = XMLHandler.getSubNode( stepnode, "matrixParameters" );
int nrmatrixparameters = XMLHandler.countNodes( matrixparamnode, "matrixParameter" );
allocate( nrheaders, nrparameters, nrmatrixparameters );
for ( int i = 0; i < nrheaders; i++ ) {
Node anode = XMLHandler.getSubNodeByNr( headernode, "header", i );
headerField[i] = XMLHandler.getTagValue( anode, "field" );
headerName[i] = XMLHandler.getTagValue( anode, "name" );
}
for ( int i = 0; i < nrparameters; i++ ) {
Node anode = XMLHandler.getSubNodeByNr( paramnode, "parameter", i );
parameterField[i] = XMLHandler.getTagValue( anode, "field" );
parameterName[i] = XMLHandler.getTagValue( anode, "name" );
}
for ( int i = 0; i < nrmatrixparameters; i++ ) {
Node anode = XMLHandler.getSubNodeByNr( matrixparamnode, "matrixParameter", i );
matrixParameterField[i] = XMLHandler.getTagValue( anode, "field" );
matrixParameterName[i] = XMLHandler.getTagValue( anode, "name" );
}
fieldName = XMLHandler.getTagValue( stepnode, "result", "name" ); // Optional, can be null
resultCodeFieldName = XMLHandler.getTagValue( stepnode, "result", "code" ); // Optional, can be null
responseTimeFieldName = XMLHandler.getTagValue( stepnode, "result", "response_time" ); // Optional, can be null
responseHeaderFieldName = XMLHandler.getTagValue( stepnode, "result", "response_header" ); // Optional, can be null
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString( PKG, "RestMeta.Exception.UnableToReadStepInfo" ), e );
}
}
@Override
public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {
try {
applicationType = rep.getStepAttributeString( id_step, "applicationType" );
method = rep.getStepAttributeString( id_step, "method" );
url = rep.getStepAttributeString( id_step, "url" );
urlInField = rep.getStepAttributeBoolean( id_step, "urlInField" );
methodFieldName = rep.getStepAttributeString( id_step, "methodFieldName" );
dynamicMethod = rep.getStepAttributeBoolean( id_step, "dynamicMethod" );
urlField = rep.getStepAttributeString( id_step, "urlField" );
bodyField = rep.getStepAttributeString( id_step, "bodyField" );
httpLogin = rep.getStepAttributeString( id_step, "httpLogin" );
httpPassword =
Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( id_step, "httpPassword" ) );
proxyHost = rep.getStepAttributeString( id_step, "proxyHost" );
proxyPort = rep.getStepAttributeString( id_step, "proxyPort" );
trustStoreFile = rep.getStepAttributeString( id_step, "trustStoreFile" );
trustStorePassword =
Encr.decryptPasswordOptionallyEncrypted( rep.getStepAttributeString( id_step, "trustStorePassword" ) );
preemptive = rep.getStepAttributeBoolean( id_step, "preemptive" );
int nrheaders = rep.countNrStepAttributes( id_step, "header_field" );
int nrparams = rep.countNrStepAttributes( id_step, "parameter_field" );
int nrmatrixparams = rep.countNrStepAttributes( id_step, "matrix_parameter_field" );
allocate( nrheaders, nrparams, nrmatrixparams );
for ( int i = 0; i < nrheaders; i++ ) {
headerField[i] = rep.getStepAttributeString( id_step, i, "header_field" );
headerName[i] = rep.getStepAttributeString( id_step, i, "header_name" );
}
for ( int i = 0; i < nrparams; i++ ) {
parameterField[i] = rep.getStepAttributeString( id_step, i, "parameter_field" );
parameterName[i] = rep.getStepAttributeString( id_step, i, "parameter_name" );
}
for ( int i = 0; i < nrmatrixparams; i++ ) {
matrixParameterField[i] = rep.getStepAttributeString( id_step, i, "matrix_parameter_field" );
matrixParameterName[i] = rep.getStepAttributeString( id_step, i, "matrix_parameter_name" );
}
fieldName = rep.getStepAttributeString( id_step, "result_name" );
resultCodeFieldName = rep.getStepAttributeString( id_step, "result_code" );
responseTimeFieldName = rep.getStepAttributeString( id_step, "response_time" );
responseHeaderFieldName = rep.getStepAttributeString( id_step, "response_header" );
} catch ( Exception e ) {
throw new KettleException(
BaseMessages.getString( PKG, "RestMeta.Exception.UnexpectedErrorReadingStepInfo" ), e );
}
}
@Override
public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
try {
rep.saveStepAttribute( id_transformation, id_step, "applicationType", applicationType );
rep.saveStepAttribute( id_transformation, id_step, "method", method );
rep.saveStepAttribute( id_transformation, id_step, "url", url );
rep.saveStepAttribute( id_transformation, id_step, "methodFieldName", methodFieldName );
rep.saveStepAttribute( id_transformation, id_step, "dynamicMethod", dynamicMethod );
rep.saveStepAttribute( id_transformation, id_step, "urlInField", urlInField );
rep.saveStepAttribute( id_transformation, id_step, "urlField", urlField );
rep.saveStepAttribute( id_transformation, id_step, "bodyField", bodyField );
rep.saveStepAttribute( id_transformation, id_step, "httpLogin", httpLogin );
rep.saveStepAttribute( id_transformation, id_step, "httpPassword", Encr
.encryptPasswordIfNotUsingVariables( httpPassword ) );
rep.saveStepAttribute( id_transformation, id_step, "proxyHost", proxyHost );
rep.saveStepAttribute( id_transformation, id_step, "proxyPort", proxyPort );
rep.saveStepAttribute( id_transformation, id_step, "trustStoreFile", trustStoreFile );
rep.saveStepAttribute( id_transformation, id_step, "trustStorePassword", Encr
.encryptPasswordIfNotUsingVariables( trustStorePassword ) );
rep.saveStepAttribute( id_transformation, id_step, "preemptive", preemptive );
for ( int i = 0; i < headerName.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "header_field", headerField[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "header_name", headerName[i] );
}
for ( int i = 0; i < parameterField.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "parameter_field", parameterField[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "parameter_name", parameterName[i] );
}
for ( int i = 0; i < matrixParameterField.length; i++ ) {
rep.saveStepAttribute( id_transformation, id_step, i, "matrix_parameter_field", matrixParameterField[i] );
rep.saveStepAttribute( id_transformation, id_step, i, "matrix_parameter_name", matrixParameterName[i] );
}
rep.saveStepAttribute( id_transformation, id_step, "result_name", fieldName );
rep.saveStepAttribute( id_transformation, id_step, "result_code", resultCodeFieldName );
rep.saveStepAttribute( id_transformation, id_step, "response_time", responseTimeFieldName );
rep.saveStepAttribute( id_transformation, id_step, "response_header", responseHeaderFieldName );
} catch ( Exception e ) {
throw new KettleException( BaseMessages.getString( PKG, "RestMeta.Exception.UnableToSaveStepInfo" )
+ id_step, e );
}
}
@Override
public void check( List<CheckResultInterface> remarks, TransMeta transMeta, StepMeta stepMeta,
RowMetaInterface prev, String[] input, String[] output, RowMetaInterface info, VariableSpace space,
Repository repository, IMetaStore metaStore ) {
CheckResult cr;
// See if we have input streams leading to this step!
if ( input.length > 0 ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "RestMeta.CheckResult.ReceivingInfoFromOtherSteps" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.NoInpuReceived" ), stepMeta );
}
remarks.add( cr );
// check Url
if ( urlInField ) {
if ( Utils.isEmpty( urlField ) ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.UrlfieldMissing" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "RestMeta.CheckResult.UrlfieldOk" ), stepMeta );
}
} else {
if ( Utils.isEmpty( url ) ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.UrlMissing" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages
.getString( PKG, "RestMeta.CheckResult.UrlOk" ), stepMeta );
}
}
remarks.add( cr );
// Check method
if ( dynamicMethod ) {
if ( Utils.isEmpty( methodFieldName ) ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.MethodFieldMissing" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.MethodFieldOk" ), stepMeta );
}
} else {
if ( Utils.isEmpty( method ) ) {
cr =
new CheckResult( CheckResult.TYPE_RESULT_ERROR, BaseMessages.getString(
PKG, "RestMeta.CheckResult.MethodMissing" ), stepMeta );
} else {
cr =
new CheckResult( CheckResult.TYPE_RESULT_OK, BaseMessages.getString(
PKG, "RestMeta.CheckResult.MethodOk" ), stepMeta );
}
}
remarks.add( cr );
}
@Override
public StepInterface getStep( StepMeta stepMeta, StepDataInterface stepDataInterface, int cnr,
TransMeta transMeta, Trans trans ) {
return new Rest( stepMeta, stepDataInterface, cnr, transMeta, trans );
}
@Override
public StepDataInterface getStepData() {
return new RestData();
}
@Override
public boolean supportsErrorHandling() {
return true;
}
/**
* @return the resultCodeFieldName
*/
public String getResultCodeFieldName() {
return resultCodeFieldName;
}
/**
* @param resultCodeFieldName
* the resultCodeFieldName to set
*/
public void setResultCodeFieldName( String resultCodeFieldName ) {
this.resultCodeFieldName = resultCodeFieldName;
}
/**
* Setter
*
* @param proxyHost
*/
public void setProxyHost( String proxyHost ) {
this.proxyHost = proxyHost;
}
/**
* Getter
*
* @return
*/
public String getProxyHost() {
return proxyHost;
}
/**
* Setter
*
* @param proxyPort
*/
public void setProxyPort( String proxyPort ) {
this.proxyPort = proxyPort;
}
/**
* Getter
*
* @return
*/
public String getProxyPort() {
return this.proxyPort;
}
/**
* Setter
*
* @param applicationType
*/
public void setApplicationType( String applicationType ) {
this.applicationType = applicationType;
}
/**
* Getter
*
* @return
*/
public String getApplicationType() {
return applicationType;
}
/**
* Setter
*
* @param httpLogin
*/
public void setHttpLogin( String httpLogin ) {
this.httpLogin = httpLogin;
}
/**
* Getter
*
* @return
*/
public String getHttpLogin() {
return httpLogin;
}
/**
* Setter
*
* @param httpPassword
*/
public void setHttpPassword( String httpPassword ) {
this.httpPassword = httpPassword;
}
/**
*
* @return
*/
public String getHttpPassword() {
return httpPassword;
}
/**
* Setter
*
* @param trustStoreFile
*/
public void setTrustStoreFile( String trustStoreFile ) {
this.trustStoreFile = trustStoreFile;
}
/**
*
* @return trustStoreFile
*/
public String getTrustStoreFile() {
return trustStoreFile;
}
/**
* Setter
*
* @param trustStorePassword
*/
public void setTrustStorePassword( String trustStorePassword ) {
this.trustStorePassword = trustStorePassword;
}
/**
*
* @return trustStorePassword
*/
public String getTrustStorePassword() {
return trustStorePassword;
}
public String getResponseTimeFieldName() {
return responseTimeFieldName;
}
public void setResponseTimeFieldName( String responseTimeFieldName ) {
this.responseTimeFieldName = responseTimeFieldName;
}
public String getResponseHeaderFieldName() {
return responseHeaderFieldName;
}
public void setResponseHeaderFieldName( String responseHeaderFieldName ) {
this.responseHeaderFieldName = responseHeaderFieldName;
}
public static boolean isActiveBody( String method ) {
if ( Utils.isEmpty( method ) ) {
return false;
}
return ( method.equals( HTTP_METHOD_POST ) || method.equals( HTTP_METHOD_PUT )
|| method.equals( HTTP_METHOD_PATCH ) || method.equals( HTTP_METHOD_DELETE ) );
}
public static boolean isActiveParameters( String method ) {
if ( Utils.isEmpty( method ) ) {
return false;
}
return ( method.equals( HTTP_METHOD_POST ) || method.equals( HTTP_METHOD_PUT )
|| method.equals( HTTP_METHOD_PATCH ) || method.equals( HTTP_METHOD_DELETE ) );
}
}