/******************************************************************************* * Copyright (c) 2008 Pierre-Antoine Grégoire. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pierre-Antoine Grégoire - initial API and implementation *******************************************************************************/ package org.org.eclipse.dws.ui.internal.wizards.pages; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.ExpandBar; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.org.eclipse.core.utils.platform.dialogs.input.FolderSelectionDialog; import org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField; import org.org.eclipse.core.utils.platform.fields.IDialogField; import org.org.eclipse.core.utils.platform.fields.StringButtonDialogField; import org.org.eclipse.core.utils.platform.tools.PluginToolBox; import org.org.eclipse.core.utils.platform.wizards.StatusInfo; import org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage; import org.org.eclipse.core.utils.platform.wizards.page.WizardContentsHelper; import org.org.eclipse.dws.core.internal.configuration.AggregatedProperties; import org.org.eclipse.dws.ui.internal.wizards.WizardsMessages; /** * The Class ChooseFolderWizardPage. */ public class ChooseFolderWizardPage extends AbstractWizardCustomPage { /** The Constant WIZARD_PAGE_ID. */ public static final String WIZARD_PAGE_ID = ChooseFolderWizardPage.class.getName(); /** The result. */ private String result = null; /** The target path dialog field. */ private StringButtonDialogField targetPathDialogField; /** * Instantiates a new choose folder wizard page. */ public ChooseFolderWizardPage() { super(WIZARD_PAGE_ID, WizardsMessages.ChooseFolderWizardPage_title, WizardsMessages.ChooseFolderWizardPage_description); setColumnsNumber(1); } /** * Gets the chosen folder. * * @return the chosen folder */ public String getChosenFolder() { return result; } /** * Describe. * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#describe() */ @Override protected void describe() { ExpandBar expandBar = WizardContentsHelper.createExpandBar(getWizardContainer()); expandBar.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite composite = new Composite(expandBar, SWT.NONE); GridLayout layout = new GridLayout(3, true); composite.setLayout(layout); targetPathDialogField = new StringButtonDialogField(getWizardAdapter()); targetPathDialogField.setLabelText(WizardsMessages.ChooseFolderWizardPage_target_path); targetPathDialogField.setButtonLabel(WizardsMessages.ChooseFolderWizardPage_browse); targetPathDialogField.setDialogFieldListener(getWizardAdapter()); targetPathDialogField.doFillIntoTable(composite, 3); WizardContentsHelper.createExpandItem(expandBar, composite, WizardsMessages.ChooseFolderWizardPage_targetPath); } /** * Initialize. * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#initialize() */ @Override protected void initialize() { targetPathDialogField.setFocus(); IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); String chosenProject = ((AbstractPomSyncWizardPage) getWizard().getPage(PomJavaSynchronizationWizardPage.WIZARD_PAGE_ID)).getChosenProjectName(); IProject project = null; if (chosenProject != null) { project = workspaceRoot.getProject(chosenProject); } targetPathDialogField.setText(AggregatedProperties.getDefaultLibFolder(project)); } /** * Touch. * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#touch() */ @Override protected void touch() { updateStatus(validate()); } /** * Validate. * * @return the i status * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#validate() */ @Override protected IStatus validate() { IStatus status = null; status = new StatusInfo(IStatus.INFO, WizardsMessages.ChooseFolderWizardPage_info_folder_targetted); if (targetPathDialogField.getText().equals("")) { //$NON-NLS-1$ status = new StatusInfo(IStatus.ERROR, WizardsMessages.ChooseFolderWizardPage_error_folder_not_targetted); } result = targetPathDialogField.getText(); return status; } /** * Handle change control pressed. * * @param field the field * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleChangeControlPressed(org.org.eclipse.core.utils.platform.fields.IDialogField) */ @Override protected void handleChangeControlPressed(IDialogField field) { IFolder folder = doBrowseFolders(); if (folder != null) { targetPathDialogField.setTextWithoutUpdate(folder.getProjectRelativePath().toString()); } touch(); } /** * Handle custom button pressed. * * @param field the field * @param buttonIndex the button index * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleCustomButtonPressed(org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField, int) */ @Override protected void handleCustomButtonPressed(IListDialogField field, int buttonIndex) { touch(); } /** * Handle dialog field changed. * * @param field the field * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleDialogFieldChanged(org.org.eclipse.core.utils.platform.fields.IDialogField) */ @Override protected void handleDialogFieldChanged(IDialogField field) { touch(); } /** * Handle double clicked. * * @param field the field * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleDoubleClicked(org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField) */ @Override protected void handleDoubleClicked(IListDialogField field) { touch(); } /** * Handle selection changed. * * @param field the field * * @see org.org.eclipse.core.utils.platform.wizards.page.AbstractWizardCustomPage#handleSelectionChanged(org.org.eclipse.core.utils.platform.dialogs.selection.IListDialogField) */ @Override protected void handleSelectionChanged(IListDialogField field) { touch(); } /** * Do browse folders. * * @return the i folder */ private IFolder doBrowseFolders() { String projectName = ((AbstractPomSyncWizardPage) getWizard().getPage(PomJavaSynchronizationWizardPage.WIZARD_PAGE_ID)).getChosenProjectName(); IProject project = PluginToolBox.getCurrentWorkspace().getRoot().getProject(projectName); IFolder folder = null; ILabelProvider lp = new WorkbenchLabelProvider(); ITreeContentProvider cp = new WorkbenchContentProvider(); FolderSelectionDialog dialog = new FolderSelectionDialog(getShell(), lp, cp, WizardsMessages.ChooseFolderWizardPage_choose_folder); dialog.setTitle(WizardsMessages.ChooseFolderWizardPage_create_new_folder); dialog.setInput(project); dialog.addFilter(new ViewerFilter() { @Override public boolean select(Viewer viewer, Object parentElement, Object element) { boolean result = false; if (((IResource) element).getType() == IResource.FOLDER) { result = true; } return result; } }); if (dialog.open() == Window.OK) { folder = (IFolder) dialog.getResult()[0]; } return folder; } }