/* ----------------------------------------------------------------
* Original File Name: GeneratorOptionsDialog.java
* Creation Date: 2012-10-08
* Description: GeneratorOptionsDialog
* ----------------------------------------------------------------
* ----------------------------------------------------------------
* Copyright (c) 2010 BestSolution.at EDV Systemhaus GmbH
* All Rights Reserved.
*
* BestSolution.at MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE , EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
* BestSolution.at SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
* LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS
* SOFTWARE OR ITS DERIVATIVES.
*
* This software must not be used, redistributed or based from in
* any other than the designated way without prior explicit written
* permission by BestSolution.at.
* -----------------------------------------------------------------
* -----------------------------------------------------------------
* $HeadURL: $
* $Revision: $
* Creator: martin.bluehweis@bestsolution.at
* Creation Date: 2012-10-08
*
* $LastChangedDate: $
* $LastChangedBy: $
* ----------------------------------------------------------------
*/
package at.bestsolution.persistence.emap.ecoregenerator;
import java.util.List;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.internal.core.JavaProject;
import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
import org.eclipse.jdt.internal.ui.wizards.buildpaths.FolderSelectionDialog;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import at.bestsolution.persistence.emap.ecoregenerator.i18n.Messages;
/**
* @author Martin Bluehweis
*/
@SuppressWarnings( "restriction" )
public class GeneratorOptionsDialog extends TitleAreaDialog {
/**
* projects list.
*/
private final List<IProject> projects;
/**
* projects comboViewer.
*/
private ComboViewer projectsViewer;
/**
* Text field Folder.
*/
private Text tFolder;
/**
* selectedProject.
*/
private IProject selectedProject = null;
/**
* selectedFolder.
*/
private IFolder selectedFolder = null;
/**
* Constructor.
*
* @param parentShell
* parent shell
* @param projects
* projects
*/
public GeneratorOptionsDialog( final Shell parentShell, final List<IProject> projects ) {
super( parentShell );
this.projects = projects;
}
@Override
protected final Control createDialogArea( final Composite parent ) {
Composite area = new Composite( parent, SWT.NONE );
area.setLayout( new GridLayout( 1, false ) );
area.setLayoutData( new GridData( GridData.FILL_BOTH ) );
getShell().setText( Messages.GeneratorOptionsDialog_shellTitle );
setTitle( Messages.GeneratorOptionsDialog_title );
Composite container = new Composite( area, SWT.NONE );
container.setLayout( new GridLayout( 3, false ) );
container.setLayoutData( new GridData( GridData.FILL_BOTH ) );
{
Label l = new Label( container, SWT.NONE );
l.setText( Messages.GeneratorOptionsDialog_emapProject );
projectsViewer = new ComboViewer( container, SWT.READ_ONLY );
projectsViewer.setLabelProvider( new LabelProvider() {
@Override
public String getText( final Object element ) {
if ( element == null ) {
return ""; //$NON-NLS-1$
}
else {
return ( (IProject) element ).getName();
}
}
} );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
gd.horizontalSpan = 2;
projectsViewer.getCombo().setLayoutData( gd );
projectsViewer.setContentProvider( ArrayContentProvider.getInstance() );
projectsViewer.setInput( projects );
projectsViewer.addSelectionChangedListener( new ISelectionChangedListener() {
@Override
public void selectionChanged( final SelectionChangedEvent event ) {
selectedFolder = null;
ISelection s = event.getSelection();
if ( s instanceof StructuredSelection && !s.isEmpty() ) {
selectedProject = (IProject) ( (StructuredSelection) s ).getFirstElement();
selectedFolder = selectedProject.getFolder( "/src/" + selectedProject.getName().replace( '.', '/' ) );
tFolder.setText( selectedFolder.getFullPath().toString() );
}
}
} );
}
{
Label l = new Label( container, SWT.NONE );
l.setText( Messages.GeneratorOptionsDialog_rootFolder );
tFolder = new Text( container, SWT.READ_ONLY | SWT.BORDER );
tFolder.setEditable( false );
GridData gd = new GridData( GridData.FILL_HORIZONTAL );
tFolder.setLayoutData( gd );
Button b = new Button( container, SWT.NONE );
b.setText( Messages.GeneratorOptionsDialog_buttonFolder );
b.addSelectionListener( new SelectionAdapter() {
@Override
public void widgetSelected( final SelectionEvent e ) {
if ( selectedProject != null ) {
ILabelProvider lp = new WorkbenchLabelProvider();
ITreeContentProvider cp = new WorkbenchContentProvider();
Class<?>[] acceptedClasses = new Class[] { IFolder.class };
ViewerFilter filter = new TypedViewerFilter( acceptedClasses );
FolderSelectionDialog dialog = new FolderSelectionDialog( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), lp, cp );
dialog.setTitle( Messages.GeneratorOptionsDialog_outputDirectory );
dialog.setMessage( Messages.GeneratorOptionsDialog_selectOutputDirectory );
dialog.addFilter( filter );
dialog.setInput( selectedProject );
if ( dialog.open() == Window.OK ) {
selectedFolder = (IFolder) dialog.getFirstResult();
tFolder.setText( selectedFolder.getFullPath().toString() );
}
}
}
} );
if ( !projects.isEmpty() ) {
projectsViewer.setSelection( new StructuredSelection( projects.get( 0 ) ) );
}
}
return area;
}
@Override
protected final void okPressed() {
if ( selectedProject != null ) {
if ( selectedFolder == null ) {
setNoFolderErrorMessage();
}
else {
super.okPressed();
}
}
}
/**
* setNoFolderErrorMessage.
*/
private void setNoFolderErrorMessage() {
setErrorMessage( Messages.GeneratorOptionsDialog_noFolderSelected );
}
/**
* getSelectedProject.
*
* @return selected project
*/
public final IProject getSelectedProject() {
return selectedProject;
}
/**
* getSelectedFolder.
*
* @return selected folder
*/
public final IFolder getSelectedFolder() {
return selectedFolder;
}
}