/*! ****************************************************************************** * * 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.core; import org.apache.commons.io.FilenameUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.pentaho.di.core.util.Assert; import org.pentaho.di.ui.core.widget.TextVar; /** * * @author <a href="mailto:thomas.hoedl@aschauer-edv.at">Thomas Hoedl(asc042)</a> * */ public class SimpleFileSelection extends SelectionAdapter { /** * The default filter extension. */ public static final String DEFAULT_FILTER_EXTENSION = "*"; /** * The default file extension. */ public static final String DEFAULT_FILTER_NAME = "All files (*.*)"; private final Shell shell; private final TextVar textVar; private final String[] filterExtensions; private final String[] filterNames; /** * Constructor. * * @param shell * shell to set. * @param textVar * text variable to edit. * @param filterExtensions * filter extensions to set. * @param filterNames * filter names to set. * @throws IllegalArgumentException * if shell or text variable is null. */ public SimpleFileSelection( final Shell shell, final TextVar textVar, final String[] filterExtensions, final String[] filterNames ) throws IllegalArgumentException { super(); Assert.assertNotNull( shell, "Shell cannot be null" ); Assert.assertNotNull( textVar, "Text var cannot be null" ); Assert.assertNotNull( filterNames, "Filter names cannot be null" ); Assert.assertNotNull( filterExtensions, "Filter extensions cannot be null" ); this.shell = shell; this.textVar = textVar; this.filterExtensions = new String[filterExtensions.length]; System.arraycopy( filterExtensions, 0, this.filterExtensions, 0, filterExtensions.length ); this.filterNames = new String[filterNames.length]; System.arraycopy( filterNames, 0, this.filterNames, 0, filterNames.length ); } /** * Constructor. * * @param shell * the shell to set. * @param textVar * the text variable to edit. * @throws IllegalArgumentException * if shell or text variable is null. */ public SimpleFileSelection( final Shell shell, final TextVar textVar ) throws IllegalArgumentException { this( shell, textVar, new String[] { DEFAULT_FILTER_EXTENSION }, new String[] { DEFAULT_FILTER_NAME } ); } /** * Constructor. * * @param shell * the shell to set. * @param textVar * the text variable to edit. * @param filterNames * the filter names to use. * @throws IllegalArgumentException * if shell or text variable is null. */ public SimpleFileSelection( final Shell shell, final TextVar textVar, final String... filterNames ) throws IllegalArgumentException { this( shell, textVar, new String[] { DEFAULT_FILTER_EXTENSION }, filterNames ); } /** * {@inheritDoc} * * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ @Override public void widgetSelected( final SelectionEvent event ) { final FileDialog dialog = new FileDialog( this.shell, SWT.OPEN ); dialog.setFilterExtensions( this.filterExtensions ); dialog.setFilterNames( this.filterNames ); if ( this.textVar.getText() != null ) { dialog.setFileName( this.textVar.getText() ); } if ( dialog.open() != null ) { final String filename = FilenameUtils.concat( dialog.getFilterPath(), dialog.getFileName() ); this.textVar.setText( filename ); } } }