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