| /******************************************************************************* |
| * Copyright (c) 2003, 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 API and implementation |
| * David Schneider, david.schneider@unisys.com - [142500] WTP properties pages fonts don't follow Eclipse preferences |
| *******************************************************************************/ |
| package org.eclipse.jst.j2ee.internal.wizard; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.search.IJavaSearchConstants; |
| import org.eclipse.jdt.core.search.IJavaSearchScope; |
| import org.eclipse.jdt.internal.ui.JavaPluginImages; |
| import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog; |
| import org.eclipse.jem.workbench.utility.JemProjectUtilities; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.operation.IRunnableContext; |
| import org.eclipse.jface.viewers.ILabelProvider; |
| import org.eclipse.jface.viewers.ILabelProviderListener; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.IStructuredContentProvider; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.jface.viewers.Viewer; |
| import org.eclipse.jface.window.Window; |
| import org.eclipse.jst.j2ee.internal.actions.IJ2EEUIContextIds; |
| import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; |
| import org.eclipse.jst.j2ee.internal.dialogs.TypeSearchEngine; |
| import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.KeyEvent; |
| import org.eclipse.swt.events.KeyListener; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.graphics.Image; |
| 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.Label; |
| import org.eclipse.swt.widgets.TableItem; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.common.frameworks.datamodel.IDataModel; |
| import org.eclipse.wst.common.frameworks.internal.datamodel.ui.DataModelWizardPage; |
| |
| /** |
| * @author jialin |
| * |
| * To change the template for this generated type comment go to Window - |
| * Preferences - Java - Code Generation - Code and Comments |
| */ |
| public class NewJavaClassOptionsWizardPage extends DataModelWizardPage { |
| |
| protected Button publicButton; |
| protected Button abstractButton; |
| protected Button finalButton; |
| protected TableViewer interfaceViewer; |
| protected Button addButton; |
| protected Button removeButton; |
| protected Button inheritButton; |
| protected Button constructorButton; |
| protected Button mainMethodButton; |
| |
| /** |
| * @param model |
| * @param pageName |
| */ |
| public NewJavaClassOptionsWizardPage(IDataModel model, String pageName, String pageDesc, String pageTitle) { |
| super(model, pageName); |
| setDescription(pageDesc); |
| this.setTitle(pageTitle); |
| setInfopopID(IJ2EEUIContextIds.NEW_JAVA_CLASS_OPTION_WIZARD_P1); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jem.util.ui.wizard.WTPWizardPage#getValidationPropertyNames() |
| */ |
| protected String[] getValidationPropertyNames() { |
| return new String[]{INewJavaClassDataModelProperties.MODIFIER_ABSTRACT, INewJavaClassDataModelProperties.MODIFIER_FINAL}; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jem.util.ui.wizard.WTPWizardPage#createTopLevelComposite(org.eclipse.swt.widgets.Composite) |
| */ |
| protected Composite createTopLevelComposite(Composite parent) { |
| Composite composite = new Composite(parent, SWT.NULL); |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 2; |
| composite.setLayout(layout); |
| GridData data = new GridData(GridData.FILL_BOTH); |
| data.widthHint = 300; |
| composite.setLayoutData(data); |
| |
| createModifierControls(composite); |
| createInterfaceControls(composite); |
| |
| // Separator label |
| Label seperator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR); |
| data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| data.horizontalSpan = 2; |
| seperator.setLayoutData(data); |
| |
| createStubsComposite(composite); |
| |
| publicButton.setFocus(); |
| PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, getInfopopID()); |
| Dialog.applyDialogFont(parent); |
| return composite; |
| } |
| |
| /** |
| * Create controls for the modifiers |
| */ |
| protected void createModifierControls(Composite parent) { |
| Label modifiersLabel = new Label(parent, SWT.NONE); |
| modifiersLabel.setText(J2EEUIMessages.JAVA_CLASS_MODIFIERS_LABEL); |
| modifiersLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); |
| Composite composite = new Composite(parent, SWT.NULL); |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 3; |
| layout.makeColumnsEqualWidth = true; |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); |
| |
| publicButton = new Button(composite, SWT.CHECK); |
| publicButton.setText(J2EEUIMessages.JAVA_CLASS_PUBLIC_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(publicButton, INewJavaClassDataModelProperties.MODIFIER_PUBLIC, null); |
| |
| abstractButton = new Button(composite, SWT.CHECK); |
| abstractButton.setText(J2EEUIMessages.JAVA_CLASS_ABSTRACT_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(abstractButton, INewJavaClassDataModelProperties.MODIFIER_ABSTRACT, null); |
| |
| finalButton = new Button(composite, SWT.CHECK); |
| finalButton.setText(J2EEUIMessages.JAVA_CLASS_FINAL_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(finalButton, INewJavaClassDataModelProperties.MODIFIER_FINAL, null); |
| } |
| |
| protected void createInterfaceControls(Composite parent) { |
| Label interfaceLabel = new Label(parent, SWT.NONE); |
| interfaceLabel.setText(J2EEUIMessages.JAVA_CLASS_INTERFACES_LABEL); |
| interfaceLabel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING)); |
| Composite composite = new Composite(parent, SWT.NULL); |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = 2; |
| composite.setLayout(layout); |
| composite.setLayoutData(new GridData(GridData.FILL_BOTH)); |
| |
| interfaceViewer = new TableViewer(composite, SWT.BORDER | SWT.MULTI); |
| interfaceViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); |
| interfaceViewer.setContentProvider(getInterfaceContentProvider()); |
| interfaceViewer.setLabelProvider(getInterfaceLabelProvider()); |
| interfaceViewer.getControl().addKeyListener(getInterfaceKeyListener()); |
| interfaceViewer.setInput(model.getProperty(INewJavaClassDataModelProperties.INTERFACES)); |
| |
| Composite buttonCompo = new Composite(composite, SWT.NULL); |
| layout = new GridLayout(); |
| layout.marginHeight = 0; |
| buttonCompo.setLayout(layout); |
| buttonCompo.setLayoutData(new GridData(GridData.FILL_VERTICAL | GridData.VERTICAL_ALIGN_BEGINNING)); |
| |
| addButton = new Button(buttonCompo, SWT.PUSH); |
| addButton.setText(J2EEUIMessages.ADD_BUTTON_LABEL); |
| addButton.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL)); |
| addButton.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent event) { |
| handleInterfaceAddButtonSelected(); |
| } |
| public void widgetDefaultSelected(SelectionEvent event) { |
| //Do nothing |
| } |
| }); |
| |
| removeButton = new Button(buttonCompo, SWT.PUSH); |
| removeButton.setText(J2EEUIMessages.REMOVE_BUTTON); |
| removeButton.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL)); |
| removeButton.addSelectionListener(new SelectionListener() { |
| public void widgetSelected(SelectionEvent event) { |
| handleInterfaceRemoveButtonSelected(); |
| } |
| public void widgetDefaultSelected(SelectionEvent event) { |
| //Do nothing |
| } |
| }); |
| removeButton.setEnabled(false); |
| |
| interfaceViewer.addSelectionChangedListener(new ISelectionChangedListener() { |
| public void selectionChanged(SelectionChangedEvent event) { |
| ISelection selection = event.getSelection(); |
| removeButton.setEnabled(!selection.isEmpty()); |
| } |
| }); |
| |
| } |
| |
| /** |
| * Create the composite with all the stubs |
| */ |
| protected void createStubsComposite(Composite parent) { |
| Label stubLabel = new Label(parent, SWT.NONE); |
| stubLabel.setText(J2EEUIMessages.JAVA_CLASS_METHOD_STUBS_LABEL); |
| GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| data.horizontalSpan = 2; |
| stubLabel.setLayoutData(data); |
| |
| Composite buttonCompo = new Composite(parent, SWT.NULL); |
| buttonCompo.setLayout(new GridLayout()); |
| data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); |
| data.horizontalSpan = 2; |
| data.horizontalIndent = 15; |
| buttonCompo.setLayoutData(data); |
| |
| mainMethodButton = new Button(buttonCompo, SWT.CHECK); |
| mainMethodButton.setText(J2EEUIMessages.JAVA_CLASS_MAIN_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(mainMethodButton, INewJavaClassDataModelProperties.MAIN_METHOD, null); |
| |
| inheritButton = new Button(buttonCompo, SWT.CHECK); |
| inheritButton.setText(J2EEUIMessages.JAVA_CLASS_INHERIT_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(inheritButton, INewJavaClassDataModelProperties.ABSTRACT_METHODS, null); |
| |
| constructorButton = new Button(buttonCompo, SWT.CHECK); |
| constructorButton.setText(J2EEUIMessages.JAVA_CLASS_CONSTRUCTOR_CHECKBOX_LABEL); |
| synchHelper.synchCheckbox(constructorButton, INewJavaClassDataModelProperties.CONSTRUCTOR, null); |
| } |
| |
| protected void enter() { |
| super.enter(); |
| //set the intefaces on every page enter (not only on viewer creation) |
| interfaceViewer.setInput(model.getProperty(INewJavaClassDataModelProperties.INTERFACES)); |
| } |
| |
| /** |
| * @see IStatefulWizardPage#saveWidgetValues() |
| */ |
| // public void saveWidgetValues() { |
| // // TODO: do we want to do this here or in the concrete subclasses??? |
| // IDialogSettings store = getDialogSettings(); |
| // if (store != null) |
| // store.put(getUniqueKey(""), getUniqueKey("")); //$NON-NLS-1$ |
| // //$NON-NLS-2$ |
| // DialogSettingsHelper.saveButton(inheritButton, |
| // getUniqueKey(idInheritedAbstractButton), store); |
| // DialogSettingsHelper.saveButton(constructorButton, |
| // getUniqueKey(idSuperClassConstructorsButton), store); |
| // DialogSettingsHelper.saveButton(publicButton, |
| // getUniqueKey(idPublicButton), store); |
| // DialogSettingsHelper.saveButton(abstractButton, |
| // getUniqueKey(idAbstractButton), store); |
| // DialogSettingsHelper.saveButton(finalButton, getUniqueKey(idFinalButton), |
| // store); |
| // |
| // } |
| /** |
| * @see IStatefulWizardPage#restoreWidgetValues() |
| */ |
| // public void restoreWidgetValues() { |
| // IDialogSettings store = super.getDialogSettings(); |
| // if (store != null && store.get(getUniqueKey("")) != null) { //$NON-NLS-1$ |
| // DialogSettingsHelper.restoreButton(inheritButton, |
| // getUniqueKey(idInheritedAbstractButton), store); |
| // DialogSettingsHelper.restoreButton(constructorButton, |
| // getUniqueKey(idSuperClassConstructorsButton), store); |
| // DialogSettingsHelper.restoreButton(publicButton, |
| // getUniqueKey(idPublicButton), store); |
| // DialogSettingsHelper.restoreButton(abstractButton, |
| // getUniqueKey(idAbstractButton), store); |
| // DialogSettingsHelper.restoreButton(finalButton, |
| // getUniqueKey(idFinalButton), store); |
| // } |
| // } |
| /** |
| * Returns the Super Interface Content Provider |
| */ |
| protected IStructuredContentProvider getInterfaceContentProvider() { |
| return new IStructuredContentProvider() { |
| public Object[] getElements(Object inputElement) { |
| Object[] ret = new Object[0]; |
| if (inputElement instanceof List) { |
| ret = ((List) inputElement).toArray(); |
| } |
| return ret; |
| } |
| public void dispose() { |
| //Do nothing |
| } |
| public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { |
| //Default is nothing |
| } |
| }; |
| } |
| |
| /** |
| * Returns the Super Interface Label Provider |
| */ |
| protected ILabelProvider getInterfaceLabelProvider() { |
| return new ILabelProvider() { |
| public Image getImage(Object element) { |
| return JavaPluginImages.get(JavaPluginImages.IMG_OBJS_INTERFACE); |
| } |
| |
| public String getText(Object element) { |
| String ret = J2EEUIMessages.EMPTY_STRING; |
| if (element instanceof String) |
| ret = (String) element; |
| return ret; |
| } |
| |
| public void addListener(ILabelProviderListener listener) { |
| //Do nothing |
| } |
| public void dispose() { |
| //Do nothing |
| } |
| public boolean isLabelProperty(Object element, String property) { |
| return true; |
| } |
| public void removeListener(ILabelProviderListener listener) { |
| //Do nothing |
| } |
| }; |
| } |
| |
| protected KeyListener getInterfaceKeyListener() { |
| return new KeyListener() { |
| |
| public void keyPressed(KeyEvent e) { |
| } |
| |
| public void keyReleased(KeyEvent e) { |
| if (e.keyCode == SWT.DEL) { |
| handleInterfaceRemoveButtonSelected(); |
| } |
| } |
| |
| }; |
| } |
| |
| /** |
| * Browse for a new Super Interface Class |
| */ |
| protected void handleInterfaceAddButtonSelected() { |
| IProject project = (IProject) model.getProperty(INewJavaClassDataModelProperties.PROJECT); |
| IRunnableContext context = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); |
| IJavaProject javaProject = JemProjectUtilities.getJavaProject(project); |
| // this eliminates the non-exported classpath entries |
| final IJavaSearchScope scope = TypeSearchEngine.createJavaSearchScopeForAProject(javaProject, true, true); |
| FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialog(getShell(),false, context, scope,IJavaSearchConstants.INTERFACE); |
| dialog.setTitle(J2EEUIMessages.INTERFACE_SELECTION_DIALOG_TITLE); |
| if (dialog.open() == Window.OK) { |
| IType type = (IType) dialog.getFirstResult(); |
| String newInterface = ""; //$NON-NLS-1$ |
| if (type != null) { |
| newInterface = type.getFullyQualifiedName(); |
| List valueList = getInterfaceViewerItems(); |
| if (!valueList.contains(newInterface)) { |
| interfaceViewer.add(newInterface); |
| model.setProperty(INewJavaClassDataModelProperties.INTERFACES, getInterfaceViewerItems()); |
| } |
| } |
| } |
| } |
| |
| /** |
| * Remove an interface from the SuperInterface List |
| */ |
| protected void handleInterfaceRemoveButtonSelected() { |
| IStructuredSelection selection = (IStructuredSelection) interfaceViewer.getSelection(); |
| List items = selection.toList(); |
| if (!items.isEmpty()) { |
| List valueList = getInterfaceViewerItems(); |
| for (int i = 0; i < items.size(); i++) { |
| valueList.remove(items.get(i)); |
| } |
| interfaceViewer.setInput(valueList); |
| model.setProperty(INewJavaClassDataModelProperties.INTERFACES, valueList); |
| } |
| } |
| |
| private List getInterfaceViewerItems() { |
| ArrayList<String> list = new ArrayList<String>(); |
| TableItem[] items = interfaceViewer.getTable().getItems(); |
| for (TableItem item : items) { |
| list.add(item.getText()); |
| } |
| return list; |
| } |
| } |