blob: ead6f4f026d271bbfca3fb6c839b34bcf41a3a1b [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.authoring.ui.wizards;
import java.util.Iterator;
import java.util.List;
import org.eclipse.epf.authoring.ui.AuthoringUIPlugin;
import org.eclipse.epf.authoring.ui.AuthoringUIResources;
import org.eclipse.epf.authoring.ui.AuthoringUIText;
import org.eclipse.epf.library.ui.LibraryUIImages;
import org.eclipse.epf.library.util.LibraryUtil;
import org.eclipse.epf.library.util.ModelStorage;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* A wizard page that prompts the user to enter a name and description for a new
* Method Plug-in.
*
* @author Shashidhar Kannoori
* @author Kelvin Low
* @since 1.0
*/
public class NewMethodPluginWizardPage extends WizardPage implements Listener {
/**
* The wizard page name.
*/
public static final String PAGE_NAME = NewMethodPluginWizardPage.class
.getName();
private Text nameText;
private Text briefDescText;
private Text authorsText;
private CheckboxTableViewer referencedPluginsViewer;
private List plugins;
/**
* Creates a new instance.
*/
public NewMethodPluginWizardPage() {
super(PAGE_NAME);
setTitle(AuthoringUIResources.newPluginWizardPage_title); //$NON-NLS-1$
setDescription(AuthoringUIResources.newPluginWizardPage_text); //$NON-NLS-1$
setImageDescriptor(AuthoringUIPlugin.getDefault().getImageDescriptor(
"full/wizban/New.gif")); //$NON-NLS-1$
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
GridData labelGridData = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
Composite composite = new Composite(parent, SWT.NULL);
composite.setLayout(new GridLayout(2, false));
composite.setLayoutData(gridData);
Label nameLabel = new Label(composite, SWT.NONE);
nameLabel.setText(AuthoringUIText.NAME_TEXT);
nameText = new Text(composite, SWT.BORDER);
// TODO: Provide a unique default plug-in name.
nameText.setText("new_plug-in"); //$NON-NLS-1$
nameText.setLayoutData(gridData);
Label briefDescLabel = new Label(composite, SWT.NONE);
briefDescLabel.setText(AuthoringUIText.BRIEF_DESCRIPTION_TEXT);
briefDescLabel.setLayoutData(labelGridData);
briefDescText = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP
| SWT.V_SCROLL);
GridData briefDescGridData = new GridData(GridData.FILL_HORIZONTAL);
briefDescGridData.heightHint = 70;
briefDescText.setLayoutData(briefDescGridData);
Label authorsLabel = new Label(composite, SWT.NONE);
authorsLabel.setText(AuthoringUIText.AUTHORS_TEXT);
authorsLabel.setLayoutData(labelGridData);
authorsText = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP
| SWT.V_SCROLL);
GridData authorsGridData = new GridData(GridData.FILL_HORIZONTAL);
authorsGridData.heightHint = 35;
authorsText.setLayoutData(authorsGridData);
Label referencedPluginsLabel = new Label(composite, SWT.NONE);
referencedPluginsLabel
.setText(AuthoringUIText.REFERENCED_PLUGINS_SECTION_NAME);
referencedPluginsLabel.setLayoutData(labelGridData);
plugins = ModelStorage.getBaseModels();
String[] items = new String[plugins.size()];
for (int i = 0; i < plugins.size(); i++) {
MethodPlugin model = (MethodPlugin) plugins.get(i);
items[i] = model.getName();
}
referencedPluginsViewer = CheckboxTableViewer.newCheckList(composite,
SWT.BORDER | SWT.FILL | SWT.HORIZONTAL);
GridData referencedPluginsGridData = new GridData(
GridData.FILL_HORIZONTAL);
referencedPluginsGridData.heightHint = 150;
referencedPluginsViewer.getTable().setLayoutData(
referencedPluginsGridData);
ILabelProvider labelProvider = new LabelProvider() {
public Image getImage(Object element) {
return LibraryUIImages.IMG_METHOD_PLUGIN;
}
public String getText(Object element) {
if (element instanceof MethodPlugin) {
return ((MethodPlugin) element).getName();
} else {
return element.toString();
}
}
};
referencedPluginsViewer.setLabelProvider(labelProvider);
if (plugins != null) {
Iterator it = plugins.iterator();
while (it.hasNext()) {
referencedPluginsViewer.add(it.next());
}
}
setControl(composite);
// Get the parent shell.
Shell shell = parent.getShell();
nameText.addListener(SWT.Modify, this);
nameText.addListener(SWT.FocusOut, this);
Display display = shell.getDisplay();
if (display != null && !display.isDisposed()) {
display.asyncExec(new Runnable() {
public void run() {
nameText.setFocus();
nameText.setSelection(0, nameText.getText().length());
}
});
}
}
/**
* @see org.eclipse.swt.widgets.Listener#handleEvent(Event)
*/
public void handleEvent(Event event) {
if (event.widget == nameText) {
validateName();
}
setPageComplete(isPageComplete());
getWizard().getContainer().updateButtons();
}
/**
* Validate the plug-in name.
*/
public boolean validateName() {
boolean answer;
String msg = LibraryUtil.checkPluginName(null, getPluginName());
if (msg == null) {
answer = true;
setErrorMessage(null);
setMessage(AuthoringUIResources.newPluginWizardPage_text); //$NON-NLS-1$
} else {
answer = false;
int idx = msg.indexOf("'."); //$NON-NLS-1$
if (idx >= 0)
msg = msg.substring(idx + 3);
// Check for IUPL0101E in the msg, in order to display error msg,
// Which fits in error message area of the wizard.
int i = msg.indexOf("IUPL0101E"); //$NON-NLS-1$
if(i>=0){
msg = AuthoringUIResources.bind(AuthoringUIResources.duplicatePluginNameError_msg, getPluginName()); //$NON-NLS-1$
}
setErrorMessage(msg);
setMessage(null);
}
return answer;
}
/**
* @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
*/
public boolean isPageComplete() {
return isTextNonEmpty(nameText) && getErrorMessage() == null;
}
/**
* Returns true if the given Text control contains a vlaid text.
*/
private static boolean isTextNonEmpty(Text t) {
String text = t.getText();
return text != null && text.trim().length() > 0;
}
/**
* Returns the name for the plug-in.
*/
public String getPluginName() {
return nameText.getText() != null ? nameText.getText().trim() : null;
}
/**
* Returns the brief description.
*/
public String getBriefDescription() {
return briefDescText.getText();
}
/**
* Returns the authors.
*/
public String getAuthors() {
return authorsText.getText();
}
/**
* Returns the referenced plug-ins.
*/
public Object[] getReferencedPlugins() {
return referencedPluginsViewer.getCheckedElements();
}
}