一. kettle的组件是如何查出来的,如下图。
查出组件的代码如下。
二。下面看一下,如何实现一个组件。(比如要实现一个 调用一个存储过程的组件)
package org.flhy.ext.trans.steps; import com.mxgraph.model.mxCell; import com.mxgraph.util.mxUtils; import org.flhy.ext.core.PropsUI; import org.flhy.ext.trans.step.AbstractStep; import org.flhy.ext.utils.JSONArray; import org.flhy.ext.utils.JSONObject; import org.flhy.ext.utils.StringEscapeHelper; import org.pentaho.di.core.Const; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.row.ValueMeta; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.row.value.ValueMetaFactory; import org.pentaho.di.trans.step.StepMetaInterface; import org.pentaho.di.trans.steps.dbproc.DBProcMeta; import org.pentaho.di.trans.steps.selectvalues.SelectMetadataChange; import org.pentaho.di.trans.steps.selectvalues.SelectValuesMeta; import org.pentaho.di.trans.steps.sql.ExecSQLMeta; import org.pentaho.metastore.api.IMetaStore; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import java.util.List; // author sf 2019-08-06 @Component("DBProc") @Scope("prototype") public class DBProc extends AbstractStep { @Override public void decode(StepMetaInterface stepMetaInterface, mxCell cell, List<DatabaseMeta> databases, IMetaStore metaStore) throws Exception { DBProcMeta DBProcsMeta = (DBProcMeta) stepMetaInterface; String con = cell.getAttribute("connection"); DBProcsMeta.setDatabase(DatabaseMeta.findDatabase(databases, con)); DBProcsMeta.setProcedure(cell.getAttribute("procedure")); DBProcsMeta.setResultName(cell.getAttribute("resultName")); DBProcsMeta.setAutoCommit("Y".equalsIgnoreCase(cell.getAttribute("autoCommit"))); DBProcsMeta.setResultType(ValueMetaFactory.getIdForValueMeta(cell.getAttribute("resultType"))); // JSONArray jsonArray = JSONArray.fromObject(cell.getAttribute( "argument" )); // DBProcsMeta.allocate( jsonArray.size() ); // for(int i=0; i<jsonArray.size(); i++) { // JSONObject jsonObject = jsonArray.getJSONObject(i); // DBProcsMeta.getArgument()[i] = jsonObject.optString("name"); // } // // JSONArray jsonDirectionArray = JSONArray.fromObject(cell.getAttribute( "argumentDirection" )); // DBProcsMeta.allocate( jsonDirectionArray.size() ); // for(int i=0; i<jsonDirectionArray.size(); i++) { // JSONObject jsonObject = jsonDirectionArray.getJSONObject(i); // DBProcsMeta.getArgumentDirection()[i] = jsonObject.optString("directionname"); // } // //