/*******************************************************************************
* 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 );
}
}
}