Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.hook.ui.wizard; import com.liferay.ide.core.ILiferayPortal; import com.liferay.ide.core.ILiferayProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.hook.ui.HookUI; import com.liferay.ide.project.ui.wizard.StringArrayTableWizardSection; import com.liferay.ide.ui.dialog.FilteredTypesSelectionDialogEx; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IStatus; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaConventions; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.core.search.IJavaSearchScope; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; import org.eclipse.jdt.internal.core.search.BasicSearchEngine; import org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.window.Window; import org.eclipse.jst.j2ee.internal.common.operations.INewJavaClassDataModelProperties; import org.eclipse.jst.j2ee.internal.plugin.J2EEUIMessages; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.Combo; 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; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.common.frameworks.datamodel.IDataModel; /** * @author Greg Amerson * @author Simon Jiang */ @SuppressWarnings("restriction") public class EventActionsTableWizardSection extends StringArrayTableWizardSection { protected class AddEventActionDialog extends AddStringArrayDialog { protected String[] buttonLabels; protected CLabel errorMessageLabel; public AddEventActionDialog(Shell shell, String windowTitle, String[] labelsForTextField, String[] buttonLabels) { super(shell, windowTitle, labelsForTextField); setShellStyle(getShellStyle() | SWT.RESIZE); this.buttonLabels = buttonLabels; setWidthHint(450); } @Override protected Control createContents(Composite parent) { Composite composite = (Composite) super.createContents(parent); getButton(IDialogConstants.OK_ID).setEnabled(false); return composite; } @Override public Control createDialogArea(Composite parent) { super.createDialogArea(parent); errorMessageLabel = new CLabel(parent, SWT.LEFT_TO_RIGHT); errorMessageLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1)); errorMessageLabel.setImage( PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); errorMessageLabel.setVisible(false); return parent; } @Override protected Text createField(Composite parent, final int index) { Label label = new Label(parent, SWT.LEFT); label.setText(labelsForTextField[index]); label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); // Composite composite = new Composite(parent, SWT.NONE); // GridData data = new GridData(GridData.FILL_HORIZONTAL); // composite.setLayoutData(data); // composite.setLayout(new GridLayout(2, false)); final Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); // data.widthHint = 200; text.setLayoutData(data); Composite buttonComposite = new Composite(parent, SWT.NONE); String[] buttonLbls = buttonLabels[index].split(","); //$NON-NLS-1$ GridLayout gl = new GridLayout(buttonLbls.length, true); gl.marginWidth = 0; gl.horizontalSpacing = 1; buttonComposite.setLayout(gl); for (final String lbl : buttonLbls) { Button button = new Button(buttonComposite, SWT.PUSH); button.setText(lbl); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { handleArrayDialogButtonSelected(index, lbl, text); } }); } return text; } protected void handleArrayDialogButtonSelected(int index, String label, Text text) { if (index == 0) { // select event handleSelectEventButton(text); } else if (index == 1 && Msgs.select.equals(label)) { handleSelectClassButton(text); } else if (index == 1 && Msgs.newLabel.equals(label)) { handleNewClassButton(text); } } protected void handleNewClassButton(Text text) { NewEventActionClassDialog dialog = new NewEventActionClassDialog(getShell(), model); if (dialog.open() == Window.OK) { String qualifiedClassname = dialog.getQualifiedClassname(); text.setText(qualifiedClassname); } } protected void handleSelectClassButton(Text text) { Control control = text; // IPackageFragmentRoot packRoot = (IPackageFragmentRoot) // model.getProperty(INewJavaClassDataModelProperties.JAVA_PACKAGE_FRAGMENT_ROOT); // if (packRoot == null) // return; IJavaSearchScope scope = null; try { // scope = // BasicSearchEngine.createHierarchyScope(packRoot.getJavaProject().findType("com.liferay.portal.kernel.events.SimpleAction")); scope = BasicSearchEngine.createJavaSearchScope(new IJavaElement[] { JavaCore.create(CoreUtil .getProject(model.getStringProperty(INewJavaClassDataModelProperties.PROJECT_NAME))) }); } catch (Exception e) { HookUI.logError(e); return; } // This includes all entries on the classpath. This behavior is // identical // to the Super Class Browse Button on the Create new Java Class // Wizard // final IJavaSearchScope scope = // SearchEngine.createJavaSearchScope(new // IJavaElement[] {root.getJavaProject()} ); FilteredTypesSelectionDialog dialog = new FilteredTypesSelectionDialogEx(getShell(), false, null, scope, IJavaSearchConstants.CLASS); dialog.setTitle(Msgs.eventSelection); dialog.setMessage(Msgs.selectEventAction); if (dialog.open() == Window.OK) { IType type = (IType) dialog.getFirstResult(); String classFullPath = J2EEUIMessages.EMPTY_STRING; if (type != null) { classFullPath = type.getFullyQualifiedName(); } if (control instanceof Text) { ((Text) control).setText(classFullPath); } else if (control instanceof Combo) { ((Combo) control).setText(classFullPath); } return; } } protected void handleSelectEventButton(Text text) { String[] hookProperties = new String[] {}; final ILiferayProject liferayProject = LiferayCore.create(project); if (liferayProject != null) { final ILiferayPortal portal = liferayProject.adapt(ILiferayPortal.class); if (portal != null) { hookProperties = portal.getHookSupportedProperties(); } } PropertiesFilteredDialog dialog = new PropertiesFilteredDialog(getParentShell(), ".*events.*"); //$NON-NLS-1$ dialog.setTitle(Msgs.propertySelection); dialog.setMessage(Msgs.selectProperty); dialog.setInput(hookProperties); if (dialog.open() == Window.OK) { Object[] selected = dialog.getResult(); text.setText(selected[0].toString()); } } @Override public void modifyText(ModifyEvent e) { boolean classNameValid = false; if (texts[1].getText().trim().length() > 0) { int classNameStatus = JavaConventions.validateJavaTypeName(texts[1].getText().trim(), CompilerOptions.VERSION_1_7, CompilerOptions.VERSION_1_7).getSeverity(); classNameValid = (classNameStatus != IStatus.ERROR) ? true : false; } if (!classNameValid) { errorMessageLabel.setText("Invalid class name"); } this.errorMessageLabel.setVisible(!(classNameValid)); getButton(IDialogConstants.OK_ID).setEnabled(classNameValid); } } public class EditEventActionDialog extends EditStringArrayDialog { protected CLabel errorMessageLabel; public EditEventActionDialog(Shell shell, String windowTitle, String[] labelsForTextField, String[] valuesForTextField) { super(shell, windowTitle, labelsForTextField, valuesForTextField); } @Override public Control createDialogArea(Composite parent) { super.createDialogArea(parent); errorMessageLabel = new CLabel(parent, SWT.LEFT_TO_RIGHT); errorMessageLabel.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1)); errorMessageLabel.setImage( PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); errorMessageLabel.setVisible(false); return parent; } @Override public void modifyText(ModifyEvent e) { boolean classNameValid = false; if (texts[1].getText().trim().length() > 0) { int classNameStatus = JavaConventions.validateJavaTypeName(texts[1].getText().trim(), CompilerOptions.VERSION_1_7, CompilerOptions.VERSION_1_7).getSeverity(); classNameValid = (classNameStatus != IStatus.ERROR) ? true : false; } if (!classNameValid) { errorMessageLabel.setText("Invalid class name"); } this.errorMessageLabel.setVisible(!(classNameValid)); getButton(IDialogConstants.OK_ID).setEnabled(classNameValid); } } protected String[] buttonLabels; // protected File eventActionPropertiesFile; protected IProject project; public EventActionsTableWizardSection(Composite parent, String componentLabel, String dialogTitle, String addButtonLabel, String editButtonLabel, String removeButtonLabel, String[] columnTitles, String[] fieldLabels, Image labelProviderImage, IDataModel model, String propertyName) { super(parent, componentLabel, dialogTitle, addButtonLabel, editButtonLabel, removeButtonLabel, columnTitles, fieldLabels, labelProviderImage, model, propertyName); this.buttonLabels = new String[] { Msgs.select, Msgs.selectNew }; } public void setProject(IProject project) { this.project = project; } @Override protected void handleAddButtonSelected() { AddEventActionDialog dialog = new AddEventActionDialog(getShell(), dialogTitle, fieldLabels, buttonLabels); if (dialog.open() == Window.OK) { String[] stringArray = dialog.getStringArray(); addStringArray(stringArray); } } @Override protected void handleEditButtonSelected() { ISelection s = viewer.getSelection(); if (!(s instanceof IStructuredSelection)) { return; } IStructuredSelection selection = (IStructuredSelection) s; if (selection.size() != 1) { return; } Object selectedObj = selection.getFirstElement(); String[] valuesForText = (String[]) selectedObj; EditEventActionDialog dialog = new EditEventActionDialog(getShell(), dialogTitle, fieldLabels, valuesForText); dialog.open(); String[] stringArray = dialog.getStringArray(); editStringArray(valuesForText, stringArray); } private static class Msgs extends NLS { public static String eventSelection; public static String newLabel; public static String propertySelection; public static String select; public static String selectEventAction; public static String selectNew; public static String selectProperty; static { initializeMessages(EventActionsTableWizardSection.class.getName(), Msgs.class); } } }