/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 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.elasticsearchbulk; import java.util.ArrayList; import java.util.concurrent.TimeUnit; import org.apache.commons.lang.StringUtils; 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.TraverseListener; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.pentaho.di.core.Const; import org.pentaho.di.ui.core.PropsUI; /** * Label, numeric text input and drop down time unit selector * */ public class LabelTimeComposite extends Composite { private static final PropsUI props = PropsUI.getInstance(); private Label wLabel; private Text wText; private CCombo wTimeUnit; private String lastValidValue = ""; public LabelTimeComposite( Composite composite, String labelText, String toolTipText ) { super( composite, SWT.NONE ); props.setLook( this ); int middle = props.getMiddlePct(); int threeQuarters = ( middle + 100 ) / 2; int margin = Const.MARGIN; FormLayout formLayout = new FormLayout(); formLayout.marginWidth = 0; formLayout.marginHeight = 0; formLayout.marginTop = 0; formLayout.marginBottom = 0; this.setLayout( formLayout ); wText = new Text( this, SWT.SINGLE | SWT.LEFT | SWT.BORDER ); FormData fdText = new FormData(); fdText.left = new FormAttachment( middle, margin ); fdText.right = new FormAttachment( threeQuarters, 0 ); wText.setLayoutData( fdText ); wText.setToolTipText( toolTipText ); wTimeUnit = new CCombo( this, SWT.SINGLE | SWT.DROP_DOWN | SWT.BORDER | SWT.LEFT ); FormData fdCombo = new FormData(); fdCombo.left = new FormAttachment( threeQuarters, margin ); fdCombo.right = new FormAttachment( 100, 0 ); wTimeUnit.setEditable( false ); wTimeUnit.setLayoutData( fdCombo ); wTimeUnit.setItems( getTimeUnits() ); wTimeUnit.setToolTipText( toolTipText ); wLabel = new Label( this, SWT.RIGHT ); props.setLook( wLabel ); wLabel.setText( labelText ); FormData fdLabel = new FormData(); fdLabel.left = new FormAttachment( 0, 0 ); fdLabel.right = new FormAttachment( middle, 0 ); fdLabel.top = new FormAttachment( wText, 0, SWT.CENTER ); wLabel.setLayoutData( fdLabel ); wLabel.setToolTipText( toolTipText ); wText.addModifyListener( new ModifyListener() { public void modifyText( ModifyEvent e ) { if ( !StringUtils.isNumeric( wText.getText() ) ) { wText.setText( lastValidValue ); } else { lastValidValue = wText.getText(); } } } ); } private String[] getTimeUnits() { ArrayList<String> timeUnits = new ArrayList<String>(); for ( TimeUnit timeUnit : TimeUnit.values() ) { timeUnits.add( timeUnit.toString() ); } return timeUnits.toArray( new String[timeUnits.size()] ); } public TimeUnit getTimeUnit() { return TimeUnit.valueOf( wTimeUnit.getItem( wTimeUnit.getSelectionIndex() ) ); } public void setTimeUnit( TimeUnit tu ) { for ( int i = 0; i < wTimeUnit.getItemCount(); i++ ) { if ( tu.toString().equals( wTimeUnit.getItem( i ) ) ) { wTimeUnit.select( i ); break; } } } public void addModifyListener( ModifyListener lsMod ) { wText.addModifyListener( lsMod ); } public void addSelectionListener( SelectionAdapter lsDef ) { wText.addSelectionListener( lsDef ); } public void setText( String name ) { wText.setText( name ); } public String getText() { return wText.getText(); } public void setEchoChar( char c ) { wText.setEchoChar( c ); } public void setEnabled( boolean flag ) { wText.setEnabled( flag ); wLabel.setEnabled( flag ); } public boolean setFocus() { return wText.setFocus(); } public void addTraverseListener( TraverseListener tl ) { wText.addTraverseListener( tl ); } public Text getTextWidget() { return wText; } public Label getLabelWidget() { return wLabel; } }