| /******************************************************************************* |
| * Copyright (c) 2000, 2017 IBM Corporation and others. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| *******************************************************************************/ |
| package org.eclipse.dltk.internal.ui.wizards.buildpath; |
| |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.resources.IResource; |
| import org.eclipse.core.resources.IWorkspace; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.dltk.core.DLTKCore; |
| import org.eclipse.dltk.internal.corext.util.Messages; |
| import org.eclipse.dltk.internal.ui.wizards.NewWizardMessages; |
| import org.eclipse.dltk.internal.ui.wizards.dialogfields.DialogField; |
| import org.eclipse.dltk.internal.ui.wizards.dialogfields.IDialogFieldListener; |
| import org.eclipse.dltk.internal.ui.wizards.dialogfields.LayoutUtil; |
| import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringDialogField; |
| import org.eclipse.dltk.ui.dialogs.StatusInfo; |
| import org.eclipse.jface.dialogs.StatusDialog; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Shell; |
| |
| public class NewContainerDialog extends StatusDialog { |
| |
| private StringDialogField fContainerDialogField; |
| private StatusInfo fContainerFieldStatus; |
| |
| private IFolder fFolder; |
| private IPath[] fExistingFolders; |
| private IProject fCurrProject; |
| |
| public NewContainerDialog(Shell parent, String title, IProject project, IPath[] existingFolders, BPListElement entryToEdit) { |
| super(parent); |
| setTitle(title); |
| |
| fContainerFieldStatus= new StatusInfo(); |
| |
| SourceContainerAdapter adapter= new SourceContainerAdapter(); |
| fContainerDialogField= new StringDialogField(); |
| fContainerDialogField.setDialogFieldListener(adapter); |
| |
| fFolder= null; |
| fExistingFolders= existingFolders; |
| fCurrProject= project; |
| |
| if (entryToEdit == null) { |
| fContainerDialogField.setText(""); //$NON-NLS-1$ |
| } else { |
| fContainerDialogField.setText(entryToEdit.getPath().removeFirstSegments(1).toString()); |
| } |
| } |
| |
| public void setMessage(String message) { |
| fContainerDialogField.setLabelText(message); |
| } |
| |
| @Override |
| protected Control createDialogArea(Composite parent) { |
| Composite composite= (Composite)super.createDialogArea(parent); |
| |
| int widthHint= convertWidthInCharsToPixels(80); |
| |
| Composite inner= new Composite(composite, SWT.NONE); |
| GridLayout layout= new GridLayout(); |
| layout.marginHeight= 0; |
| layout.marginWidth= 0; |
| layout.numColumns= 1; |
| inner.setLayout(layout); |
| |
| fContainerDialogField.doFillIntoGrid(inner, 2); |
| |
| LayoutUtil.setWidthHint(fContainerDialogField.getLabelControl(null), widthHint); |
| LayoutUtil.setWidthHint(fContainerDialogField.getTextControl(null), widthHint); |
| LayoutUtil.setHorizontalGrabbing(fContainerDialogField.getTextControl(null)); |
| |
| fContainerDialogField.postSetFocusOnDialogField(parent.getDisplay()); |
| applyDialogFont(composite); |
| return composite; |
| } |
| |
| |
| // -------- SourceContainerAdapter -------- |
| |
| private class SourceContainerAdapter implements IDialogFieldListener { |
| |
| // -------- IDialogFieldListener |
| |
| @Override |
| public void dialogFieldChanged(DialogField field) { |
| doStatusLineUpdate(); |
| } |
| } |
| |
| protected void doStatusLineUpdate() { |
| checkIfPathValid(); |
| updateStatus(fContainerFieldStatus); |
| } |
| |
| protected void checkIfPathValid() { |
| fFolder= null; |
| |
| String pathStr= fContainerDialogField.getText(); |
| if (pathStr.length() == 0) { |
| fContainerFieldStatus.setError(NewWizardMessages.NewContainerDialog_error_enterpath); |
| return; |
| } |
| IPath path= fCurrProject.getFullPath().append(pathStr); |
| IWorkspace workspace= fCurrProject.getWorkspace(); |
| |
| IStatus pathValidation= workspace.validatePath(path.toString(), IResource.FOLDER); |
| if (!pathValidation.isOK()) { |
| fContainerFieldStatus.setError(Messages.format(NewWizardMessages.NewContainerDialog_error_invalidpath, pathValidation.getMessage())); |
| return; |
| } |
| IFolder folder= fCurrProject.getFolder(pathStr); |
| if (isFolderExisting(folder)) { |
| fContainerFieldStatus.setError(NewWizardMessages.NewContainerDialog_error_pathexists); |
| return; |
| } |
| fContainerFieldStatus.setOK(); |
| fFolder= folder; |
| } |
| |
| private boolean isFolderExisting(IFolder folder) { |
| for (int i= 0; i < fExistingFolders.length; i++) { |
| if (folder.getFullPath().equals(fExistingFolders[i])) { |
| return true; |
| } |
| } |
| return false; |
| } |
| |
| |
| |
| public IFolder getFolder() { |
| return fFolder; |
| } |
| |
| @Override |
| protected void configureShell(Shell newShell) { |
| super.configureShell(newShell); |
| if (DLTKCore.DEBUG) { |
| System.err.println("NewContainerDialog: Add help support"); //$NON-NLS-1$ |
| } |
| //PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, IDLTKHelpContextIds.NEW_CONTAINER_DIALOG); |
| } |
| |
| |
| } |