Java tutorial
/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2019 by Hitachi Vantara : 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.metaverse.analyzer.kettle.step.rest; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.pentaho.di.core.row.RowMetaInterface; import org.pentaho.di.trans.step.BaseStepMeta; import org.pentaho.di.trans.steps.rest.RestMeta; import org.pentaho.dictionary.DictionaryConst; import org.pentaho.metaverse.api.IMetaverseNode; import org.pentaho.metaverse.api.IMetaverseObjectFactory; import org.pentaho.metaverse.api.MetaverseComponentDescriptor; import org.pentaho.metaverse.api.MetaverseException; import org.pentaho.metaverse.api.StepField; import org.pentaho.metaverse.api.analyzer.kettle.step.ExternalResourceStepAnalyzer; import org.pentaho.metaverse.api.analyzer.kettle.step.IClonableStepAnalyzer; import org.pentaho.metaverse.api.model.IExternalResourceInfo; import java.util.HashSet; import java.util.Map; import java.util.Set; public class RestClientStepAnalyzer extends ExternalResourceStepAnalyzer<RestMeta> { @Override protected Set<StepField> getUsedFields(RestMeta stepMeta) { Set<StepField> usedFields = new HashSet<>(); // add url field if (stepMeta.isUrlInField() && StringUtils.isNotEmpty(stepMeta.getUrlField())) { usedFields.addAll(createStepFields(stepMeta.getUrlField(), getInputs())); } // add method field if (stepMeta.isDynamicMethod() && StringUtils.isNotEmpty(stepMeta.getMethodFieldName())) { usedFields.addAll(createStepFields(stepMeta.getMethodFieldName(), getInputs())); } // add body field if (StringUtils.isNotEmpty(stepMeta.getBodyField())) { usedFields.addAll(createStepFields(stepMeta.getBodyField(), getInputs())); } // add parameters as used fields String[] parameterFields = stepMeta.getParameterField(); if (ArrayUtils.isNotEmpty(parameterFields)) { for (String paramField : parameterFields) { usedFields.addAll(createStepFields(paramField, getInputs())); } } // add headers as used fields String[] headerFields = stepMeta.getHeaderField(); if (ArrayUtils.isNotEmpty(headerFields)) { for (String headerField : headerFields) { usedFields.addAll(createStepFields(headerField, getInputs())); } } return usedFields; } @Override protected Map<String, RowMetaInterface> getInputRowMetaInterfaces(RestMeta meta) { return getInputFields(meta); } @Override public Set<Class<? extends BaseStepMeta>> getSupportedSteps() { Set<Class<? extends BaseStepMeta>> supportedSteps = new HashSet<>(); supportedSteps.add(RestMeta.class); return supportedSteps; } @Override public IMetaverseNode createResourceNode(IExternalResourceInfo resource) throws MetaverseException { MetaverseComponentDescriptor componentDescriptor = new MetaverseComponentDescriptor(resource.getName(), getResourceInputNodeType(), descriptor.getNamespace(), descriptor.getContext()); IMetaverseNode node = createNodeFromDescriptor(componentDescriptor); return node; } @Override public String getResourceInputNodeType() { return DictionaryConst.NODE_TYPE_WEBSERVICE; } @Override public String getResourceOutputNodeType() { return null; } @Override public boolean isOutput() { return false; } @Override public boolean isInput() { return true; } @Override protected IClonableStepAnalyzer newInstance() { return new RestClientStepAnalyzer(); } @Override public String toString() { return this.getClass().getName(); } ////// used in unit testing protected void setObjectFactory(IMetaverseObjectFactory objectFactory) { this.metaverseObjectFactory = objectFactory; } }