blob: 45e0474e569e5b2b466fe5fa90683fb4f6339c58 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2007 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.LibraryService;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.library.ui.LibraryUIImages;
import org.eclipse.epf.library.ui.LibraryUIResources;
import org.eclipse.epf.library.util.LibraryUtil;
import org.eclipse.epf.library.util.ModelStorage;
import org.eclipse.epf.ui.wizards.BaseWizardPage;
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.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
/**
* A wizard page that prompts the user to specify the name, brief description,
* authors and referenced mathod plug-ins for a new method plug-in.
*
* @author Kelvin Low
* @author Shashidhar Kannoori
* @author Phong Nguyen Le
* @since 1.0
*/
public class NewPluginMainPage extends BaseWizardPage {
/**
* The wizard page name.
*/
public static final String PAGE_NAME = NewPluginMainPage.class.getName();
protected Text nameText;
protected Text briefDescText;
protected Text authorsText;
protected CheckboxTableViewer referencedPluginsViewer;
protected List<MethodPlugin> plugins;
/**
* Creates a new instance.
*/
public NewPluginMainPage(String pageName) {
super(pageName);
setTitle(AuthoringUIResources.newPluginWizardPage_title);
setDescription(AuthoringUIResources.newPluginWizardPage_text);
setImageDescriptor(AuthoringUIPlugin.getDefault().getImageDescriptor(
"full/wizban/New.gif")); //$NON-NLS-1$
}
/**
* Creates a new instance.
*/
public NewPluginMainPage() {
this(PAGE_NAME);
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(Composite)
*/
public void createControl(Composite parent) {
Composite composite = createGridLayoutComposite(parent, 2);
createVerticallyAlignedLabel(composite, AuthoringUIText.NAME_TEXT);
nameText = createEditableText(composite);
createVerticallyAlignedLabel(composite,
AuthoringUIText.BRIEF_DESCRIPTION_TEXT);
briefDescText = createEditableText(composite, 400, 80, 1);
createVerticallyAlignedLabel(composite, AuthoringUIText.AUTHORS_TEXT);
authorsText = createEditableText(composite, 400, 40, 1);
createVerticallyAlignedLabel(composite,
AuthoringUIText.REFERENCED_PLUGINS_SECTION_NAME);
referencedPluginsViewer = CheckboxTableViewer.newCheckList(composite,
SWT.BORDER | SWT.FILL | SWT.HORIZONTAL);
GridData referencedPluginsGridData = new GridData(
GridData.FILL_HORIZONTAL);
referencedPluginsGridData.heightHint = 150;
referencedPluginsViewer.getTable().setLayoutData(
referencedPluginsGridData);
initControls();
addListeners();
setControl(composite);
}
/**
* Initializes the wizard page controls with data.
*/
protected void initControls() {
String name = "new_plug-in"; //$NON-NLS-1$
if (LibraryService.getInstance().getCurrentMethodLibrary() != null) {
name = TngUtil.getNextAvailableName(LibraryService.getInstance()
.getCurrentMethodLibrary().getMethodPlugins(), name);
}
nameText.setText(name);
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);
referencedPluginsViewer.setSorter(new ViewerSorter());
plugins = ModelStorage.getBaseModels();
String[] items = new String[plugins.size()];
for (int i = 0; i < plugins.size(); i++) {
MethodPlugin plugin = (MethodPlugin) plugins.get(i);
items[i] = plugin.getName();
}
if (plugins != null) {
Iterator<MethodPlugin> it = plugins.iterator();
while (it.hasNext()) {
referencedPluginsViewer.add(it.next());
}
}
}
/**
* Adds event listeners to the wizard page controls.
*/
protected void addListeners() {
nameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
setPageComplete(isPageComplete());
getWizard().getContainer().updateButtons();
}
});
}
/**
* @see org.eclipse.epf.ui.wizards.BaseWizardPage#onEnterPage(Object)
*/
public void onEnterPage(Object obj) {
if (nameText != null) {
nameText.setFocus();
nameText.selectAll();
}
setPageComplete(isPageComplete());
}
/**
* @see org.eclipse.jface.wizard.WizardPage#isPageComplete()
*/
public boolean isPageComplete() {
if (LibraryService.getInstance().getCurrentMethodLibrary() == null) {
setErrorMessage(LibraryUIResources.noOpenLibraryWarning_msg);
return false;
}
return validatePluginName(getPluginName());
}
/**
* Validates a method plug-in name.
*
* @param name
* the name of a method plug-in
*
* @return <code>true</code> if the plug-in name is valid
*/
protected boolean validatePluginName(String name) {
String errmsg = LibraryUtil.checkPluginName(null, getPluginName());
if (errmsg != null) {
// Remove newline characters from the message to fit it in the error
// message area of the wizard page.
errmsg = errmsg.replaceAll("\n\n", " "); //$NON-NLS-1$ //$NON-NLS-2$
}
setErrorMessage(errmsg);
return errmsg == null;
}
/**
* Gets the user specified method plug-in name.
*
* @return the name for the new method plug-in
*/
public String getPluginName() {
return nameText.getText() != null ? nameText.getText().trim() : null;
}
/**
* Gets the user specified method plug-in brief description.
*
* @return the brief description for the new method plug-in
*/
public String getBriefDescription() {
return briefDescText.getText();
}
/**
* Gets the user specified method plug-in authors.
*
* @return the authors for the new method plug-in
*/
public String getAuthors() {
return authorsText.getText();
}
/**
* Gets the user specified referenced method plug-ins for the new method
* plug-in.
*
* @return a collection of referenced method plug-ins for the new method
* plug-in
*/
public Object[] getReferencedPlugins() {
return referencedPluginsViewer.getCheckedElements();
}
}