| package org.jetbrains.idea.maven.plugins.api; |
| |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.util.SingletonInstancesCache; |
| import org.jdom.Element; |
| import org.jetbrains.annotations.Nullable; |
| import org.jetbrains.idea.maven.model.MavenPlugin; |
| |
| import java.util.Collection; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Properties; |
| |
| /** |
| * @author Sergey Evdokimov |
| */ |
| public class MavenModelPropertiesPatcher { |
| |
| /* |
| * Add properties those should be added by plugins. |
| */ |
| public static void patch(Properties modelProperties, @Nullable Collection<MavenPlugin> plugins) { |
| if (plugins == null) return; |
| |
| Map<String, Map<String, Map<String, List<MavenPluginDescriptor>>>> map = MavenPluginDescriptor.getDescriptorsMap(); |
| |
| for (MavenPlugin plugin : plugins) { |
| Map<String, Map<String, List<MavenPluginDescriptor>>> groupMap = map.get(plugin.getArtifactId()); |
| if (groupMap != null) { |
| Map<String, List<MavenPluginDescriptor>> goalsMap = groupMap.get(plugin.getGroupId()); |
| if (goalsMap != null) { |
| patch(modelProperties, goalsMap.get(null), null, plugin.getConfigurationElement(), plugin); |
| |
| for (MavenPlugin.Execution execution : plugin.getExecutions()) { |
| for (String goal : execution.getGoals()) { |
| patch(modelProperties, goalsMap.get(goal), goal, execution.getConfigurationElement(), plugin); |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| private static void patch(Properties modelProperties, @Nullable List<MavenPluginDescriptor> descriptors, @Nullable String goal, Element cfgElement, MavenPlugin plugin) { |
| if (descriptors == null) return; |
| |
| for (MavenPluginDescriptor descriptor : descriptors) { |
| if (descriptor.properties != null) { |
| for (MavenPluginDescriptor.ModelProperty property : descriptor.properties) { |
| if (!property.insideConfigurationOnly && StringUtil.isNotEmpty(property.name)) { |
| modelProperties.setProperty(property.name, StringUtil.notNullize(property.value)); |
| } |
| } |
| } |
| |
| if (descriptor.propertyGenerator != null) { |
| MavenPropertiesGenerator generator = SingletonInstancesCache |
| .getInstance(descriptor.propertyGenerator, descriptor.getLoaderForClass()); |
| generator.generate(modelProperties, goal, plugin, cfgElement); |
| } |
| } |
| } |
| |
| } |