blob: e91c8a5ff11c78dff03c7e02d81df2d888ac218f [file] [log] [blame]
//------------------------------------------------------------------------------
// 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();
}
}