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.portlet.ui.editor; import com.liferay.ide.core.model.IModelChangedEvent; import com.liferay.ide.core.model.IModelChangedListener; import com.liferay.ide.core.util.StringPool; import com.liferay.ide.portlet.core.IPluginPackageModel; import com.liferay.ide.portlet.core.PluginPackageModel; import com.liferay.ide.portlet.ui.PortletUIPlugin; import com.liferay.ide.ui.form.FormEntry; import com.liferay.ide.ui.form.FormEntryAdapter; import com.liferay.ide.ui.form.FormLayoutFactory; import com.liferay.ide.ui.form.IContextPart; import com.liferay.ide.ui.form.IDEFormPage; import com.liferay.ide.ui.form.IDESection; import com.liferay.ide.ui.util.SWTUtil; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IMessageProvider; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; /** * @author Greg Amerson */ public class PluginPackageGeneralSection extends IDESection implements IContextPart, IModelChangedListener { protected FormEntry authorEntry; protected FormEntry changeLogEntry; protected FormEntry licensesEntry; protected FormEntry liferayVersionsEntry; protected FormEntry longDescriptionEntry; protected FormEntry moduleGroupIdEntry; protected FormEntry moduleIncrementalVersionEntry; protected FormEntry nameEntry; protected PluginPackageFormPage page; protected FormEntry pageUrlEntry; protected FormEntry shortDescriptionEntry; protected boolean speedFilterEnabledModifying = false; protected Button speedFilters; protected FormEntry tagsEntry; public PluginPackageGeneralSection(PluginPackageFormPage page, Composite parent) { super(page, parent, ExpandableComposite.TITLE_BAR | Section.DESCRIPTION); this.page = page; initialize(page.getManagedForm()); getSection().clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING; getSection().setData("part", this); //$NON-NLS-1$ createClient(getSection(), page.getEditor().getToolkit()); } @Override public void dispose() { super.dispose(); if (getModel() != null) { getModel().dispose(); } } public String getContextId() { return "plugin-package-general"; //$NON-NLS-1$ } public IDEFormPage getPage() { return page; } public boolean isEditable() { return true; } @Override public void commit(boolean onSave) { if (validate().isOK()) { page.form.setMessage("", IMessageProvider.NONE); refresh(); super.commit(onSave); } else { page.form.setMessage(validate().getMessage(), IMessageProvider.ERROR); } } public void modelChanged(IModelChangedEvent event) { if (event != null) { if (event.getChangeType() == IModelChangedEvent.WORLD_CHANGED) { this.refresh(); } else { String changedProperty = event.getChangedProperty(); Object newValue = event.getNewValue(); if (changedProperty != null && newValue != null) { if (IPluginPackageModel.PROPERTY_NAME.equals(changedProperty)) { nameEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_MODULE_GROUP_ID.equals(changedProperty)) { moduleGroupIdEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_MODULE_INCREMENTAL_VERSION.equals(changedProperty)) { moduleIncrementalVersionEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_TAGS.equals(changedProperty)) { tagsEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_CHANGE_LOG.equals(changedProperty)) { changeLogEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_PAGE_URL.equals(changedProperty)) { pageUrlEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_AUTHOR.equals(changedProperty)) { authorEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_LICENSES.equals(changedProperty)) { licensesEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_LIFERAY_VERSIONS.equals(changedProperty)) { liferayVersionsEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_SHORT_DESCRIPTION.equals(changedProperty)) { shortDescriptionEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_LONG_DESCRIPTION.equals(changedProperty)) { longDescriptionEntry.setValue(newValue.toString()); } else if (IPluginPackageModel.PROPERTY_SPEED_FILTERS_ENABLED.equals(changedProperty)) { speedFilterEnabledModifying = true; speedFilters.setSelection(Boolean.parseBoolean(newValue.toString())); speedFilterEnabledModifying = false; } } } } } public void refresh() { if (getModel().getName() != null) { nameEntry.setValue(getModel().getName(), true); } if (getModel().getModuleGroupId() != null) { moduleGroupIdEntry.setValue(getModel().getModuleGroupId(), true); } if (getModel().getModuleIncrementalVersion() != null) { moduleIncrementalVersionEntry.setValue(getModel().getModuleIncrementalVersion(), true); } if (getModel().getTags() != null) { tagsEntry.setValue(getModel().getTags(), true); } if (getModel().getChangeLog() != null) { changeLogEntry.setValue(getModel().getChangeLog(), true); } if (getModel().getAuthor() != null) { authorEntry.setValue(getModel().getAuthor(), true); } if (getModel().getLicenses() != null) { licensesEntry.setValue(getModel().getLicenses(), true); } if (getModel().getPageUrl() != null) { pageUrlEntry.setValue(getModel().getPageUrl(), true); } if (getModel().getLiferayVersions() != null) { liferayVersionsEntry.setValue(getModel().getLiferayVersions(), true); } if (getModel().getShortDescription() != null) { shortDescriptionEntry.setValue(getModel().getShortDescription(), true); } if (getModel().getLongDescription() != null) { longDescriptionEntry.setValue(getModel().getLongDescription(), true); } Boolean speedFiltersEnabled = getModel().isSpeedFiltersEnabled(); speedFilters.setSelection(speedFiltersEnabled != null ? speedFiltersEnabled.booleanValue() : false); super.refresh(); } private void configureEntry(FormEntry entry) { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.grabExcessHorizontalSpace = true; gd.horizontalSpan = 2; gd.widthHint = 50; entry.getText().setLayoutData(gd); entry.setEditable(isEditable()); } protected void createAuthorEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { authorEntry = new FormEntry(client, toolkit, Msgs.authorLabel, null, SWT.SINGLE, false); authorEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setAuthor(entry.getValue().trim()); } }); configureEntry(authorEntry); } protected void createChangeLogEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { changeLogEntry = new FormEntry(client, toolkit, Msgs.changeLogLabel, null, SWT.SINGLE, false); changeLogEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setChangeLog(entry.getValue().trim()); } }); configureEntry(changeLogEntry); } @Override protected void createClient(Section section, FormToolkit toolkit) { GridData gd = new GridData(GridData.FILL_BOTH); gd.minimumWidth = 250; gd.grabExcessVerticalSpace = true; section.setText(Msgs.general); section.setDescription(Msgs.specifyPluginPackageProperties); section.setLayout(FormLayoutFactory.createClearTableWrapLayout(false, 1)); section.setLayoutData(gd); Composite client = toolkit.createComposite(section); client.setLayout(FormLayoutFactory.createSectionClientGridLayout(false, 3)); IActionBars actionBars = page.getEditor().getEditorSite().getActionBars(); createNameEntry(client, toolkit, actionBars); createModuleGroupIdEntry(client, toolkit, actionBars); createModuleIncrementalVersionEntry(client, toolkit, actionBars); createTagsEntry(client, toolkit, actionBars); createChangeLogEntry(client, toolkit, actionBars); createPageUrlEntry(client, toolkit, actionBars); createAuthorEntry(client, toolkit, actionBars); createLicensesEntry(client, toolkit, actionBars); createLiferayVersionsEntry(client, toolkit, actionBars); createShortDescriptionEntry(client, toolkit, actionBars); createLongDescriptionEntry(client, toolkit, actionBars); createSpeedFiltersEntry(client, toolkit, actionBars); toolkit.paintBordersFor(client); section.setClient(client); getModel().addModelChangedListener(this); } protected void createLicensesEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { licensesEntry = new FormEntry(client, toolkit, Msgs.licensesLabel, null, SWT.SINGLE, false); licensesEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setLicenses(entry.getValue().trim()); } }); configureEntry(licensesEntry); } protected void createLiferayVersionsEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { liferayVersionsEntry = new FormEntry(client, toolkit, Msgs.liferayVersionsLabel, null, SWT.SINGLE, false); liferayVersionsEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setLiferayVersions(entry.getValue().trim()); } }); configureEntry(liferayVersionsEntry); } protected void createModuleGroupIdEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { moduleGroupIdEntry = new FormEntry(client, toolkit, Msgs.moduleGroupIdLabel, null, SWT.SINGLE, false); moduleGroupIdEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setModuleGroupId(entry.getValue().trim()); } }); configureEntry(moduleGroupIdEntry); } protected void createModuleIncrementalVersionEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { moduleIncrementalVersionEntry = new FormEntry(client, toolkit, Msgs.moduleVersionLabel, null, SWT.SINGLE, false); moduleIncrementalVersionEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setModuleIncrementalVersion(entry.getValue().trim()); } }); configureEntry(moduleIncrementalVersionEntry); } protected void createNameEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { nameEntry = new FormEntry(client, toolkit, Msgs.nameLabel, null, SWT.SINGLE, false); nameEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setName(entry.getValue().trim()); } }); configureEntry(nameEntry); } protected void createPageUrlEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { pageUrlEntry = new FormEntry(client, toolkit, Msgs.pageURLLabel, null, SWT.SINGLE, false); pageUrlEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setPageUrl(entry.getValue().trim()); } }); configureEntry(pageUrlEntry); } protected void createShortDescriptionEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.grabExcessHorizontalSpace = true; gd.horizontalSpan = 5; gd.heightHint = 20; gd.widthHint = 100; shortDescriptionEntry = new FormEntry(client, toolkit, Msgs.shortDescriptionLabel, null, SWT.SINGLE, false); shortDescriptionEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setShortDescription(entry.getValue().trim()); } }); shortDescriptionEntry.getText().setLayoutData(gd); shortDescriptionEntry.setEditable(isEditable()); } protected void createLongDescriptionEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.grabExcessHorizontalSpace = true; gd.horizontalSpan = 5; gd.heightHint = 75; gd.widthHint = 100; int style = SWT.MULTI | SWT.WRAP | SWT.V_SCROLL; longDescriptionEntry = new FormEntry(client, toolkit, Msgs.longDescriptionLabel, null, style, false); longDescriptionEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setLongDescription(entry.getValue().trim()); } }); longDescriptionEntry.getText().setLayoutData(gd); longDescriptionEntry.setEditable(isEditable()); } protected void createSpeedFiltersEntry(Composite parent, FormToolkit toolkit, IActionBars actionBars) { SWTUtil.createLabel(parent, StringPool.EMPTY, 1); GridData td = new GridData(); td.horizontalSpan = 5; speedFilters = toolkit.createButton(parent, Msgs.speedFilters, SWT.CHECK); speedFilters.setLayoutData(td); speedFilters.setEnabled(isEditable()); speedFilters.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (!speedFilterEnabledModifying) { getModel().setSpeedFiltersEnabled(speedFilters.getSelection()); } } }); } protected void createTagsEntry(Composite client, FormToolkit toolkit, IActionBars actionBars) { tagsEntry = new FormEntry(client, toolkit, Msgs.tagsLabel, null, SWT.SINGLE, false); tagsEntry.setFormEntryListener(new FormEntryAdapter(this, actionBars) { public void textValueChanged(FormEntry entry) { getModel().setTags(entry.getValue().trim()); } }); configureEntry(tagsEntry); } protected PluginPackageModel getModel() { return (PluginPackageModel) getPage().getLiferayFormEditor().getModel(); } protected IStatus validate() { if ("" == getModel().getModuleGroupId()) { return new Status(IStatus.ERROR, PortletUIPlugin.PLUGIN_ID, "Module Group Id can't be empty"); } if (getModel().getModuleGroupId().startsWith("/")) { return new Status(IStatus.ERROR, PortletUIPlugin.PLUGIN_ID, "Module Group Id can't start with '/'"); } return new Status(IStatus.OK, PortletUIPlugin.PLUGIN_ID, ""); } private static class Msgs extends NLS { public static String authorLabel; public static String changeLogLabel; public static String general; public static String licensesLabel; public static String liferayVersionsLabel; public static String longDescriptionLabel; public static String moduleGroupIdLabel; public static String moduleVersionLabel; public static String nameLabel; public static String pageURLLabel; public static String shortDescriptionLabel; public static String specifyPluginPackageProperties; public static String speedFilters; public static String tagsLabel; static { initializeMessages(PluginPackageGeneralSection.class.getName(), Msgs.class); } } }