blob: c2306cf44afa19f553839b8bd32da0b2cce82565 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2005 Sybase, Inc. 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: Sybase,
* Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.wizard;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaConventions;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.ClassButtonDialogField;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.DialogField;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.IDialogFieldChangeListener;
import org.eclipse.jst.jsf.common.ui.internal.dialogfield.LayoutUtil;
import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
import org.eclipse.jst.jsf.facesconfig.ui.util.JavaClassUtils;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
/**
* This class used to select an existing java class or generate a new one.
* However, the actural generated new java class is left to other pages.
*
* @author Xiao-guang Zhang
*/
public class ManagedBeanClassSelectionPage extends WizardPage {
private static final int HORIZONTAL_INDENT_DEFAULT = 25;
/** the class name */
private String className;
/**
* Search Section, including radio button, label, text and browser button.
*/
private Button searchRadioButton;
private ClassButtonDialogField classSearchDialogField;
/** selected type */
private IType searchedType;
/** Generate radio button */
private Button createRadioButton;
private IProject currentProject;
/**
* Constructor.
*
* @param project
* The project.
*/
public ManagedBeanClassSelectionPage(IProject project) {
super("JavaSelectionWizardPage"); //$NON-NLS-1$
currentProject = project;
setTitle(WizardMessages.JavaSelectionWizardPage_Title);
setDescription(WizardMessages.JavaSelectionWizardPage_Description);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginWidth = 10;
layout.marginHeight = 5;
container.setLayout(layout);
container.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Group group = new Group(container, SWT.NONE);
group.setLayout(new GridLayout());
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
createSearchSection(group);
createGenerateSection(group);
setControl(container);
Dialog.applyDialogFont(container);
setPageComplete(classSearchDialogField.getText().length() > 0);
EditorPlugin.getDefault().getWorkbench().getHelpSystem().setHelp(
container,
WizardMessages.JavaSelectionWizardPage_HelpContextID);
}
/**
* enabled or disabled the search section including the labels and texts
*
* @param enabled -
* enabled or disabled the search section
*/
private void enableSearchSection(boolean enabled) {
classSearchDialogField.setEnabled(enabled);
}
/**
* Create the search section including the labels, texts, and browser
* buttons
*
* @param parent -
* parent composite control
*/
private void createSearchSection(Composite parent) {
searchRadioButton = new Button(parent, SWT.RADIO);
// JavaSelectionWizardPage.Search = Using an existing Java class
searchRadioButton
.setText(WizardMessages.JavaSelectionWizardPage_Search);
searchRadioButton.setSelection(true);
searchRadioButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
createRadioButton.setSelection(!searchRadioButton
.getSelection());
enableSearchSection(searchRadioButton.getSelection());
verifyComplete();
}
});
Composite searchSection = new Composite(parent, SWT.NULL);
classSearchDialogField = new ClassButtonDialogField(currentProject);
classSearchDialogField.setHyperLink(null);
int numberOfControls = classSearchDialogField.getNumberOfControls();
GridLayout layout = new GridLayout();
layout.numColumns = numberOfControls;
layout.verticalSpacing = 9;
searchSection.setLayout(layout);
searchSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
classSearchDialogField.doFillIntoGrid(null, searchSection,
numberOfControls);
GridData gd = (GridData) classSearchDialogField.getLabelControl(null,
searchSection).getLayoutData();
gd.horizontalIndent = HORIZONTAL_INDENT_DEFAULT;
// JavaSelectionWizardPage.Search.ClassName = Qulified class name:
classSearchDialogField
.setLabelText(WizardMessages.JavaSelectionWizardPage_Search_ClassName);
LayoutUtil.setHorizontalGrabbing(classSearchDialogField.getTextControl(
null, searchSection));
classSearchDialogField
.setDialogFieldChangeListener(new IDialogFieldChangeListener() {
public void dialogFieldChanged(DialogField field) {
className = classSearchDialogField.getText();
verifyComplete();
}
});
Label searchDesp = new Label(searchSection, SWT.NONE);
searchDesp
.setText(WizardMessages.JavaSelectionWizardPage_Search_Description);
gd = new GridData();
gd.horizontalSpan = numberOfControls;
gd.horizontalIndent = HORIZONTAL_INDENT_DEFAULT;
searchDesp.setLayoutData(gd);
}
/**
* Create the generation section including the labels, texts, and browser
* buttons
*
* @param parent -
* parent composite control
*/
private void createGenerateSection(Composite parent) {
createRadioButton = new Button(parent, SWT.RADIO);
createRadioButton
.setText(WizardMessages.JavaSelectionWizardPage_Create);
createRadioButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
searchRadioButton.setSelection(!createRadioButton
.getSelection());
enableSearchSection(!createRadioButton.getSelection());
verifyComplete();
}
});
Composite createSection = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
layout.verticalSpacing = 9;
createSection.setLayout(layout);
createSection.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Label createDesp = new Label(createSection, SWT.NONE);
createDesp
.setText(WizardMessages.JavaSelectionWizardPage_Create_Description);
GridData gd = new GridData();
gd.horizontalIndent = HORIZONTAL_INDENT_DEFAULT;
createDesp.setLayoutData(gd);
}
/**
* create a new java class or not
*
* @return true if the create new java class radio button is selected
*/
public boolean isCreateNewJavaClass() {
return createRadioButton.getSelection();
}
/**
* get the selected java type
*
* @return - type
*/
public IType getSelectedType() {
searchedType = JavaClassUtils.getType(currentProject,
classSearchDialogField.getText());
return searchedType;
}
/**
* @return the class name
*/
public String getClassName() {
return className;
}
/**
* validate the selected or input java type name
*
* @return
*/
private IStatus validateJavaTypeName() {
IStatus status = null;
if (classSearchDialogField.getText().length() == 0) {
status = new Status(
IStatus.ERROR,
EditorPlugin.getPluginId(),
-1,
NLS
.bind(
WizardMessages.JavaSelectionWizardPage_Error_ClassIsEmpty,
classSearchDialogField.getText()), null);
} else {
// ensure the name follows the java conventsions.
status = JavaConventions
.validateJavaTypeName(classSearchDialogField.getText(), JavaCore.VERSION_1_3,JavaCore.VERSION_1_3);
if (status.getSeverity() != IStatus.ERROR) {
// ensure the input or selected type is defined in the current
// project
if (getSelectedType() == null) {
status = new Status(
IStatus.ERROR,
EditorPlugin.getPluginId(),
-1,
NLS
.bind(
WizardMessages.JavaSelectionWizardPage_Error_ClassIsNotDefined,
classSearchDialogField.getText()),
null);
}
}
}
return status;
}
/**
* verify and update the complete status
*/
private void verifyComplete() {
IStatus status = null;
if (isCreateNewJavaClass()) {
setPageComplete(true);
setMessage(null);
setErrorMessage(null);
} else {
if (searchRadioButton.getSelection()) {
status = validateJavaTypeName();
}
String errorMessage = null;
setPageComplete(status.getSeverity() != IStatus.ERROR);
if (status.getSeverity() == IStatus.ERROR) {
errorMessage = status.getMessage();
}
if (errorMessage != null) {
setErrorMessage(errorMessage);
} else {
setErrorMessage(null);
}
if (status.getSeverity() != IStatus.OK) {
setMessage(status.getMessage());
} else {
setMessage(null);
}
}
}
}