| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 IBM Corporation and others. |
| // 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: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.library.edit.ui; |
| |
| import java.util.Arrays; |
| import java.util.Collection; |
| import java.util.HashSet; |
| |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.epf.common.utils.StrUtil; |
| import org.eclipse.epf.library.edit.LibraryEditPlugin; |
| import org.eclipse.epf.library.edit.LibraryEditResources; |
| import org.eclipse.epf.library.edit.TngAdapterFactory; |
| import org.eclipse.epf.library.edit.validation.IValidator; |
| import org.eclipse.epf.library.edit.validation.IValidatorFactory; |
| import org.eclipse.epf.uma.MethodConfiguration; |
| import org.eclipse.epf.uma.MethodElement; |
| import org.eclipse.epf.uma.MethodPlugin; |
| import org.eclipse.epf.uma.Process; |
| import org.eclipse.epf.uma.ProcessComponent; |
| import org.eclipse.epf.uma.ProcessPackage; |
| import org.eclipse.epf.uma.ProcessPlanningTemplate; |
| import org.eclipse.epf.uma.UmaPackage; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.viewers.CheckboxTableViewer; |
| import org.eclipse.jface.viewers.ComboViewer; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| 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.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Shell; |
| import org.eclipse.swt.widgets.Text; |
| |
| |
| /** |
| * Displays the New Process dialog. |
| * |
| * @author Phong Nguyen Le |
| * @author Kelvin Low |
| * @since 1.0 |
| */ |
| public class NewProcessComponentDialog extends Dialog { |
| |
| private Composite area; |
| |
| private Text ctrl_name; |
| |
| private ComboViewer configComboViewer; |
| |
| private MethodConfiguration[] availableConfigurations; |
| |
| private ProcessComponent newProcComp; |
| |
| private Process[] availableBaseProcesses; |
| |
| private CheckboxTableViewer processTableViewer; |
| |
| // private ProcessPackage owner; |
| |
| private static final Collection ECLASS = new HashSet(); |
| |
| private IValidator validator; |
| |
| static { |
| ECLASS.add(UmaPackage.eINSTANCE.getProcessComponent()); |
| } |
| |
| /** |
| * Creates a new instance. |
| */ |
| public NewProcessComponentDialog(Shell parent, |
| MethodConfiguration[] availableConfigurations, |
| ProcessComponent newComp, Process[] availableBaseProcesses, |
| MethodPlugin currentPlugin, ProcessPackage owner) { |
| super(parent); |
| this.availableConfigurations = availableConfigurations; |
| this.newProcComp = newComp; |
| this.availableBaseProcesses = availableBaseProcesses; |
| // this.owner = owner; |
| validator = IValidatorFactory.INSTANCE.createNameValidator(owner, |
| newProcComp); |
| } |
| |
| /** |
| * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(Composite parent) |
| */ |
| protected Control createDialogArea(Composite parent) { |
| area = (Composite) super.createDialogArea(parent); |
| final GridLayout gridLayout = new GridLayout(); |
| gridLayout.numColumns = 3; |
| area.setLayout(gridLayout); |
| GridData areaGridData = new GridData(); |
| // areaGridData.widthHint = 300; |
| area.setLayoutData(areaGridData); |
| |
| // Name |
| Label nameLabel = new Label(area, SWT.NONE); |
| nameLabel.setText(LibraryEditResources.nameLabel_text); //$NON-NLS-1$ |
| { |
| GridData gridData = new GridData(GridData.BEGINNING); |
| nameLabel.setLayoutData(gridData); |
| } |
| |
| ctrl_name = new Text(area, SWT.BORDER); |
| { |
| GridData gridData = new GridData(GridData.BEGINNING |
| | GridData.FILL_HORIZONTAL); |
| gridData.horizontalSpan = 2; |
| gridData.widthHint = 200; |
| ctrl_name.setLayoutData(gridData); |
| } |
| |
| // Ref. Models |
| Label refModelLabel = new Label(area, SWT.NONE); |
| refModelLabel.setText(LibraryEditResources.defaultConfigLabel_text); //$NON-NLS-1$ |
| { |
| GridData gridData = new GridData(GridData.BEGINNING); |
| refModelLabel.setLayoutData(gridData); |
| } |
| |
| Composite comp = new Composite(area, SWT.NONE); |
| { |
| GridData gridData = new GridData(GridData.BEGINNING |
| | GridData.FILL_HORIZONTAL); |
| gridData.horizontalSpan = 2; |
| comp.setLayoutData(gridData); |
| GridLayout layout = new GridLayout(); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| comp.setLayout(layout); |
| } |
| |
| configComboViewer = new ComboViewer(comp, SWT.BORDER | SWT.READ_ONLY); |
| { |
| GridData gridData = new GridData(GridData.BEGINNING | GridData.FILL_HORIZONTAL); |
| gridData.widthHint = 200; |
| configComboViewer.getCombo().setLayoutData(gridData); |
| } |
| |
| |
| ILabelProvider labelProvider = new LabelProvider() { |
| public String getText(Object element) { |
| if (element instanceof MethodElement) { |
| return ((MethodElement) element).getName(); |
| } else { |
| return element.toString(); |
| } |
| } |
| }; |
| |
| // configListViewer = new ListViewer(comp, SWT.BORDER | SWT.SINGLE); |
| // configListViewer.setLabelProvider(labelProvider); |
| // configListViewer.add(availableConfigurations); |
| // if(newProcComp.getProcess().getDefaultContext() != null) { |
| // configListViewer.setSelection(new |
| // StructuredSelection(newProcComp.getProcess().getDefaultContext())); |
| // } |
| |
| configComboViewer.setLabelProvider(labelProvider); |
| configComboViewer.add(availableConfigurations); |
| if (newProcComp.getProcess().getDefaultContext() != null) { |
| configComboViewer.setSelection(new StructuredSelection(newProcComp |
| .getProcess().getDefaultContext())); |
| } |
| // configComboViewer.getControl().setSize(100, |
| // configComboViewer.getControl().getSize().y); |
| |
| if (newProcComp.getProcess() instanceof ProcessPlanningTemplate) { |
| // based on processes |
| // |
| Label label = new Label(area, SWT.NONE); |
| label.setText(LibraryEditResources.basedOnProcessesLabel_text); //$NON-NLS-1$ |
| { |
| GridData gridData = new GridData(GridData.BEGINNING); |
| label.setLayoutData(gridData); |
| } |
| |
| comp = new Composite(area, SWT.NONE); |
| { |
| GridData gridData = new GridData(GridData.BEGINNING |
| | GridData.FILL_HORIZONTAL); |
| gridData.horizontalSpan = 2; |
| comp.setLayoutData(gridData); |
| GridLayout layout = new GridLayout(); |
| layout.marginWidth = 0; |
| layout.marginHeight = 0; |
| comp.setLayout(layout); |
| } |
| |
| processTableViewer = CheckboxTableViewer.newCheckList(comp, |
| SWT.BORDER); |
| processTableViewer.getTable() |
| .setLayoutData( |
| new GridData(GridData.BEGINNING |
| | GridData.FILL_HORIZONTAL)); |
| AdapterFactory adapterFactory = TngAdapterFactory.INSTANCE |
| .getNavigatorView_ComposedAdapterFactory(); |
| processTableViewer |
| .setContentProvider(new AdapterFactoryContentProvider( |
| adapterFactory)); |
| processTableViewer |
| .setLabelProvider(new AdapterFactoryLabelProvider( |
| adapterFactory)); |
| processTableViewer.add(availableBaseProcesses); |
| } |
| |
| if (newProcComp.getName() != null) |
| ctrl_name.setText(newProcComp.getName()); |
| |
| super |
| .getShell() |
| .setText( |
| LibraryEditResources.newProcessComponentDialog_title); //$NON-NLS-1$ |
| |
| // addListeners(); |
| |
| return area; |
| } |
| |
| // protected void addListeners() { |
| // // DON'T use FocusLost listener because otherwise it goes infinite loop |
| // // and user cannot cancel out of it. |
| // ctrl_name.addTraverseListener(new TraverseListener() { |
| // public void keyTraversed(TraverseEvent e) { |
| // if (e.detail == SWT.TRAVERSE_TAB_NEXT || e.detail == |
| // SWT.TRAVERSE_TAB_PREVIOUS) { |
| // String name = ctrl_name.getText(); |
| // String msg = validator.isValid(name); |
| // if (msg != null) { |
| // LibraryEditPlugin.getDefault().getMsgDialog().displayError( |
| // LibraryEditResources.getString("LibraryEdit.createProcess.text"), |
| // //$NON-NLS-1$ |
| // msg); |
| // |
| // ctrl_name.getDisplay().asyncExec(new Runnable() { |
| // public void run () { |
| // ctrl_name.setFocus(); |
| // } |
| // }); |
| // ctrl_name.selectAll(); |
| // } |
| // } |
| // } |
| // }); |
| // } |
| |
| /** |
| * Creates the dialog buttons. |
| */ |
| protected void createButtonsForButtonBar(Composite parent) { |
| // Create the OK button. |
| createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, |
| true); |
| |
| // Create the Cancel button. |
| createButton(parent, IDialogConstants.CANCEL_ID, |
| IDialogConstants.CANCEL_LABEL, false); |
| |
| // Set help context for the OK button. |
| super.getButton(IDialogConstants.OK_ID); |
| |
| // Set help context for the Cancel button. |
| super.getButton(IDialogConstants.CANCEL_ID); |
| } |
| |
| /** |
| * Called when the OK button is selected. |
| */ |
| protected void okPressed() { |
| // Need to do validation again since TraverseListener only listens to |
| // tab out of field |
| // and doesn't take care of mouse clicks |
| String name = ctrl_name.getText().trim(); |
| name = StrUtil.makeValidFileName(name); |
| String msg = validator.isValid(name); |
| if (msg != null) { |
| LibraryEditPlugin.getDefault().getMsgDialog().displayError( |
| LibraryEditResources.createProcess_text, //$NON-NLS-1$ |
| msg); |
| ctrl_name.setFocus(); |
| ctrl_name.selectAll(); |
| return; |
| } |
| |
| IStructuredSelection selected = (IStructuredSelection) configComboViewer |
| .getSelection(); |
| if (selected.isEmpty()) { |
| LibraryEditPlugin.getDefault().getMsgDialog().displayError( |
| LibraryEditResources.createProcess_text, //$NON-NLS-1$ |
| LibraryEditResources.noDefaultConfigError_msg); //$NON-NLS-1$ |
| return; |
| } |
| |
| newProcComp.setName(name); |
| newProcComp.getProcess().setName(name); |
| newProcComp.getProcess().setPresentationName(name); |
| newProcComp.getProcess().setDefaultContext( |
| (MethodConfiguration) ((IStructuredSelection) configComboViewer |
| .getSelection()).getFirstElement()); |
| if (newProcComp.getProcess() instanceof ProcessPlanningTemplate) { |
| ProcessPlanningTemplate procPlanningTempl = (ProcessPlanningTemplate) newProcComp |
| .getProcess(); |
| procPlanningTempl.getBasedOnProcesses().addAll( |
| Arrays.asList(processTableViewer.getCheckedElements())); |
| } |
| super.okPressed(); |
| } |
| |
| } |