blob: 04039a2f95f97f8a51e7a5a962d1590b4cc2b0bb [file] [log] [blame]
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);
}
}
}
}