/*! ******************************************************************************
*
* 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.ui.trans.steps.fixedinput;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
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.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.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.Props;
import org.pentaho.di.core.row.value.ValueMetaFactory;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.steps.fixedinput.FixedFileInputField;
import org.pentaho.di.trans.steps.fixedinput.FixedInputMeta;
import org.pentaho.di.ui.core.PropsUI;
public class FixedFileImportWizardPage2 extends WizardPage {
private static Class<?> PKG = FixedInputMeta.class; // for i18n purposes, needed by Translator2!!
private List wFields;
private FormData fdFields;
private List wSamples;
private FormData fdSamples;
private Label wlFieldname;
private Text wFieldname;
private FormData fdlFieldname, fdFieldname;
private Label wlWidth;
private Text wWidth;
private FormData fdlWidth, fdWidth;
private Label wlLength;
private Text wLength;
private FormData fdlLength, fdLength;
private Label wlFieldtype;
private CCombo wFieldtype;
private FormData fdlFieldtype, fdFieldtype;
private Label wlFormat;
private Text wFormat;
private FormData fdlFormat, fdFormat;
/*
* private Label wlTrimtype; private CCombo wTrimtype; private FormData fdlTrimtype, fdTrimtype;
*/
private Label wlPrecision;
private Text wPrecision;
private FormData fdlPrecision, fdPrecision;
private Label wlDecimal;
private Text wDecimal;
private FormData fdlDecimal, fdDecimal;
private Label wlGroup;
private Text wGroup;
private FormData fdlGroup, fdGroup;
private Label wlCurrency;
private Text wCurrency;
private FormData fdlCurrency, fdCurrency;
/*
* private Label wlIgnore; private Button wIgnore; private FormData fdlIgnore, fdIgnore;
*
* private Label wlRepeat; private Button wRepeat; private FormData fdlRepeat, fdRepeat;
*
* private Label wlNull; private Text wNull; private FormData fdlNull, fdNull;
*/
private Button wGuess, wGuessAll;
private FormData fdGuess, fdGuessAll;
private Button wPrev, wNext;
private FormData fdPrev, fdNext;
private PropsUI props;
private java.util.List<String> rows;
private java.util.List<FixedFileInputField> fields;
private Shell shell;
public FixedFileImportWizardPage2( String arg, PropsUI props, java.util.List<String> rows,
java.util.List<FixedFileInputField> fields ) {
super( arg );
this.props = props;
this.rows = rows;
this.fields = fields;
setTitle( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.DialogTitle" ) );
setDescription( "Give a name to the fields in this text file" );
}
public void createControl( Composite parent ) {
shell = parent.getShell();
int margin = Const.MARGIN;
int left = props.getMiddlePct() / 2;
int middle = props.getMiddlePct();
int right = middle + left;
// create the composite to hold the widgets
Composite composite = new Composite( parent, SWT.NONE );
props.setLook( composite );
FormLayout compLayout = new FormLayout();
compLayout.marginHeight = Const.FORM_MARGIN;
compLayout.marginWidth = Const.FORM_MARGIN;
composite.setLayout( compLayout );
wFields = new List( composite, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL );
props.setLook( wFields );
fdFields = new FormData();
fdFields.top = new FormAttachment( 0, 0 );
fdFields.left = new FormAttachment( 0, 0 );
fdFields.right = new FormAttachment( left, 0 );
fdFields.bottom = new FormAttachment( 100, 0 );
wFields.setLayoutData( fdFields );
refreshFields();
// Fieldname line
wlFieldname = new Label( composite, SWT.RIGHT );
wlFieldname.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Fieldname.Label" ) );
props.setLook( wlFieldname );
fdlFieldname = new FormData();
fdlFieldname.left = new FormAttachment( wFields, 0 );
fdlFieldname.top = new FormAttachment( 0, 0 );
fdlFieldname.right = new FormAttachment( middle, 0 );
wlFieldname.setLayoutData( fdlFieldname );
wFieldname = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wFieldname );
fdFieldname = new FormData();
fdFieldname.left = new FormAttachment( middle, margin );
fdFieldname.right = new FormAttachment( right, 0 );
fdFieldname.top = new FormAttachment( 0, 0 );
wFieldname.setLayoutData( fdFieldname );
// Position line
wlWidth = new Label( composite, SWT.RIGHT );
wlWidth.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.FieldWidth.Label" ) );
props.setLook( wlWidth );
fdlWidth = new FormData();
fdlWidth.left = new FormAttachment( wFields, 0 );
fdlWidth.top = new FormAttachment( wFieldname, margin );
fdlWidth.right = new FormAttachment( middle, 0 );
wlWidth.setLayoutData( fdlWidth );
wWidth = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wWidth );
fdWidth = new FormData();
fdWidth.left = new FormAttachment( middle, margin );
fdWidth.top = new FormAttachment( wFieldname, margin );
fdWidth.right = new FormAttachment( right, 0 );
wWidth.setLayoutData( fdWidth );
// Topos line
wlLength = new Label( composite, SWT.RIGHT );
wlLength.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.FieldLength.Label" ) );
props.setLook( wlLength );
fdlLength = new FormData();
fdlLength.left = new FormAttachment( wFields, 0 );
fdlLength.top = new FormAttachment( wWidth, margin );
fdlLength.right = new FormAttachment( middle, 0 );
wlLength.setLayoutData( fdlLength );
wLength = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wLength );
fdLength = new FormData();
fdLength.left = new FormAttachment( middle, margin );
fdLength.top = new FormAttachment( wWidth, margin );
fdLength.right = new FormAttachment( right, 0 );
wLength.setLayoutData( fdLength );
// Fieldtype line
wlFieldtype = new Label( composite, SWT.RIGHT );
wlFieldtype.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.FieldType.Label" ) );
props.setLook( wlFieldtype );
fdlFieldtype = new FormData();
fdlFieldtype.left = new FormAttachment( wFields, 0 );
fdlFieldtype.top = new FormAttachment( wLength, margin );
fdlFieldtype.right = new FormAttachment( middle, 0 );
wlFieldtype.setLayoutData( fdlFieldtype );
wFieldtype = new CCombo( composite, SWT.BORDER | SWT.READ_ONLY );
props.setLook( wFieldtype );
for ( int i = 0; i < ValueMetaFactory.getValueMetaNames().length; i++ ) {
wFieldtype.add( ValueMetaFactory.getValueMetaNames()[i] );
}
fdFieldtype = new FormData();
fdFieldtype.left = new FormAttachment( middle, margin );
fdFieldtype.top = new FormAttachment( wLength, margin );
fdFieldtype.right = new FormAttachment( right, 0 );
wFieldtype.setLayoutData( fdFieldtype );
// Format line
wlFormat = new Label( composite, SWT.RIGHT );
wlFormat.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.FieldFormatter.Label" ) );
props.setLook( wlFormat );
fdlFormat = new FormData();
fdlFormat.left = new FormAttachment( wFields, 0 );
fdlFormat.top = new FormAttachment( wFieldtype, margin );
fdlFormat.right = new FormAttachment( middle, 0 );
wlFormat.setLayoutData( fdlFormat );
wFormat = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wFormat );
fdFormat = new FormData();
fdFormat.left = new FormAttachment( middle, margin );
fdFormat.top = new FormAttachment( wFieldtype, margin );
fdFormat.right = new FormAttachment( right, 0 );
wFormat.setLayoutData( fdFormat );
/*
* // Ignore checkbox wlIgnore=new Label(composite, SWT.RIGHT); wlIgnore.setText(BaseMessages.getString(PKG,
* "FixedFileImportWizardPage2.Ignore.Label")); props.setLook(wlIgnore); fdlIgnore=new FormData(); fdlIgnore.left =
* new FormAttachment(wFields, 0); fdlIgnore.top = new FormAttachment(wFormat, margin); fdlIgnore.right= new
* FormAttachment(middle, 0); wlIgnore.setLayoutData(fdlIgnore); wIgnore=new Button(composite, SWT.CHECK);
* props.setLook(wIgnore); fdIgnore=new FormData(); fdIgnore.left = new FormAttachment(middle, margin); fdIgnore.top
* = new FormAttachment(wFormat, margin); fdIgnore.right= new FormAttachment(right, 0);
* wIgnore.setLayoutData(fdIgnore);
*
* // Trimtype line wlTrimtype=new Label(composite, SWT.RIGHT); wlTrimtype.setText(BaseMessages.getString(PKG,
* "FixedFileImportWizardPage2.TrimType.Label")); props.setLook(wlTrimtype); fdlTrimtype=new FormData();
* fdlTrimtype.left = new FormAttachment(wFields, 0); fdlTrimtype.top = new FormAttachment(wIgnore, margin);
* fdlTrimtype.right= new FormAttachment(middle, 0); wlTrimtype.setLayoutData(fdlTrimtype); wTrimtype=new
* CCombo(composite, SWT.BORDER | SWT.READ_ONLY); props.setLook(wTrimtype); for (int i=0;i<
* TextFileInputMeta.trimTypeDesc.length;i++) { wTrimtype.add( TextFileInputMeta.trimTypeDesc[i] ); } fdTrimtype=new
* FormData(); fdTrimtype.left = new FormAttachment(middle, margin); fdTrimtype.top = new FormAttachment(wIgnore,
* margin); fdTrimtype.right= new FormAttachment(right, 0); wTrimtype.setLayoutData(fdTrimtype);
*/
// Precision line
wlPrecision = new Label( composite, SWT.RIGHT );
wlPrecision.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Precision.Label" ) );
props.setLook( wlPrecision );
fdlPrecision = new FormData();
fdlPrecision.left = new FormAttachment( wFields, 0 );
fdlPrecision.top = new FormAttachment( wFormat, margin );
fdlPrecision.right = new FormAttachment( middle, 0 );
wlPrecision.setLayoutData( fdlPrecision );
wPrecision = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wPrecision );
fdPrecision = new FormData();
fdPrecision.left = new FormAttachment( middle, margin );
fdPrecision.top = new FormAttachment( wFormat, margin );
fdPrecision.right = new FormAttachment( right, 0 );
wPrecision.setLayoutData( fdPrecision );
// Currency line
wlCurrency = new Label( composite, SWT.RIGHT );
wlCurrency.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Currency.Label" ) );
props.setLook( wlCurrency );
fdlCurrency = new FormData();
fdlCurrency.left = new FormAttachment( wFields, 0 );
fdlCurrency.top = new FormAttachment( wPrecision, margin );
fdlCurrency.right = new FormAttachment( middle, 0 );
wlCurrency.setLayoutData( fdlCurrency );
wCurrency = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wCurrency );
fdCurrency = new FormData();
fdCurrency.left = new FormAttachment( middle, margin );
fdCurrency.top = new FormAttachment( wPrecision, margin );
fdCurrency.right = new FormAttachment( right, 0 );
wCurrency.setLayoutData( fdCurrency );
// Decimal line
wlDecimal = new Label( composite, SWT.RIGHT );
wlDecimal.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Decimal.Label" ) );
props.setLook( wlDecimal );
fdlDecimal = new FormData();
fdlDecimal.left = new FormAttachment( wFields, 0 );
fdlDecimal.top = new FormAttachment( wCurrency, margin );
fdlDecimal.right = new FormAttachment( middle, 0 );
wlDecimal.setLayoutData( fdlDecimal );
wDecimal = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wDecimal );
fdDecimal = new FormData();
fdDecimal.left = new FormAttachment( middle, margin );
fdDecimal.top = new FormAttachment( wCurrency, margin );
fdDecimal.right = new FormAttachment( right, 0 );
wDecimal.setLayoutData( fdDecimal );
// Group line
wlGroup = new Label( composite, SWT.RIGHT );
wlGroup.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Group.Label" ) );
props.setLook( wlGroup );
fdlGroup = new FormData();
fdlGroup.left = new FormAttachment( wFields, 0 );
fdlGroup.top = new FormAttachment( wDecimal, margin );
fdlGroup.right = new FormAttachment( middle, 0 );
wlGroup.setLayoutData( fdlGroup );
wGroup = new Text( composite, SWT.SINGLE | SWT.LEFT | SWT.BORDER );
props.setLook( wGroup );
fdGroup = new FormData();
fdGroup.left = new FormAttachment( middle, margin );
fdGroup.top = new FormAttachment( wDecimal, margin );
fdGroup.right = new FormAttachment( right, 0 );
wGroup.setLayoutData( fdGroup );
/*
* // Ignore checkbox wlRepeat=new Label(composite, SWT.RIGHT); wlRepeat.setText(BaseMessages.getString(PKG,
* "FixedFileImportWizardPage2.Repeat.Label")); props.setLook(wlRepeat); fdlRepeat=new FormData(); fdlRepeat.left =
* new FormAttachment(wFields, 0); fdlRepeat.top = new FormAttachment(wGroup, margin); fdlRepeat.right= new
* FormAttachment(middle, 0); wlRepeat.setLayoutData(fdlRepeat); wRepeat=new Button(composite, SWT.CHECK);
* props.setLook(wRepeat); fdRepeat=new FormData(); fdRepeat.left = new FormAttachment(middle, margin); fdRepeat.top
* = new FormAttachment(wGroup, margin); fdRepeat.right= new FormAttachment(right, 0);
* wRepeat.setLayoutData(fdRepeat);
*
* // Null line wlNull=new Label(composite, SWT.RIGHT); wlNull.setText(BaseMessages.getString(PKG,
* "FixedFileImportWizardPage2.Null.Label")); props.setLook(wlNull); fdlNull=new FormData(); fdlNull.left = new
* FormAttachment(wFields, 0); fdlNull.top = new FormAttachment(wRepeat, margin); fdlNull.right= new
* FormAttachment(middle, 0); wlNull.setLayoutData(fdlNull); wNull=new Text(composite, SWT.SINGLE | SWT.LEFT |
* SWT.BORDER); props.setLook(wNull); fdNull=new FormData(); fdNull.left = new FormAttachment(middle, margin);
* fdNull.top = new FormAttachment(wRepeat, margin); fdNull.right= new FormAttachment(right, 0);
* wNull.setLayoutData(fdNull);
*/
// The buttons
wPrev = new Button( composite, SWT.PUSH );
wPrev.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Previous.Button" ) );
fdPrev = new FormData();
fdPrev.left = new FormAttachment( left, margin );
fdPrev.bottom = new FormAttachment( 100, 0 );
wPrev.setLayoutData( fdPrev );
// Guess button
wGuess = new Button( composite, SWT.PUSH );
wGuess.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Guess.Button" ) );
fdGuess = new FormData();
fdGuess.left = new FormAttachment( wPrev, margin );
fdGuess.bottom = new FormAttachment( 100, 0 );
wGuess.setLayoutData( fdGuess );
// GuessAll button
wGuessAll = new Button( composite, SWT.PUSH );
wGuessAll.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.GuessAll.Button" ) );
fdGuessAll = new FormData();
fdGuessAll.left = new FormAttachment( wGuess, 0 );
fdGuessAll.bottom = new FormAttachment( 100, 0 );
wGuessAll.setLayoutData( fdGuessAll );
wNext = new Button( composite, SWT.PUSH );
wNext.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.Next.Button" ) );
fdNext = new FormData();
fdNext.left = new FormAttachment( wGuessAll, 0 );
fdNext.bottom = new FormAttachment( 100, 0 );
wNext.setLayoutData( fdNext );
// Sample list on the right...
wSamples = new List( composite, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL );
props.setLook( wSamples, Props.WIDGET_STYLE_FIXED );
fdSamples = new FormData();
fdSamples.top = new FormAttachment( 0, 0 );
fdSamples.left = new FormAttachment( right, 0 );
fdSamples.right = new FormAttachment( 100, 0 );
fdSamples.bottom = new FormAttachment( 100, 0 );
wSamples.setLayoutData( fdSamples );
wFields.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
showInfo();
}
} );
if ( wFields.getItemCount() > 0 ) {
wFields.select( 0 );
showInfo();
}
wFieldtype.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
int valtype = ValueMetaFactory.getIdForValueMeta( wFieldtype.getText() );
FixedFileInputField field = fields.get( idx );
field.setType( valtype );
}
}
} );
wFieldname.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setName( wFieldname.getText() );
wFields.setItem( idx, wFieldname.getText() );
}
}
} );
wFormat.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setFormat( wFormat.getText() );
}
}
} );
wNext.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 && idx < wFields.getItemCount() - 1 ) {
wFields.select( idx + 1 );
wFields.showSelection();
showInfo();
}
}
} );
wPrev.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx > 0 ) {
wFields.select( idx - 1 );
wFields.showSelection();
showInfo();
}
}
} );
/*
* wIgnore.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int idx =
* wFields.getSelectionIndex(); if (idx>=0) { FixedFileInputField field = fields.get(idx); field.flipIgnored(); } }
* } );
*/
wGuess.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setSamples( wSamples.getItems() );
field.guess();
showInfo();
}
}
} );
wGuessAll.addSelectionListener( new SelectionAdapter() {
public void widgetSelected( SelectionEvent e ) {
MessageBox mb = new MessageBox( shell, SWT.YES | SWT.NO | SWT.ICON_QUESTION );
mb.setMessage( BaseMessages.getString(
PKG, "FixedFileImportWizardPage2.OverwriteTypeSettings.DialogMessage" ) );
mb.setText( BaseMessages.getString( PKG, "FixedFileImportWizardPage2.OverwriteTypeSettings.DialogTitle" ) );
int answer = mb.open();
if ( answer == SWT.YES ) {
int position = 0;
for ( int i = 0; i < fields.size(); i++ ) {
FixedFileInputField field = fields.get( i );
field.setSamples( getRowSamples( position, field.getWidth() ) );
field.guess();
wFields.select( i );
wFields.showSelection();
showInfo();
position += field.getWidth();
}
}
if ( wFields.getItemCount() > 0 ) {
wFields.select( 0 );
wFields.showSelection();
}
showInfo();
}
} );
/*
* wRepeat.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int idx =
* wFields.getSelectionIndex(); if (idx>=0) { TextFileInputField field = (TextFileInputField)fields.get(idx);
* field.flipRepeated(); } } } );
*/
wCurrency.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setCurrency( wCurrency.getText() );
}
}
} );
wGroup.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setGrouping( wGroup.getText() );
}
}
} );
wDecimal.addModifyListener( new ModifyListener() {
public void modifyText( ModifyEvent e ) {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
FixedFileInputField field = fields.get( idx );
field.setDecimal( wDecimal.getText() );
}
}
} );
/*
* wNull.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { int idx =
* wFields.getSelectionIndex(); if (idx>=0) { TextFileInputField field = (TextFileInputField)fields.get(idx);
* field.setNullString(wNull.getText()); } } } );
*
* wTrimtype.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { int idx =
* wFields.getSelectionIndex(); if (idx>=0) { int trimType =
* TextFileInputMeta.getTrimTypeByDesc(wTrimtype.getText()); TextFileInputField field =
* (TextFileInputField)fields.get(idx); field.setTrimType(trimType); } } } );
*/
// set the composite as the control for this page
setControl( composite );
}
public boolean canFlipToNextPage() {
refreshFields();
if ( wFields.getItemCount() > 0 ) {
wFields.select( 0 );
showInfo();
}
return false;
}
private void refreshFields() {
wFields.removeAll();
for ( int i = 0; i < fields.size(); i++ ) {
wFields.add( fields.get( i ).getName() );
}
}
private String[] getRowSamples( int position, int length ) {
if ( position < 0 || position + length < 0 ) {
return new String[0];
}
String[] retval = new String[rows.size()];
for ( int i = 0; i < rows.size(); i++ ) {
String line = rows.get( i );
if ( position < line.length() ) {
if ( position + length >= line.length() ) {
retval[i] = line.substring( position );
} else {
try {
retval[i] = line.substring( position, position + length );
} catch ( StringIndexOutOfBoundsException e ) {
System.out.println( "SIOOB: " + e.toString() );
}
}
} else {
retval[i] = "";
}
}
return retval;
}
private void showInfo() {
int idx = wFields.getSelectionIndex();
if ( idx >= 0 ) {
int position = 0;
for ( int i = 0; i < idx; i++ ) {
position += fields.get( i ).getWidth();
}
FixedFileInputField field = fields.get( idx );
String name = field.getName();
int width = field.getWidth();
int length = field.getLength();
String type = ValueMetaFactory.getValueMetaName( field.getType() );
String format = field.getFormat();
int precision = field.getPrecision();
String currency = field.getCurrency();
String decimal = field.getDecimal();
String group = field.getGrouping();
if ( name != null ) {
wFieldname.setText( name );
}
wWidth.setText( "" + width );
wLength.setText( "" + length );
if ( type != null ) {
wFieldtype.setText( type );
}
if ( format != null ) {
wFormat.setText( format );
}
wPrecision.setText( "" + precision );
if ( currency != null ) {
wCurrency.setText( currency );
}
if ( decimal != null ) {
wDecimal.setText( decimal );
}
if ( group != null ) {
wGroup.setText( group );
}
// Clear the sample list...
wSamples.removeAll();
String[] samples = getRowSamples( position, width );
for ( int i = 0; i < samples.length; i++ ) {
wSamples.add( samples[i] );
}
}
}
}