blob: 90b3184106ee31d4f3321c97dd37d7275d0015b1 [file] [log] [blame]
/******************************************************************************
* 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
*
* Contributors:
* Konstantin Komissarchik - initial API and implementation
******************************************************************************/
package org.eclipse.jst.servlet.ui.internal.wizard;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Set;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
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.jst.j2ee.internal.web.classpath.WebAppLibrariesContainer;
import org.eclipse.jst.j2ee.web.project.facet.WebFacetUtils;
import org.eclipse.jst.servlet.ui.internal.plugin.ServletUIPlugin;
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;
import org.eclipse.wst.common.project.facet.core.IFacetedProject;
import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
/**
* @author <a href="mailto:kosta@bea.com">Konstantin Komissarchik</a>
*/
public class WebAppLibrariesContainerPage
extends NewElementWizardPage
implements IClasspathContainerPage, IClasspathContainerPageExtension
{
private IProject ownerProject;
private String libsProjectName;
private Combo projectsCombo;
public WebAppLibrariesContainerPage()
{
super( "WebAppLibrariesContainerPage" ); //$NON-NLS-1$
setTitle( Resources.pageTitle );
setDescription( Resources.pageDescription );
}
public IClasspathEntry getSelection()
{
IPath path = new Path( WebAppLibrariesContainer.CONTAINER_ID );
final int index = this.projectsCombo.getSelectionIndex();
final String selectedProjectName = this.projectsCombo.getItem( index );
if( this.ownerProject == null ||
! selectedProjectName.equals( this.ownerProject.getName() ) )
{
path = path.append( selectedProjectName );
}
return JavaCore.newContainerEntry( path );
}
public void setSelection( final IClasspathEntry cpentry )
{
final IPath path = cpentry == null ? null : cpentry.getPath();
if( path == null || path.segmentCount() == 1 )
{
if( this.ownerProject != null )
{
this.libsProjectName = this.ownerProject.getName();
}
}
else
{
this.libsProjectName = path.segment( 1 );
}
}
public void createControl( final 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( Resources.projectsLabel );
final String[] webProjects = getWebProjects();
this.projectsCombo = new Combo( composite, SWT.READ_ONLY );
this.projectsCombo.setItems( webProjects );
final int index;
if( this.ownerProject != null )
{
index = indexOf( webProjects, this.libsProjectName );
}
else
{
if( this.projectsCombo.getItemCount() > 0 )
{
index = 0;
}
else
{
index = -1;
}
}
if( index != -1 )
{
this.projectsCombo.select( index );
}
final GridData gd = new GridData();
gd.grabExcessHorizontalSpace = true;
gd.minimumWidth = 100;
this.projectsCombo.setLayoutData( gd );
setControl( composite );
}
public boolean finish()
{
return true;
}
public void initialize( final IJavaProject project,
final IClasspathEntry[] currentEntries )
{
this.ownerProject = ( project == null ? null : project.getProject() );
}
private static String[] getWebProjects()
{
try
{
final Set projects
= ProjectFacetsManager.getFacetedProjects( WebFacetUtils.WEB_FACET );
final String[] names = new String[ projects.size() ];
int i = 0;
for( Iterator itr = projects.iterator(); itr.hasNext(); i++ )
{
final IFacetedProject fproj = (IFacetedProject) itr.next();
names[ i ] = fproj.getProject().getName();
}
Arrays.sort( names );
return names;
}
catch( CoreException e )
{
ServletUIPlugin.log( e.getStatus() );
return new String[ 0 ];
}
}
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 final class Resources
extends NLS
{
public static String pageTitle;
public static String pageDescription;
public static String projectsLabel;
static
{
initializeMessages( WebAppLibrariesContainerPage.class.getName(),
Resources.class );
}
}
}