/******************************************************************************* * Copyright (c) 2010, 2011 EclipseSource and others. 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: * Holger Staudacher - initial API and implementation *******************************************************************************/ package org.eclipse.libra.warproducts.ui.newwizard; import java.util.*; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants; import org.eclipse.libra.warproducts.core.*; import org.eclipse.libra.warproducts.ui.WARProductConstants; import org.eclipse.pde.core.plugin.IPluginModelBase; import org.eclipse.pde.core.plugin.TargetPlatform; import org.eclipse.pde.internal.core.iproduct.*; import org.eclipse.pde.internal.core.iproduct.IProduct; import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper; import org.eclipse.pde.internal.ui.PDEPlugin; import org.eclipse.pde.launching.IPDELauncherConstants; public class WARProductFromConfigOperation extends BaseWARProductCreationOperation { private IContainer productParent; private ILaunchConfiguration launchConfig; public WARProductFromConfigOperation( final IFile file, final ILaunchConfiguration config ) { super( file ); productParent = file.getParent(); this.launchConfig = config; } protected void initializeProduct( final IProduct product ) { internalInitializeProduct( product ); InfrastructureCreator creator = new InfrastructureCreator( productParent ); createWebInfContent( creator ); if( product instanceof WARProduct ) { WARProduct warProduct = ( WARProduct )product; warProduct.addLaunchIni( creator.getLaunchIniPath() ); warProduct.addWebXml( creator.getWebXmlPath() ); WARProductInitializer initializer = new WARProductInitializer( warProduct ); initializer.initialize(); } } protected void internalInitializeProduct( final IProduct product ) { if( launchConfig != null ) { try { IProductModelFactory factory = product.getModel().getFactory(); handleApplication( product, factory ); handleJRE( product ); handlePluginModel( product, factory ); handleVMArguments( product, factory ); } catch( final CoreException e ) { PDEPlugin.logException( e ); } } } private void handleApplication( final IProduct product, final IProductModelFactory factory ) throws CoreException { boolean useProduct = launchConfig.getAttribute( IPDELauncherConstants.USE_PRODUCT, false ); if( useProduct ) { String id = launchConfig.getAttribute( IPDELauncherConstants.PRODUCT, "" ); //$NON-NLS-1$ if( !id.equals( "" ) ) { //$NON-NLS-1$ initializeProductInfo( factory, product, id ); } } else { String application = IPDELauncherConstants.APPLICATION; String defaultApplication = TargetPlatform.getDefaultApplication(); String appName = launchConfig.getAttribute( application, defaultApplication ); product.setApplication( appName ); } } private void handleJRE( final IProduct product ) throws CoreException { // Set JRE info from information from the launch configuration String JreContainerPathName = IJavaLaunchConfigurationConstants.ATTR_JRE_CONTAINER_PATH; String jreString = launchConfig.getAttribute( JreContainerPathName, "" ); //$NON-NLS-1$ if( !jreString.equals( "" ) ) { //$NON-NLS-1$ IPath jreContainerPath = new Path( jreString ); IJREInfo jreInfo = product.getJREInfo(); if( jreInfo == null ) { jreInfo = product.getModel().getFactory().createJVMInfo(); } jreInfo.setJREContainerPath( TargetPlatform.getOS(), jreContainerPath ); product.setJREInfo( jreInfo ); } } private void handlePluginModel( final IProduct product, final IProductModelFactory factory ) throws CoreException { // fetch the plug-ins models String workspaceId = IPDELauncherConstants.SELECTED_WORKSPACE_PLUGINS; String targetId = IPDELauncherConstants.SELECTED_TARGET_PLUGINS; String configType = launchConfig.getType().getIdentifier(); if( configType.equals( IPDELauncherConstants.OSGI_CONFIGURATION_TYPE ) || configType.equals( WARProductConstants.RAP_LAUNCH_CONFIG_TYPE ) ) { workspaceId = IPDELauncherConstants.WORKSPACE_BUNDLES; targetId = IPDELauncherConstants.TARGET_BUNDLES; } Set<String> set = new HashSet<String>(); Map<IPluginModelBase, String> map = BundleLauncherHelper.getWorkspaceBundleMap(launchConfig, set, workspaceId ); map.putAll( BundleLauncherHelper.getTargetBundleMap( launchConfig, set, targetId ) ); addPlugins( factory, product, map ); handleDefaultConfig( product, factory ); } private void handleDefaultConfig( final IProduct product, final IProductModelFactory factory ) throws CoreException { String configDefault = IPDELauncherConstants.CONFIG_GENERATE_DEFAULT; boolean useDefault = launchConfig.getAttribute( configDefault, true ); if( useDefault ) { super.initializeProduct( product ); } else { handleTemplatePath( product, factory ); } } private void handleTemplatePath( final IProduct product, final IProductModelFactory factory ) throws CoreException { String templateLocation = IPDELauncherConstants.CONFIG_TEMPLATE_LOCATION; String path = launchConfig.getAttribute( templateLocation, "/" ); //$NON-NLS-1$ IWorkspace workspace = PDEPlugin.getWorkspace(); IWorkspaceRoot root = workspace.getRoot(); IContainer container = root.getContainerForLocation( new Path( path ) ); if( container != null ) { IConfigurationFileInfo info = factory.createConfigFileInfo(); info.setUse( null, "custom" ); //$NON-NLS-1$ info.setPath( null, container.getFullPath().toString() ); product.setConfigurationFileInfo( info ); } else { super.initializeProduct( product ); } } private void handleVMArguments( final IProduct product, final IProductModelFactory factory ) throws CoreException { // set vm and program arguments from the launch configuration String vmArgumentsName = IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS; String vmargs = launchConfig.getAttribute( vmArgumentsName, "" ); //$NON-NLS-1$ String programArgumentsName = IJavaLaunchConfigurationConstants.ATTR_PROGRAM_ARGUMENTS; String programArgs = launchConfig.getAttribute( programArgumentsName, "" ); //$NON-NLS-1$ if( !vmargs.equals( "" ) || !programArgs.equals( "" ) ) { //$NON-NLS-1$ //$NON-NLS-2$ IArgumentsInfo arguments = product.getLauncherArguments(); if( arguments != null ) { arguments = factory.createLauncherArguments(); if( !vmargs.equals( "" ) ) { //$NON-NLS-1$ arguments.setVMArguments( vmargs, IArgumentsInfo.L_ARGS_ALL ); } if( !programArgs.equals( "" ) ) { //$NON-NLS-1$ arguments.setProgramArguments( programArgs, IArgumentsInfo.L_ARGS_ALL ); } product.setLauncherArguments( arguments ); } } } }