/*******************************************************************************
* 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.util.CoreUtil;
import com.liferay.ide.hook.core.operation.INewHookDataModelProperties;
import com.liferay.ide.hook.ui.HookUI;
import com.liferay.ide.project.core.util.ProjectUtil;
import com.liferay.ide.project.ui.wizard.LiferayDataModelWizardPage;
import com.liferay.ide.ui.util.SWTUtil;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wst.common.componentcore.internal.operation.IArtifactEditOperationDataModelProperties;
import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
/**
* @author Greg Amerson
*/
@SuppressWarnings( "restriction" )
public class NewHookTypeWizardPage extends LiferayDataModelWizardPage implements INewHookDataModelProperties
{
protected Button customJSPButton;
protected Button folderButton;
protected Text folderText;
protected Button languagePropertiesButton;
protected Button portalPropertiesButton;
protected String projectName;
protected Combo projectNameCombo;
protected Label projectNameLabel;
protected Button servicesButton;
public NewHookTypeWizardPage( IDataModel model, String pageName )
{
super( model, pageName, Msgs.createLiferayHook, HookUI.imageDescriptorFromPlugin(
HookUI.PLUGIN_ID, "/icons/wizban/hook_wiz.png" ) ); //$NON-NLS-1$
setDescription( Msgs.defineNewHookPlugin );
}
protected void createHookTypesGroup( Composite parent )
{
Group group = SWTUtil.createGroup( parent, Msgs.selectHookTypes, 1 );
group.setLayoutData( new GridData( SWT.FILL, SWT.CENTER, true, false, 2, 1 ) );
customJSPButton = SWTUtil.createCheckButton( group, Msgs.customJSPs, null, false, 1 );
this.synchHelper.synchCheckbox( customJSPButton, CREATE_CUSTOM_JSPS, null );
portalPropertiesButton = SWTUtil.createCheckButton( group, Msgs.portalProperties, null, false, 1 );
this.synchHelper.synchCheckbox( portalPropertiesButton, CREATE_PORTAL_PROPERTIES, null );
servicesButton = SWTUtil.createCheckButton( group, Msgs.services, null, false, 1 );
this.synchHelper.synchCheckbox( servicesButton, CREATE_SERVICES, null );
languagePropertiesButton = SWTUtil.createCheckButton( group, Msgs.languageProperties, null, false, 1 );
this.synchHelper.synchCheckbox( languagePropertiesButton, CREATE_LANGUAGE_PROPERTIES, null );
}
/**
* Add project group
*/
protected void createProjectNameGroup( Composite parent )
{
// set up project name label
projectNameLabel = new Label( parent, SWT.NONE );
projectNameLabel.setText( "Hook plugin project:" ); //$NON-NLS-1$
projectNameLabel.setLayoutData( new GridData() );
GridData data = new GridData( GridData.FILL_HORIZONTAL );
data.widthHint = 300;
data.horizontalSpan = 1;
data.grabExcessHorizontalSpace = true;
// set up project name entry field
projectNameCombo = new Combo( parent, SWT.BORDER | SWT.READ_ONLY );
projectNameCombo.setLayoutData( data );
synchHelper.synchCombo( projectNameCombo, PROJECT_NAME, null );
initializeProjectList();
}
@Override
protected Composite createTopLevelComposite( Composite parent )
{
Composite topComposite = SWTUtil.createTopComposite( parent, 2 );
createProjectNameGroup( topComposite );
// SWTUtil.createSeparator(composite, 2);
SWTUtil.createVerticalSpacer( topComposite, 2, 2 );
createHookTypesGroup( topComposite );
setShellImage();
return topComposite;
}
@Override
protected String[] getValidationPropertyNames()
{
return new String[] { PROJECT_NAME, CREATE_CUSTOM_JSPS, CREATE_PORTAL_PROPERTIES, CREATE_SERVICES,
CREATE_LANGUAGE_PROPERTIES };
}
protected void initializeProjectList()
{
IProject[] workspaceProjects = CoreUtil.getAllProjects();
List<String> items = new ArrayList<String>();
for( int i = 0; i < workspaceProjects.length; i++ )
{
IProject project = workspaceProjects[i];
if( isProjectValid( project ) )
{
items.add( project.getName() );
}
}
if( items.isEmpty() )
{
return;
}
String[] names = new String[items.size()];
for( int i = 0; i < items.size(); i++ )
{
names[i] = (String) items.get( i );
}
projectNameCombo.setItems( names );
IProject selectedProject = null;
try
{
if( model != null )
{
String projectNameFromModel =
model.getStringProperty( IArtifactEditOperationDataModelProperties.COMPONENT_NAME );
if( projectNameFromModel != null && projectNameFromModel.length() > 0 )
{
selectedProject = CoreUtil.getProject( projectNameFromModel );
}
}
}
catch( Exception e )
{
};
try
{
if( selectedProject == null )
{
selectedProject = getSelectedProject();
}
if( selectedProject != null && selectedProject.isAccessible() &&
selectedProject.hasNature( IModuleConstants.MODULE_NATURE_ID ) )
{
projectNameCombo.setText( selectedProject.getName() );
validateProjectRequirements( selectedProject );
model.setProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME, selectedProject.getName() );
}
}
catch( CoreException ce )
{
// Ignore
}
if( projectName == null && names.length > 0 )
{
projectName = names[0];
}
if( ( projectNameCombo.getText() == null || projectNameCombo.getText().length() == 0 ) && projectName != null )
{
projectNameCombo.setText( projectName );
validateProjectRequirements( CoreUtil.getProject( projectName ) );
model.setProperty( IArtifactEditOperationDataModelProperties.PROJECT_NAME, projectName );
}
}
protected boolean isProjectValid( IProject project )
{
return ProjectUtil.isHookProject( project ) || ProjectUtil.isPortletProject( project );
}
protected void setShellImage()
{
URL url = HookUI.getDefault().getBundle().getEntry( "/icons/e16/hook.png" ); //$NON-NLS-1$
Image shellImage = ImageDescriptor.createFromURL( url ).createImage();
getShell().setImage( shellImage );
}
private static class Msgs extends NLS
{
public static String createLiferayHook;
public static String customJSPs;
public static String defineNewHookPlugin;
public static String languageProperties;
public static String portalProperties;
public static String selectHookTypes;
public static String services;
static
{
initializeMessages( NewHookTypeWizardPage.class.getName(), Msgs.class );
}
}
}