package com.trail2peak.pdi.fastjsoninput; import org.pentaho.di.core.Const; import org.pentaho.di.core.exception.KettleValueException; import org.pentaho.di.core.row.ValueMeta; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.core.xml.XMLHandler; import org.pentaho.di.i18n.BaseMessages; import org.w3c.dom.Node; /** * Describes a Json field. * * @author Samatar * @author edube * @since 2015-01-07 */ public class FastJsonInputField implements Cloneable { private static Class<?> PKG = FastJsonInputMeta.class; // for i18n purposes, // needed by // Translator2!! public static final int TYPE_TRIM_NONE = 0; public static final int TYPE_TRIM_LEFT = 1; public static final int TYPE_TRIM_RIGHT = 2; public static final int TYPE_TRIM_BOTH = 3; public static final String[] trimTypeCode = { "none", "left", "right", "both" }; public static final String[] trimTypeDesc = { BaseMessages.getString(PKG, "FastJsonInputField.TrimType.None"), BaseMessages.getString(PKG, "FastJsonInputField.TrimType.Left"), BaseMessages.getString(PKG, "FastJsonInputField.TrimType.Right"), BaseMessages.getString(PKG, "FastJsonInputField.TrimType.Both") }; private String name; private String path; private int type; private int length; private String format; private int trimtype; private int precision; private String currencySymbol; private String decimalSymbol; private String groupSymbol; private boolean repeat; public FastJsonInputField(String fieldname) { this.name = fieldname; this.path = ""; this.length = -1; this.type = ValueMetaInterface.TYPE_STRING; this.format = ""; this.trimtype = TYPE_TRIM_NONE; this.groupSymbol = ""; this.decimalSymbol = ""; this.currencySymbol = ""; this.precision = -1; this.repeat = false; } public FastJsonInputField() { this(""); } public String getXML() { StringBuffer retval = new StringBuffer(400); retval.append(" <field>").append(Const.CR); retval.append(" ").append( XMLHandler.addTagValue("name", getName())); retval.append(" ").append( XMLHandler.addTagValue("path", getPath())); retval.append(" ").append( XMLHandler.addTagValue("type", getTypeDesc())); retval.append(" ").append( XMLHandler.addTagValue("format", getFormat())); retval.append(" ").append( XMLHandler.addTagValue("currency", getCurrencySymbol())); retval.append(" ").append( XMLHandler.addTagValue("decimal", getDecimalSymbol())); retval.append(" ").append( XMLHandler.addTagValue("group", getGroupSymbol())); retval.append(" ").append( XMLHandler.addTagValue("length", getLength())); retval.append(" ").append( XMLHandler.addTagValue("precision", getPrecision())); retval.append(" ").append( XMLHandler.addTagValue("trim_type", getTrimTypeCode())); retval.append(" ").append( XMLHandler.addTagValue("repeat", isRepeated())); retval.append(" </field>").append(Const.CR); return retval.toString(); } public FastJsonInputField(Node fnode) throws KettleValueException { setName(XMLHandler.getTagValue(fnode, "name")); setPath(XMLHandler.getTagValue(fnode, "path")); setType(ValueMeta.getType(XMLHandler.getTagValue(fnode, "type"))); setFormat(XMLHandler.getTagValue(fnode, "format")); setCurrencySymbol(XMLHandler.getTagValue(fnode, "currency")); setDecimalSymbol(XMLHandler.getTagValue(fnode, "decimal")); setGroupSymbol(XMLHandler.getTagValue(fnode, "group")); setLength(Const.toInt(XMLHandler.getTagValue(fnode, "length"), -1)); setPrecision(Const .toInt(XMLHandler.getTagValue(fnode, "precision"), -1)); setTrimType(getTrimTypeByCode(XMLHandler .getTagValue(fnode, "trim_type"))); setRepeated(!"N".equalsIgnoreCase(XMLHandler.getTagValue(fnode, "repeat"))); } public static final int getTrimTypeByCode(String tt) { if (tt == null) { return 0; } for (int i = 0; i < trimTypeCode.length; i++) { if (trimTypeCode[i].equalsIgnoreCase(tt)) { return i; } } return 0; } public static final int getTrimTypeByDesc(String tt) { if (tt == null) { return 0; } for (int i = 0; i < trimTypeDesc.length; i++) { if (trimTypeDesc[i].equalsIgnoreCase(tt)) { return i; } } return 0; } public static final String getTrimTypeCode(int i) { if (i < 0 || i >= trimTypeCode.length) { return trimTypeCode[0]; } return trimTypeCode[i]; } public static final String getTrimTypeDesc(int i) { if (i < 0 || i >= trimTypeDesc.length) { return trimTypeDesc[0]; } return trimTypeDesc[i]; } public Object clone() { try { FastJsonInputField retval = (FastJsonInputField) super.clone(); return retval; } catch (CloneNotSupportedException e) { return null; } } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public String getName() { return name; } public String getPath() { return path; } public void setPath(String value) { this.path = value; } public void setName(String fieldname) { this.name = fieldname; } public int getType() { return type; } public String getTypeDesc() { return ValueMeta.getTypeDesc(type); } public void setType(int type) { this.type = type; } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public int getTrimType() { return trimtype; } public String getTrimTypeCode() { return getTrimTypeCode(trimtype); } public String getTrimTypeDesc() { return getTrimTypeDesc(trimtype); } public void setTrimType(int trimtype) { this.trimtype = trimtype; } public String getGroupSymbol() { return groupSymbol; } public void setGroupSymbol(String group_symbol) { this.groupSymbol = group_symbol; } public String getDecimalSymbol() { return decimalSymbol; } public void setDecimalSymbol(String decimal_symbol) { this.decimalSymbol = decimal_symbol; } public String getCurrencySymbol() { return currencySymbol; } public void setCurrencySymbol(String currency_symbol) { this.currencySymbol = currency_symbol; } public int getPrecision() { return precision; } public void setPrecision(int precision) { this.precision = precision; } public boolean isRepeated() { return repeat; } public void setRepeated(boolean repeat) { this.repeat = repeat; } public void flipRepeated() { repeat = !repeat; } }