基于kettle版本5.4.0.1-130
1:实现类
[img]http://dl2.iteye.com/upload/attachment/0115/1600/0349afc1-6950-3f70-aa76-4bbe93b74b62.png[/img]
2:JSONToStringMeta
说明:配置标签@Step(),初始化程序
extends BaseStepMeta :继承BaseStepMeta
implements StepMetaInterface :实现接口StepMetaInterface
[color=red]整个代码的执行过程是:先运行配置标签meta类型,通过meta类找到Dialog类,当运行脚本时调用实现类[/color]
1:实现类
[img]http://dl2.iteye.com/upload/attachment/0115/1600/0349afc1-6950-3f70-aa76-4bbe93b74b62.png[/img]
2:JSONToStringMeta
说明:配置标签@Step(),初始化程序
extends BaseStepMeta :继承BaseStepMeta
implements StepMetaInterface :实现接口StepMetaInterface
[color=red]整个代码的执行过程是:先运行配置标签meta类型,通过meta类找到Dialog类,当运行脚本时调用实现类[/color]
@Step(id="bsoft-json", image="JSO.png", name="JSONToString", description="json格式转string", categoryDescription="Bsoft-Dc")
public class JSONToStringMeta extends BaseStepMeta implements StepMetaInterface {
private XMLField[] inputFields;
private ValueMetaAndData value;
private String outputName;
public JSONToStringMeta() {
super(); // allocate BaseStepInfo
}
//流程中新增列字段
@SuppressWarnings("deprecation")
@Override
public void getFields(RowMetaInterface r, String origin, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space) {
ValueMetaInterface v = new ValueMeta(outputName);
v.setType(ValueMetaInterface.TYPE_STRING);
r.addValueMeta(v);
}
@Override
public Object clone() {
JSONToStringMeta retval = (JSONToStringMeta) super.clone();
int nrfields = inputFields.length;
retval.allocateInput(nrfields);
for (int i = 0; i < nrfields; i++) {
retval.inputFields[i] = (XMLField) inputFields[i].clone();
}
return retval;
}
public void allocateInput(int nrfields) {
inputFields = new XMLField[nrfields];
}
//读取ktr脚本的xml数据
@Override
public void loadXML(Node stepnode, List<DatabaseMeta> databases, Map<String, Counter> counters) throws KettleXMLException {
outputName = XMLHandler.getTagValue(stepnode, "outputName"); //$NON-NLS-1$
Node infields = XMLHandler.getSubNode(stepnode, "inFields"); //$NON-NLS-1$
int num = XMLHandler.countNodes(infields, "field"); //$NON-NLS-1$
allocateInput(num);
for (int i = 0; i < num; i++) {
Node fnode = XMLHandler.getSubNodeByNr(infields, "field", i); //$NON-NLS-1$
inputFields[i] = new XMLField();
inputFields[i].setType(XMLHandler.getTagValue(fnode, "type")); //$NON-NLS-1$
inputFields[i].setFieldName(XMLHandler.getTagValue(fnode, "name")); //$NON-NLS-1$
inputFields[i].setFormat(XMLHandler.getTagValue(fnode, "format")); //$NON-NLS-1$
inputFields[i].setLength(Const.toInt( XMLHandler.getTagValue(fnode, "length"), -1)); //$NON-NLS-1$
inputFields[i].setPrecision(Const.toInt( XMLHandler.getTagValue(fnode, "precision"), -1)); //$NON-NLS-1$
}
}
//将对象Meta数据转成xml返回
@Override
public String getXML() {
StringBuffer retval = new StringBuffer(300);
retval.append(" " + XMLHandler.addTagValue("outputName", outputName == null ? "" : outputName));
XMLField[] infields = getInputField();
retval.append(" <inFields>"); //$NON-NLS-1$
for (int i = 0; i < infields.length; i++) {
inputFields[i] = infields[i];
retval.append(" <field>"); //$NON-NLS-1$
retval.append(" ").append(XMLHandler.addTagValue("name", inputFields[i].getFieldName())); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(" ").append(XMLHandler.addTagValue("type", inputFields[i].getTypeDesc())); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(" ").append(XMLHandler.addTagValue("format", inputFields[i].getFormat())); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(" ").append(XMLHandler.addTagValue("length", inputFields[i].getLength())); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(" ").append(XMLHandler.addTagValue("precision", inputFields[i].getPrecision())); //$NON-NLS-1$ //$NON-NLS-2$
retval.append(" </field>"); //$NON-NLS-1$
}
retval.append(" </inFields>"); //$NON-NLS-1$
return