/******************************************************************************
* Copyright (c) 2006 BEA Systems, Inc.
* 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
*
*******************************************************************************/
package com.liferay.ide.project.ui.wizard;
import com.liferay.ide.project.core.PluginClasspathContainerInitializer;
import com.liferay.ide.project.core.util.ProjectUtil;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.ui.wizards.IClasspathContainerPage;
import org.eclipse.jdt.ui.wizards.IClasspathContainerPageExtension;
import org.eclipse.jdt.ui.wizards.NewElementWizardPage;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
/**
* @author Gregory Amerson
* @author Terry Jia
*/
public class PluginClasspathContainerPage extends NewElementWizardPage
implements IClasspathContainerPage, IClasspathContainerPageExtension
{
private IProject ownerProject;
private String type;
private Combo typeCombo;
public PluginClasspathContainerPage()
{
super( "PluginClasspathContainerPage" ); //$NON-NLS-1$
setTitle( Msgs.liferayPluginAPILibrary );
setDescription( Msgs.containerManagesClasspathEntries );
}
public void createControl( Composite parent )
{
final Composite composite = new Composite( parent, SWT.NONE );
composite.setLayout( new GridLayout( 2, false ) );
final Label label = new Label( composite, SWT.NONE );
label.setText( Msgs.liferayPluginTypeLabel );
final String[] types = new String[] { "portlet", "hook", "ext", "theme", "web" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
this.typeCombo = new Combo( composite, SWT.READ_ONLY );
this.typeCombo.setItems( types );
final int index;
if( this.type != null )
{
index = indexOf( types, this.type );
}
else
{
if( ProjectUtil.isPortletProject( this.ownerProject ) )
{
index = 0;
}
else if( ProjectUtil.isHookProject( this.ownerProject ) )
{
index = 1;
}
else if( ProjectUtil.isExtProject( this.ownerProject ) )
{
index = 2;
}
else if( ProjectUtil.isThemeProject( this.ownerProject ) )
{
index = 3;
}
else if( ProjectUtil.isWebProject( this.ownerProject ) )
{
index = 4;
}
else
{
index = -1;
}
}
if( index != -1 )
{
this.typeCombo.select( index );
}
final GridData gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.minimumWidth = 100;
this.typeCombo.setLayoutData( gd );
setControl( composite );
}
public boolean finish()
{
if( this.ownerProject != null && ProjectUtil.isLiferayFacetedProject( this.ownerProject ) )
{
return true;
}
else
{
setErrorMessage( Msgs.selectedProjectNotLiferayProject );
return false;
}
}
public IClasspathEntry getSelection()
{
IPath path = new Path( PluginClasspathContainerInitializer.ID + "/" ); //$NON-NLS-1$
final int index = this.typeCombo.getSelectionIndex();
if( index != -1 )
{
final String type = this.typeCombo.getItem( index );
path = path.append( type );
}
return JavaCore.newContainerEntry( path );
}
public void initialize( IJavaProject project, IClasspathEntry[] currentEntries )
{
this.ownerProject = ( project == null ? null : project.getProject() );
}
public void setSelection( IClasspathEntry entry )
{
final IPath path = entry == null ? null : entry.getPath();
if( path != null && path.segmentCount() == 2 )
{
this.type = path.segment( 1 );
}
}
private static int indexOf( final String[] array, final String str )
{
for( int i = 0; i < array.length; i++ )
{
if( array[i].equals( str ) )
{
return i;
}
}
return -1;
}
private static class Msgs extends NLS
{
public static String containerManagesClasspathEntries;
public static String liferayPluginAPILibrary;
public static String liferayPluginTypeLabel;
public static String selectedProjectNotLiferayProject;
static
{
initializeMessages( PluginClasspathContainerPage.class.getName(), Msgs.class );
}
}
}