Java tutorial
/* ---------------------------------------------------------------- * 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; } }