/****************************************************************************** * Copyright (c) 2008-2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.services.sa.wizards; import java.io.ByteArrayInputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.ide.IDE; import com.ebmwebsourcing.petals.common.generation.JbiUtils; import com.ebmwebsourcing.petals.common.internal.provisional.maven.MavenBean; import com.ebmwebsourcing.petals.common.internal.provisional.maven.MavenUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.PetalsConstants; import com.ebmwebsourcing.petals.common.internal.provisional.utils.ResourceUtils; import com.ebmwebsourcing.petals.services.PetalsServicesPlugin; import com.ebmwebsourcing.petals.services.su.jbiproperties.PetalsSPPropertiesManager; import com.ebmwebsourcing.petals.services.utils.PetalsServicesProjectUtils; /** * The wizard to create a project for an SA Maven project (to be used with the Petals Maven plug-in). * @author Vincent Zurczak - EBM WebSourcing */ public class PetalsSaNewWizard extends Wizard implements INewWizard { private PetalsSaNewWizardPage mavenPage; private PetalsSaSusWizardPage susPage; private IProject createdProject; private final List<String> selectedProjects = new ArrayList<String> (); /** * Constructor for ScaProjectWizard. */ public PetalsSaNewWizard () { super(); setNeedsProgressMonitor( true ); setWindowTitle( "New Service Assembly" ); ImageDescriptor desc = PetalsServicesPlugin.getImageDescriptor( "icons/wizban/wiz_service_assembly.png" ); setDefaultPageImageDescriptor( desc ); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#addPages() */ @Override public void addPages() { this.mavenPage = new PetalsSaNewWizardPage( "SaMavenProjectPage" ); this.mavenPage.setTitle( "Service Assembly" ); this.mavenPage.setDescription( "Define the Service Assembly properties." ); addPage( this.mavenPage ); this.susPage = new PetalsSaSusWizardPage( "SaSusPage" ); this.susPage.setTitle( "Service Assembly" ); this.susPage.setDescription( "Select the Service Unit(s) to associate with the created artifact." ); addPage( this.susPage ); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#performFinish() */ @Override public boolean performFinish() { final MavenBean bean = collectPagesData(); // Define the wizard completion process. WorkspaceModifyOperation op = new WorkspaceModifyOperation() { @Override protected void execute( IProgressMonitor monitor ) throws CoreException, InvocationTargetException, InterruptedException { try { // Create the project monitor.beginTask( "Creating the SA project...", 5 ); PetalsSaNewWizard.this.createdProject = PetalsServicesProjectUtils.createSaProject( PetalsSaNewWizard.this.mavenPage.getSaName(), PetalsSaNewWizard.this.mavenPage.getProjectLocationURI(), bean, monitor ); // Create the jbi.xml Map<String,String> suNameToComponentName = new HashMap<String,String> (); for( IProject p : PetalsSaNewWizard.this.susPage.getSuProjectsToAdd()) { Properties properties = PetalsSPPropertiesManager.getProperties( p ); String componentName = properties.getProperty( PetalsSPPropertiesManager.COMPONENT_DEPLOYMENT_ID, null ); if( componentName != null ) suNameToComponentName.put( p.getName(), componentName ); } String content = JbiUtils.generateJbiXmlForSA( PetalsSaNewWizard.this.createdProject.getName(), suNameToComponentName ); IFile jbiXmlFile = PetalsSaNewWizard.this.createdProject.getFile( PetalsConstants.LOC_JBI_FILE ); if( jbiXmlFile.exists()) jbiXmlFile.setContents( new ByteArrayInputStream( content.getBytes()), true, true, monitor ); else jbiXmlFile.create( new ByteArrayInputStream( content.getBytes()), true, monitor ); } catch( Exception e ) { throw new InvocationTargetException( e ); } finally { monitor.done(); } } }; try { // Run the operation. getContainer().run( true, false, op ); // Open the jbi.xml file IFile jbiXmlFile = this.createdProject.getFile( PetalsConstants.LOC_JBI_FILE ); IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); try { IDE.openEditor( page, jbiXmlFile ); } catch( PartInitException e ) { PetalsServicesPlugin.log( e, IStatus.ERROR ); } // Reveal the file in the explorer ResourceUtils.selectResourceInPetalsExplorer( true, jbiXmlFile ); } catch( Exception e ) { PetalsServicesPlugin.log( e, IStatus.ERROR ); return false; } return true; } /** * Collect the data from the wizard pages. * @return a Maven bean with all the collected data */ private MavenBean collectPagesData() { MavenBean bean = new MavenBean (); bean.setName( this.mavenPage.getSaName()); bean.setDescription( this.mavenPage.getSaDescription()); bean.setArtifactId( this.mavenPage.getArtifactId()); bean.setGroupId( this.mavenPage.getGroupId()); bean.setVersion( this.mavenPage.getVersion()); // Get the parent pom.xml MavenBean parentBean = MavenUtils.getPomParentElements(); if( parentBean != null ) { bean.setParentArtifactId( parentBean.getArtifactId()); bean.setParentGroupId( parentBean.getGroupId()); bean.setParentVersion( parentBean.getVersion()); } // Set the SU dependencies for( IProject p : this.susPage.getSuProjectsToAdd()) { MavenBean mavenBean = MavenUtils.getPomElements( p.getFile( PetalsConstants.LOC_POM_FILE )); bean.dependencies.add( mavenBean ); } return bean; } /* * (non-Javadoc) * @see org.eclipse.ui.IWorkbenchWizard * #init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init( IWorkbench workbench, IStructuredSelection selection ) { if( selection.isEmpty()) return; Iterator<?> it = selection.iterator(); while( it.hasNext()) { Object o = it.next(); if( o instanceof IProject ) this.selectedProjects.add(((IProject) o).getName()); } } }