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