/****************************************************************************** * 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(); if(index != -1){ 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 ); } } }