/******************************************************************************* * Copyright (c) 2014, 2015 Cisco Systems, Inc. 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 * *******************************************************************************/ package com.cisco.yangide.m2e.yang; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.maven.plugin.MojoExecution; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.m2e.core.internal.lifecyclemapping.LifecycleMappingFactory; import org.eclipse.m2e.core.internal.project.registry.MavenProjectFacade; import org.eclipse.m2e.core.internal.project.registry.ProjectRegistryManager; import org.eclipse.m2e.core.lifecyclemapping.model.IPluginExecutionMetadata; import org.eclipse.m2e.core.project.IMavenProjectFacade; import org.eclipse.m2e.core.project.configurator.AbstractBuildParticipant; import org.eclipse.m2e.core.project.configurator.AbstractCustomizableLifecycleMapping; import org.eclipse.m2e.core.project.configurator.AbstractProjectConfigurator; import org.eclipse.m2e.core.project.configurator.MojoExecutionKey; /** * @author Konstantin Zaitsev * @date Jul 3, 2014 */ @SuppressWarnings("restriction") public class LifecycleMapping extends AbstractCustomizableLifecycleMapping { @Override public List<AbstractProjectConfigurator> getProjectConfigurators(IMavenProjectFacade projectFacade, IProgressMonitor monitor) { Map<String, AbstractProjectConfigurator> configurators = LifecycleMappingFactory .getProjectConfigurators(projectFacade); if (!configurators.containsKey(YangProjectConfigurator.class.getName())) { configurators.put(YangProjectConfigurator.class.getName(), new YangProjectConfigurator()); } return new ArrayList<AbstractProjectConfigurator>(configurators.values()); } @Override public Map<MojoExecutionKey, List<AbstractBuildParticipant>> getBuildParticipants( IMavenProjectFacade projectFacade, IProgressMonitor monitor) throws CoreException { Map<MojoExecutionKey, List<AbstractBuildParticipant>> result = new LinkedHashMap<MojoExecutionKey, List<AbstractBuildParticipant>>(); Map<MojoExecutionKey, List<IPluginExecutionMetadata>> mapping = projectFacade.getMojoExecutionMapping(); Map<String, AbstractProjectConfigurator> configurators = LifecycleMappingFactory .getProjectConfigurators(projectFacade); if (!configurators.containsKey(YangProjectConfigurator.class.getName())) { try { configurators.put(YangProjectConfigurator.class.getName(), new YangProjectConfigurator()); } catch (UnsupportedOperationException e) { // ignore error } } List<MojoExecution> mojoExecutions = ((MavenProjectFacade) projectFacade).getExecutionPlan( ProjectRegistryManager.LIFECYCLE_DEFAULT, monitor); if (mojoExecutions != null && mapping != null) { // null if execution plan could not be // calculated for (MojoExecution mojoExecution : mojoExecutions) { MojoExecutionKey mojoExecutionKey = new MojoExecutionKey(mojoExecution); List<IPluginExecutionMetadata> executionMetadatas = mapping.get(mojoExecutionKey); List<AbstractBuildParticipant> executionMappings = new ArrayList<AbstractBuildParticipant>(); if (executionMetadatas != null) { for (IPluginExecutionMetadata executionMetadata : executionMetadatas) { if (mojoExecutionKey.getArtifactId().equals(YangM2EPlugin.YANG_MAVEN_PLUGIN)) { executionMappings.add(new YangBuildParticipant(projectFacade.getMojoExecution( mojoExecutionKey, monitor), true)); } else { switch (executionMetadata.getAction()) { case execute: executionMappings.add(LifecycleMappingFactory.createMojoExecutionBuildParicipant( projectFacade, projectFacade.getMojoExecution(mojoExecutionKey, monitor), executionMetadata)); break; case configurator: String configuratorId = LifecycleMappingFactory .getProjectConfiguratorId(executionMetadata); AbstractProjectConfigurator configurator = configurators.get(configuratorId); if (configurator == null) { break; } AbstractBuildParticipant buildParticipant = configurator.getBuildParticipant( projectFacade, projectFacade.getMojoExecution(mojoExecutionKey, monitor), executionMetadata); if (buildParticipant != null) { executionMappings.add(buildParticipant); } break; case ignore: case error: break; default: throw new IllegalArgumentException("Missing handling for action=" + executionMetadata.getAction()); } } } } result.put(mojoExecutionKey, executionMappings); } } return result; } }