Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *    This program is free software; you can redistribute it and/or modify
   *    it under the terms of the GNU General Public License as published by
   *    the Free Software Foundation; either version 2 of the License, or
   *    (at your option) any later version.
   *
   *    This program is distributed in the hope that it will be useful,
   *    but WITHOUT ANY WARRANTY; without even the implied warranty of
   *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *    GNU General Public License for more details.
  *
  *    You should have received a copy of the GNU General Public License
  *    along with this program; if not, write to the Free Software
  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 /*
  *    ArffOutputDialog.java
  *    Copyright 2007 Pentaho Corporation.  All rights reserved. 
  *
  */
 
 package org.pentaho.di.arff;
 
 import java.util.List;
 
 import  org.eclipse.swt.SWT;
 import  org.eclipse.swt.custom.CCombo;
 import  org.eclipse.swt.custom.CTabFolder;
 import  org.eclipse.swt.custom.CTabItem;
 import  org.eclipse.swt.events.FocusEvent;
 import  org.eclipse.swt.events.FocusListener;
 import  org.eclipse.swt.events.ModifyEvent;
 import  org.eclipse.swt.events.ModifyListener;
 import  org.eclipse.swt.events.SelectionAdapter;
 import  org.eclipse.swt.events.SelectionEvent;
 import  org.eclipse.swt.events.ShellAdapter;
 import  org.eclipse.swt.events.ShellEvent;
 import  org.eclipse.swt.graphics.Cursor;
 import  org.eclipse.swt.layout.FormAttachment;
 import  org.eclipse.swt.layout.FormData;
 import  org.eclipse.swt.layout.FormLayout;
 import  org.eclipse.swt.widgets.Button;
 import  org.eclipse.swt.widgets.Composite;
 import  org.eclipse.swt.widgets.Display;
 import  org.eclipse.swt.widgets.Event;
 import  org.eclipse.swt.widgets.FileDialog;
 import  org.eclipse.swt.widgets.Label;
 import  org.eclipse.swt.widgets.Listener;
 import  org.eclipse.swt.widgets.Shell;
 import  org.eclipse.swt.widgets.Table;
 import  org.eclipse.swt.widgets.TableItem;
 import  org.eclipse.swt.widgets.Text;
 import  org.pentaho.di.core.Const;
 import  org.pentaho.di.core.Props;
 import  org.pentaho.di.core.exception.KettleException;
 import  org.pentaho.di.core.row.RowMetaInterface;
 import  org.pentaho.di.core.row.ValueMeta;
 import  org.pentaho.di.core.row.ValueMetaInterface;
 import  org.pentaho.di.i18n.BaseMessages;
 import  org.pentaho.di.trans.TransMeta;
 import  org.pentaho.di.trans.step.BaseStepMeta;
 import  org.pentaho.di.trans.step.StepDialogInterface;
 import  org.pentaho.di.trans.step.StepMeta;
 import  org.pentaho.di.ui.core.dialog.ErrorDialog;
 import  org.pentaho.di.ui.core.widget.ColumnInfo;
 import  org.pentaho.di.ui.core.widget.TableView;
 import  org.pentaho.di.ui.core.widget.TextVar;
 import  org.pentaho.di.ui.trans.step.BaseStepDialog;
 import  org.pentaho.dm.commons.ArffMeta;

The UI class for the ArffOutput step

Author(s):
Mark Hall (mhall{[at]}pentaho.org)
Version:
1.0
 
 public class ArffOutputDialog extends BaseStepDialog implements
     StepDialogInterface {
 
   // Step name stuff
   private Label m_wlStepname;
   private Text m_wStepname;
   private FormData m_fdlStepname;
   private FormData m_fdStepname;
 
   // Tab stuff
   private FormData m_fdTabFolder;
   private FormData m_fdFileCompm_fdContentCompm_fdFieldsComp;
   private CTabFolder m_wTabFolder;
   private CTabItem m_wFileTabm_wContentTabm_wFieldsTab;
 
   // File related stuff
   // label for the file name field
   private Label m_wlFilename;
 
   // file name field
  private FormData m_fdlFilenamem_fdbFilenamem_fdFilename;
  // Browse file button
  private Button m_wbFilename;
  // Combines text field with widget to insert environment variable
  private TextVar m_wFilename;
  // Relation name stuff
  private Label m_wlRelationName;
  private Text m_wRelationName;
  private FormData m_fdlRelationName;
  private FormData m_fdRelationName;
  // Content stuff
  // Format combo
  private Label m_wlFormat;
  private CCombo m_wFormat;
  private FormData m_fdlFormatm_fdFormat;
  // Encoding combo
  private Label m_wlEncoding;
  private CCombo m_wEncoding;
  private FormData m_fdlEncodingm_fdEncoding;
  // Compression, to do?
  // Fields stuff
  // Fields table stuff
  private Label m_wlFields;
  private TableView m_wFields;
  private FormData m_fdlFields;
  private FormData m_fdFields;
  private ColumnInfo[] m_colinf;
  // sparse output
  private Button m_sparseOutputCheckBox;
  // weight field stuff
  private Label m_weightFieldCheckBoxLab;
  private Button m_weightFieldCheckBox;
  private Label m_weightFieldLab;
  private CCombo m_weightFieldComboBox;
  private boolean m_gotEncodings = false;

  
meta data for the step. A copy is made so that changes, in terms of choices made by the user, can be detected.
  private final ArffOutputMeta m_currentMeta;
  private final ArffOutputMeta m_originalMeta;
  public ArffOutputDialog(Shell parentObject in, TransMeta trString sname) {
    super(parent, (BaseStepMeta) intrsname);
    // The order here is important...
    // m_currentMeta is looked at for changes
     = (ArffOutputMetain;
  }

  
Open the dialog

Returns:
the step name
  public String open() {
    Shell parent = getParent();
    Display display = parent.getDisplay();
    shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MIN | SWT.MAX);
    props.setLook(shell);
    setShellImage(shell, );
    // used to listen to a text field (m_wStepname)
    ModifyListener lsMod = new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        .setChanged();
      }
    };
    changed = .hasChanged();
    FormLayout formLayout = new FormLayout();
    formLayout.marginWidth = Const.FORM_MARGIN;
    formLayout.marginHeight = Const.FORM_MARGIN;
    shell.setLayout(formLayout);
    shell.setText(BaseMessages.getString(.,
        "ArffOutputDialog.Shell.Title"));
    int middle = props.getMiddlePct();
    int margin = Const.MARGIN;
    // Stepname line
     = new Label(shell, SWT.RIGHT);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.StepName.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(middle, -margin);
    . = new FormAttachment(0, margin);
    .setLayoutData();
     = new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    .setText(stepname);
    props.setLook();
    .addModifyListener(lsMod);
    // format the text field
     = new FormData();
    . = new FormAttachment(middle, 0);
    . = new FormAttachment(0, margin);
    . = new FormAttachment(100, 0);
    .setLayoutData();
     = new CTabFolder(shell, SWT.BORDER);
    props.setLook(, Props.WIDGET_STYLE_TAB);
    .setSimple(false);
    // Start of the file tab
     = new CTabItem(, SWT.NONE);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.FileTab.TabTitle"));
    Composite wFileComp = new Composite(, SWT.NONE);
    props.setLook(wFileComp);
    FormLayout fileLayout = new FormLayout();
    fileLayout.marginWidth = 3;
    fileLayout.marginHeight = 3;
    wFileComp.setLayout(fileLayout);
    // Filename line
     = new Label(wFileComp, SWT.RIGHT);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.Filename.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, margin);
    . = new FormAttachment(middle, -margin);
    .setLayoutData();
    // file browse button
     = new Button(wFileComp, SWT.PUSH | SWT.CENTER);
    props.setLook();
    .setText(BaseMessages.getString(.,
        "System.Button.Browse"));
     = new FormData();
    . = new FormAttachment(100, 0);
    . = new FormAttachment(0, 0);
    .setLayoutData();
    // combined text field and env variable widget
     = new TextVar(transMeta, wFileComp, SWT.SINGLE | SWT.LEFT
        | SWT.BORDER);
    props.setLook();
    .addModifyListener(lsMod);
     = new FormData();
    . = new FormAttachment(middle, 0);
    . = new FormAttachment(0, margin);
    . = new FormAttachment(, -margin);
    .setLayoutData();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, 0);
    . = new FormAttachment(100, 0);
    . = new FormAttachment(100, 0);
    wFileComp.setLayoutData();
    // Relation name line
     = new Label(wFileComp, SWT.RIGHT);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.RelationName.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(middle, -margin);
    .setLayoutData();
     = new Text(wFileComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
    .setText("NewRelation");
    props.setLook();
    .addModifyListener(lsMod);
     = new FormData();
    . = new FormAttachment(middle, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(100, 0);
    .setLayoutData();
    wFileComp.layout();
    .setControl(wFileComp);
    // Content tab
     = new CTabItem(, SWT.NONE);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.ContentTab.TabTitle"));
    FormLayout contentLayout = new FormLayout();
    contentLayout.marginWidth = 3;
    contentLayout.marginHeight = 3;
    Composite wContentComp = new Composite(, SWT.NONE);
    props.setLook(wContentComp);
    wContentComp.setLayout(contentLayout);
    // Format line
     = new Label(wContentComp, SWT.RIGHT);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.Format.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, margin);
    . = new FormAttachment(middle, -margin);
    .setLayoutData();
     = new CCombo(wContentComp, SWT.BORDER | SWT.READ_ONLY);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.Format.Label"));
    props.setLook();
    .add("DOS");
    .add("Unix");
    .select(0);
    .addModifyListener(lsMod);
     = new FormData();
    . = new FormAttachment(middle, 0);
    . = new FormAttachment(0, margin);
    . = new FormAttachment(100, 0);
    .setLayoutData();
    // Encoding line
     = new Label(wContentComp, SWT.RIGHT);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.Encoding.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(middle, -margin);
    .setLayoutData();
     = new CCombo(wContentComp, SWT.BORDER | SWT.READ_ONLY);
    .setEditable(true);
    /*
     * m_wEncoding.setText(Messages. getString(""));
     */
    props.setLook();
    .addModifyListener(lsMod);
     = new FormData();
    . = new FormAttachment(middle, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(100, 0);
    .setLayoutData();
    .addFocusListener(new FocusListener() {
      public void focusLost(FocusEvent e) {
      }
      public void focusGained(FocusEvent e) {
        Cursor busy = new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT);
        shell.setCursor(busy);
        setEncodings();
        shell.setCursor(null);
        busy.dispose();
      }
    });
    // Compression stuff?
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, 0);
    . = new FormAttachment(100, 0);
    . = new FormAttachment(100, 0);
    wContentComp.setLayoutData();
    wContentComp.layout();
    .setControl(wContentComp);
    // Fields tab
     = new CTabItem(, SWT.NONE);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.FieldsTab.TabTitle"));
    FormLayout fieldsLayout = new FormLayout();
    fieldsLayout.marginWidth = 3;
    fieldsLayout.marginHeight = 3;
    Composite wFieldsComp = new Composite(, SWT.NONE);
    props.setLook(wFieldsComp);
    wFieldsComp.setLayout(fieldsLayout);
     = new Label(wFieldsComp, SWT.NONE);
    .setText(BaseMessages.getString(.,
        "ArffOutputDialog.FieldsTab.Label"));
    props.setLook();
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, margin);
    .setLayoutData();
    final int fieldsRows = 5;
     = new ColumnInfo[] {
        new ColumnInfo(BaseMessages.getString(.,
            "ArffOutputDialog.OutputFieldsColumn.Name"),
            ColumnInfo.COLUMN_TYPE_TEXT, false),
        new ColumnInfo(BaseMessages.getString(.,
            "ArffOutputDialog.OutputFieldsColumn.KettleType"),
            ColumnInfo.COLUMN_TYPE_TEXT, false),
        new ColumnInfo(BaseMessages.getString(.,
            "ArffOutputDialog.OutputFieldsColumn.ArffType"),
            ColumnInfo.COLUMN_TYPE_CCOMBO, false),
        new ColumnInfo(BaseMessages.getString(.,
            "ArffOutputDialog.OutputFieldsColumn.NomValsOrDateFormat"),
            ColumnInfo.COLUMN_TYPE_TEXT, false) };
    [0].setReadOnly(true);
    [1].setReadOnly(true);
    [2].setReadOnly(false);
    [3].setReadOnly(false);
    [2].setComboValues(new String[] { "Numeric""Nominal""Date",
        "String" });
     = new TableView(transMeta, wFieldsComp, SWT.BORDER
        | SWT.FULL_SELECTION | SWT.MULTI, fieldsRowslsMod, props);
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(100, 0);
    . = new FormAttachment(100, -100);
    .setLayoutData();
    wGet = new Button(wFieldsComp, SWT.PUSH);
    wGet.setText(BaseMessages.getString(.,
        "System.Button.GetFields"));
    wGet.setToolTipText(BaseMessages.getString(.,
        "System.Tooltip.GetFields"));
    // setButtonPositions(new Button[] { wGet }, margin, null);
    FormData temp = new FormData();
    temp.left = new FormAttachment(0, 0);
    temp.right = new FormAttachment(middle, -margin);
    temp.top = new FormAttachment(margin);
    wGet.setLayoutData(temp);
    lsGet = new Listener() {
      public void handleEvent(Event e) {
        getFields();
      }
    };
    wGet.addListener(SWT.Selection, lsGet);
    Label sparseLab = new Label(wFieldsComp, SWT.RIGHT);
    sparseLab.setText("Output sparse instances");
    props.setLook(sparseLab);
    FormData fd = new FormData();
    fd.left = new FormAttachment(0, 0);
    fd.right = new FormAttachment(middle, -margin);
    fd.top = new FormAttachment(wGet, margin);
    sparseLab.setLayoutData(fd);
     = new Button(wFieldsComp, SWT.CHECK);
    props.setLook();
    fd = new FormData();
    fd.left = new FormAttachment(middle, 0);
    fd.right = new FormAttachment(100, 0);
    fd.top = new FormAttachment(wGet, margin);
    .setLayoutData(fd);
     = new Label(wFieldsComp, SWT.RIGHT);
    .setText("Set instance weights from field");
    props.setLook();
    FormData fdlWeightFieldCheckBoxLab = new FormData();
    fdlWeightFieldCheckBoxLab.left = new FormAttachment(0, 0);
    fdlWeightFieldCheckBoxLab.right = new FormAttachment(middle, -margin);
    fdlWeightFieldCheckBoxLab.top = new FormAttachment(,
        margin);
    .setLayoutData(fdlWeightFieldCheckBoxLab);
     = new Button(wFieldsComp, SWT.CHECK);
    props.setLook();
    FormData fdlWeightFieldCheckBox = new FormData();
    fdlWeightFieldCheckBox.left = new FormAttachment(middle, 0);
    fdlWeightFieldCheckBox.right = new FormAttachment(100, 0);
    fdlWeightFieldCheckBox.top = new FormAttachment(,
        margin);
    .setLayoutData(fdlWeightFieldCheckBox);
     = new Label(wFieldsComp, SWT.RIGHT);
    .setText("Weight field");
    props.setLook();
    FormData fdlWeightFieldLab = new FormData();
    fdlWeightFieldLab.left = new FormAttachment(0, 0);
    fdlWeightFieldLab.right = new FormAttachment(middle, -margin);
    fdlWeightFieldLab.top = new FormAttachment(margin);
    .setLayoutData(fdlWeightFieldLab);
     = new CCombo(wFieldsComp, SWT.BORDER | SWT.READ_ONLY);
        .setToolTipText("Set instance-level weights using this incoming field");
    props.setLook();
    FormData fdlWeightFieldComboBox = new FormData();
    fdlWeightFieldComboBox.left = new FormAttachment(middle, 0);
    fdlWeightFieldComboBox.right = new FormAttachment(100, 0);
    fdlWeightFieldComboBox.top = new FormAttachment(,
        margin);
    .setLayoutData(fdlWeightFieldComboBox);
    .setEnabled(false);
    .addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        if (.getSelection()) {
          setupWeightFieldComboBox();
        }
        .setEnabled(.getSelection());
      }
    });
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(0, 0);
    . = new FormAttachment(100, 0);
    . = new FormAttachment(100, 0);
    wFieldsComp.setLayoutData();
    wFieldsComp.layout();
    .setControl(wFieldsComp);
     = new FormData();
    . = new FormAttachment(0, 0);
    . = new FormAttachment(margin);
    . = new FormAttachment(100, 0);
    . = new FormAttachment(100, -50);
    .setLayoutData();
    // Some buttons
    wOK = new Button(shell, SWT.PUSH);
    wOK.setText(BaseMessages.getString(."System.Button.OK"));
    wCancel = new Button(shell, SWT.PUSH);
    wCancel.setText(BaseMessages.getString(.,
        "System.Button.Cancel"));
    setButtonPositions(new Button[] { wOK, wCancel }, marginnull);
    // Add listeners
    // Whenever something changes, set the tooltip to the expanded version:
    .addModifyListener(new ModifyListener() {
      public void modifyText(ModifyEvent e) {
        .setToolTipText(transMeta.environmentSubstitute(
            .getText()));
      }
    });
    .addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
        .setFileName(.getText());
      }
    });
    .addSelectionListener(new SelectionAdapter() {
      @Override
      public void widgetSelected(SelectionEvent e) {
        FileDialog dialog = new FileDialog(shell, SWT.SAVE);
        dialog.setFilterExtensions(new String[] { "*.arff""*" });
        if (.getText() != null) {
          String fn = .getText();
          int l = fn.lastIndexOf(System.getProperty("file.separator"));
          if (l >= 0) {
            fn = fn.substring(l + 1, fn.length());
          }
          dialog.setFileName(transMeta.environmentSubstitute(fn));
        }
        dialog.setFilterNames(new String[] { BaseMessages.getString(
            ."System.FileType.AllFiles") });
        if (dialog.open() != null) {
          String fileName = dialog.getFileName();
          if (!fileName.endsWith(".arff")) {
            fileName += ".arff";
          }
          .setText(dialog.getFilterPath()
              + System.getProperty("file.separator") + fileName);
          .setFileName(fileName);
        }
      }
    });
    lsCancel = new Listener() {
      public void handleEvent(Event e) {
        cancel();
      }
    };
    lsOK = new Listener() {
      public void handleEvent(Event e) {
        ok();
      }
    };
    wCancel.addListener(SWT.Selection, lsCancel);
    wOK.addListener(SWT.Selection, lsOK);
    lsDef = new SelectionAdapter() {
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
        ok();
      }
    };
    .addSelectionListener(lsDef);
    // Detect X or ALT-F4 or something that kills this window...
    shell.addShellListener(new ShellAdapter() {
      @Override
      public void shellClosed(ShellEvent e) {
        cancel();
      }
    });
    .setSelection(0);
    // Set the shell size, based upon previous time...
    setSize();
    getData();
    .setChanged(changed);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    return stepname;
  }

  
Copy data out of the ArffOutputMeta object and into the GUI
  private void getData() {
    String format = .getFileFormat();
    if (format != null && format.length() > 0) {
      .setText(format);
    }
    String encoding = .getEncoding();
    if (encoding != null && encoding.length() > 0) {
      .setText(encoding);
    }
    String fName = .getFileName();
    .setText(fName);
    .setText(rName);
    ArffMeta[] fields = .getOutputFields();
    if (fields == null || fields.length == 0) {
      fields = setupArffMetas();
    }
    if (fields != null) {
      .clearAll(false);
      Table table = .;
      int count = 0;
      for (int i = 0; i < fields.length; i++) {
        if (fields[i] != null) {
          // TableItem item = m_wFields.table.getItem(i);
          TableItem item = new TableItem(table, SWT.NONE);
          item.setText(1, Const.NVL(fields[i].getFieldName(), ""));
          item.setText(2, ValueMeta.getTypeDesc(fields[i].getKettleType())
          /* Const.NVL(getKettleTypeString(fields[i].getKettleType()), "") */);
          item.setText(3,
              Const.NVL(getArffTypeString(fields[i].getArffType()), ""));
          if (fields[i].getArffType() == ArffMeta.NOMINAL
              && !Const.isEmpty(fields[i].getNominalVals())) {
            item.setText(4, fields[i].getNominalVals());
          } else if (fields[i].getArffType() == ArffMeta.DATE
              && !Const.isEmpty(fields[i].getDateFormat())) {
            item.setText(4, fields[i].getDateFormat());
          }
        }
      }
      .removeEmptyRows();
      .setRowNums();
      .optWidth(true);
      // weight field specified?
      if (!Const.isEmpty(.getWeightFieldName())) {
        .setSelection(true);
        setupWeightFieldComboBox();
        .setEnabled(true);
      }
      .setSelection(
          .getOutputSparseInstance());
    }
  }

  
Setup meta data for the fields based on row structure coming from previous step (if any)

Returns:
an array of ArffMeta
  private ArffMeta[] setupArffMetas() {
    // try and set up from incoming fields from previous step
    StepMeta stepMeta = transMeta.findStep(stepname);
    if (stepMeta != null) {
      try {
        RowMetaInterface row = transMeta.getPrevStepFields(stepMeta);
        .setupArffMeta(row);
        return .getOutputFields();
      } catch (KettleException ex) {
        log.logError(toString(), BaseMessages.getString(.,
            "ArffOutputDialog.Log.UnableToFindInput"));
      }
    }
    return null;
  }
  private void setupWeightFieldComboBox() {
    // try and set up from incoming fields from previous step
    StepMeta stepMeta = transMeta.findStep(stepname);
    if (stepMeta != null) {
      try {
        RowMetaInterface rmi = transMeta.getPrevStepFields(stepMeta);
        .removeAll();
        for (int i = 0; i < rmi.size(); i++) {
          ValueMetaInterface inField = rmi.getValueMeta(i);
          int fieldType = inField.getType();
          switch (fieldType) {
          case ValueMetaInterface.TYPE_NUMBER:
          case ValueMetaInterface.TYPE_INTEGER:
            .add(inField.getName());
            break;
          }
        }
      } catch (KettleException ex) {
        log.logError(toString(), BaseMessages.getString(.,
            "ArffOutputDialog.Log.UnableToFindInput"));
      }
    }
  }

  
Convert integer Kettle type to descriptive String

Parameters:
kettleType the Kettle data type
Returns:
the Kettle data type as a String
  private String getKettleTypeString(int kettleType) {
    switch (kettleType) {
    case ValueMetaInterface.TYPE_NUMBER:
      return "Number";
    case ValueMetaInterface.TYPE_INTEGER:
      return "Integer";
    case ValueMetaInterface.TYPE_BOOLEAN:
      return "Boolean";
    case ValueMetaInterface.TYPE_STRING:
      return "String";
    case ValueMetaInterface.TYPE_DATE:
      return "Date";
    }
    return "Unknown";
  }

  
Convert String Kettle type to integer code

Parameters:
kettleType the Kettle data type as a String
Returns:
the integer Kettle type (as defined in ValueMetaInterface)
  private int getKettleTypeInt(String kettleType) {
    if (kettleType.equalsIgnoreCase("Number")) {
      return ValueMetaInterface.TYPE_NUMBER;
    }
    if (kettleType.equalsIgnoreCase("Integer")) {
      return ValueMetaInterface.TYPE_INTEGER;
    }
    if (kettleType.equalsIgnoreCase("Boolean")) {
      return ValueMetaInterface.TYPE_BOOLEAN;
    }
    if (kettleType.equalsIgnoreCase("String")) {
      return ValueMetaInterface.TYPE_STRING;
    }
    if (kettleType.equalsIgnoreCase("Date")) {
      return ValueMetaInterface.TYPE_DATE;
    }
    return -1;
  }

  
Convert ARFF type to a descriptive String

Parameters:
arffType the ARFF data type as defined in ArffMeta
Returns:
the ARFF data type as a String
  private String getArffTypeString(int arffType) {
    if (arffType == ArffMeta.NUMERIC) {
      return "Numeric";
    } else if (arffType == ArffMeta.NOMINAL) {
      return "Nominal";
    } else if (arffType == ArffMeta.STRING) {
      return "String";
    }
    return "Date";
  }

  
Convert ARFF type to an integer code

Parameters:
arffType the ARFF data type as a String
Returns:
the ARFF data type as an integer (as defined in ArffMeta
  private int getArffTypeInt(String arffType) {
    if (arffType.equalsIgnoreCase("Numeric")) {
      return ArffMeta.NUMERIC;
    }
    if (arffType.equalsIgnoreCase("Nominal")) {
      return ArffMeta.NOMINAL;
    }
    if (arffType.equalsIgnoreCase("String")) {
      return ArffMeta.STRING;
    }
    return ArffMeta.DATE;
  }

  
Set up the character encodings combo box
  private void setEncodings() {
    // Encoding of the text file:
    if (!) {
       = true;
      .removeAll();
      List<Charsetvalues = new ArrayList<Charset>(Charset.availableCharsets()
          .values());
      for (int i = 0; i < values.size(); i++) {
        Charset charSet = values.get(i);
        .add(charSet.displayName());
      }
      // Now select the default!
      String defEncoding = Const.getEnvironmentVariable("file.encoding",
          "UTF-8");
      int idx = Const.indexOfString(defEncoding.getItems());
      if (idx >= 0) {
        .select(idx);
      }
    }
  }
  private void cancel() {
    stepname = null;
    .setChanged(changed);
    // revert to original state of the fields
    dispose();
  }
  private void getFields() {
    try {
      RowMetaInterface r = transMeta.getPrevStepFields(stepname);
      if (r != null) {
        BaseStepDialog.getFieldsFromPrevious(r, 1, new int[] { 1 },
            new int[] { 2 }, -1, -1, null);
        // set some default arff stuff for the new fields
        int nrNonEmptyFields = .nrNonEmpty();
        for (int i = 0; i < nrNonEmptyFieldsi++) {
          TableItem item = .getNonEmpty(i);
          int kettleType = getKettleTypeInt(item.getText(2));
          if (Const.isEmpty(item.getText(3))) {
            switch (kettleType) {
            case ValueMetaInterface.TYPE_NUMBER:
            case ValueMetaInterface.TYPE_INTEGER:
            case ValueMetaInterface.TYPE_BOOLEAN:
              item.setText(3, "Numeric");
              break;
            case ValueMetaInterface.TYPE_STRING: {
              item.setText(3, "Nominal");
              int index = r.indexOfValue(item.getText(1));
              ValueMetaInterface vm = r.getValueMeta(index);
              if (vm.getStorageType() == ValueMetaInterface.STORAGE_TYPE_INDEXED) {
                Object[] legalValues = vm.getIndex();
                String vals = "";
                for (int j = 0; i < legalValues.lengthj++) {
                  if (j != 0) {
                    vals += "," + legalValues[j].toString();
                  } else {
                    vals += legalValues[j].toString();
                  }
                }
                item.setText(4, vals);
              }
            }
              break;
            case ValueMetaInterface.TYPE_DATE:
              item.setText(3, "Date");
              int index = r.indexOfValue(item.getText(1));
              ValueMetaInterface vm = r.getValueMeta(index);
              item.setText(4, vm.getDateFormat().toPattern());
              break;
            }
          }
        }
      }
    } catch (KettleException e) {
      logError(BaseMessages.getString(ArffOutputMeta.class,
          "System.Dialog.GetFieldsFailed.Message"), e);
      new ErrorDialog(shell, BaseMessages.getString(ArffOutputMeta.class,
          "System.Dialog.GetFieldsFailed.Title"), BaseMessages.getString(
          ArffOutputMeta.class"System.Dialog.GetFieldsFailed.Message"), e);
    }
  }
  private void ok() {
    if (Const.isEmpty(.getText())) {
      return;
    }
    stepname = .getText(); // return value
    String relName = .getText();
    String encoding = .getText();
    .setEncoding(encoding);
    String format = .getText();
    int nrNonEmptyFields = .nrNonEmpty();
    .allocate(nrNonEmptyFields);
    for (int i = 0; i < nrNonEmptyFieldsi++) {
      TableItem item = .getNonEmpty(i);
      String fieldName = item.getText(1);
      int kettleType = getKettleTypeInt(item.getText(2));
      int arffType = getArffTypeInt(item.getText(3));
      String nomDate = item.getText(4);
      .getOutputFields()[i] = new ArffMeta(fieldNamekettleType,
          arffType);
      if (!Const.isEmpty(nomDate)) {
        if (arffType == ArffMeta.NOMINAL) {
          .getOutputFields()[i].setNominalVals(nomDate);
        } else if (arffType == ArffMeta.DATE) {
          .getOutputFields()[i].setDateFormat(nomDate);
        }
      }
    }
    // weight field set?
    if (.getSelection()
        && !Const.isEmpty(.getText())) {
    } else {
    }
        .getSelection());
      changed = .hasChanged();
    }
    dispose();
  }
New to GrepCode? Check out our FAQ X