/*! ****************************************************************************** * * 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.core.util; import org.pentaho.di.core.Const; import org.pentaho.di.core.row.ValueMetaInterface; public class MetaGenerator { public static final TypeFieldDefinition[] FIELDS = new TypeFieldDefinition[] { new TypeFieldDefinition( ValueMetaInterface.TYPE_BOOLEAN, "UsingLines" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_INTEGER, "MaxNumberOfSuggestions" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "NameField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "OrganizationField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "DepartmentField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "PostBoxField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "SubPremiseField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "PremiseField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "HouseNumberField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "HouseNumberAdditionField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "DependentThoroughfareField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "ThoroughfareField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "DependentLocalityField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "LocalityField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "PostTownField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "DeliveryServiceQualifierField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "PostalCodeField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "SubAdministrativeAreaField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "AdministrativeAreaField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "CountryNameField" ), new TypeFieldDefinition( ValueMetaInterface.TYPE_STRING, "CountryCodeField" ), }; private TypeFieldDefinition[] fields; public MetaGenerator( TypeFieldDefinition[] fields ) { this.fields = fields; } public String generateCode() { StringBuilder code = new StringBuilder( 5000 ); // Generate the declarations... // for ( TypeFieldDefinition field : fields ) { code.append( " private " + field.getTypeDescription() + " " + field.getMemberName() + ";" ).append( Const.CR ); } code.append( Const.CR ); // Generate getXML()... // code.append( " public String getXML() throws KettleException {" ).append( Const.CR ); code.append( " StringBuilder xml = new StringBuilder(100);" ).append( Const.CR ); for ( TypeFieldDefinition field : fields ) { code.append( " xml.append(XMLHandler.addTagValue(\"" + field.getFieldName() + "\", " + field.getMemberName() + "));" ).append( Const.CR ); } code.append( " return xml.toString();" ).append( Const.CR ); code.append( " }" ).append( Const.CR ); code.append( Const.CR ); // Generate loadXML()... // code.append( " public void loadXML(Node stepnode, List<DatabaseMeta> databases, " + "IMetaStore metaStore) throws KettleXMLException {" ).append( Const.CR ); for ( TypeFieldDefinition field : fields ) { switch ( field.getType() ) { case ValueMetaInterface.TYPE_STRING: code.append( " " + field.getMemberName() + " = XMLHandler.getTagValue(stepnode, \"" + field.getFieldName() + "\");" ).append( Const.CR ); break; case ValueMetaInterface.TYPE_BOOLEAN: code.append( " " + field.getMemberName() + " = \"Y\".equalsIgnoreCase(XMLHandler.getTagValue(stepnode, \"" + field.getFieldName() + "\"));" ).append( Const.CR ); break; case ValueMetaInterface.TYPE_INTEGER: code.append( " " + field.getMemberName() + " = Const.toInt(XMLHandler.getTagValue(stepnode, \"" + field.getFieldName() + "\"), -1);" ).append( Const.CR ); break; default: break; } } code.append( " }" ).append( Const.CR ); code.append( Const.CR ); // Save to repository // code .append( " public void saveRep(Repository rep, ObjectId id_transformation, ObjectId id_step) throws KettleException {" ) .append( Const.CR ); for ( TypeFieldDefinition field : fields ) { code.append( " rep.saveStepAttribute(id_transformation, id_step, \"" + field.getFieldName() + "\", " + field.getMemberName() + ");" ).append( Const.CR ); } code.append( " }" ).append( Const.CR ); code.append( Const.CR ); // Load from repository // code.append( " public void readRep(Repository rep, ObjectId id_step, " + "List<DatabaseMeta> databases) throws KettleException {" ).append( Const.CR ); for ( TypeFieldDefinition field : fields ) { switch ( field.getType() ) { case ValueMetaInterface.TYPE_STRING: code.append( " " + field.getMemberName() + " = rep.getStepAttributeString(id_step, \"" + field.getFieldName() + "\");" ).append( Const.CR ); break; case ValueMetaInterface.TYPE_BOOLEAN: code.append( " " + field.getMemberName() + " = rep.getStepAttributeBoolean(id_step, \"" + field.getFieldName() + "\");" ).append( Const.CR ); break; case ValueMetaInterface.TYPE_INTEGER: code.append( " " + field.getMemberName() + " = (int) rep.getStepAttributeInteger(id_step, \"" + field.getFieldName() + "\");" ).append( Const.CR ); break; default: break; } } code.append( " }" ).append( Const.CR ); code.append( Const.CR ); // Getters & Setters // for ( TypeFieldDefinition field : fields ) { String getPrefix; String setPrefix; switch ( field.getType() ) { case ValueMetaInterface.TYPE_BOOLEAN: getPrefix = "is"; setPrefix = "set"; break; default: getPrefix = "get"; setPrefix = "set"; break; } code .append( " public " + field.getTypeDescription() + " " + getPrefix + field.getFieldName() + "() {" ) .append( Const.CR ); code.append( " return " + field.getMemberName() + ";" ).append( Const.CR ); code.append( " }" ).append( Const.CR ); code.append( Const.CR ); code.append( " public void " + setPrefix + field.getFieldName() + "(" + field.getTypeDescription() + " " + field.getMemberName() + ") {" ).append( Const.CR ); code.append( " this." + field.getMemberName() + " = " + field.getMemberName() + ";" ).append( Const.CR ); code.append( " }" ).append( Const.CR ); code.append( Const.CR ); } /* * nameFieldItem = new TableItem(wInputFields.table, SWT.NONE); nameFieldItem.setText(1, BaseMessages.getString(PKG, * "PIQAddressDialog.NameField.Description")); nameFieldItem.setText(2, Const.NVL(input.getNameField(), "")); */ for ( TypeFieldDefinition field : fields ) { code.append( " " + field.getMemberName() + "Item = new TableItem(wInputFields.table, SWT.NONE);" ).append( Const.CR ); code.append( " " + field.getMemberName() + "Item.setText(1, BaseMessages.getString(PKG, \"PIQAddressDialog." + field.getFieldName() + ".Description\"));" ).append( Const.CR ); code.append( " " + field.getMemberName() + "Item.setText(2, Const.NVL(input.get" + field.getFieldName() + "(), \"\"));" ).append( Const.CR ); } for ( TypeFieldDefinition field : fields ) { code.append( "PIQAddressDialog." + field.getFieldName() + ".Description = " + field.getFieldName() ).append( " DESCRIPTION TODO" ).append( Const.CR ); } return code.toString(); } public static void main( String[] args ) { MetaGenerator generator = new MetaGenerator( FIELDS ); System.out.println( generator.generateCode() ); } }