package org.jenkins.tools.test.hook;
import org.jenkins.tools.test.model.MavenCoordinates;
import org.jenkins.tools.test.model.MavenPom;
import org.jenkins.tools.test.model.PomData;
import org.jenkins.tools.test.model.hook.PluginCompatTesterHookBeforeExecution;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class TransformPom extends PluginCompatTesterHookBeforeExecution {
private static final String CORE_NEW_PARENT_POM = "1.646";
public TransformPom() {
System.out.println("Loaded TransformPom");
}
/**
* Check if the pom should be transformed for the given plugin.
*/
public boolean check(Map<String, Object> info) {
boolean mustTransformPom = false;
// TODO future versions of DEFAULT_PARENT_GROUP/ARTIFACT may be able to use this as well
PomData pomData = (PomData)info.get("pomData");
MavenCoordinates parent = pomData.parent;
MavenCoordinates coreCoordinates = (MavenCoordinates)info.get("coreCoordinates");
boolean isCB = parent.matches("com.cloudbees.jenkins.plugins", "jenkins-plugins") ||
// TODO ought to analyze the chain of parent POMs, which would lead to com.cloudbees.jenkins.plugins:jenkins-plugins in this case:
parent.matches("com.cloudbees.operations-center.common", "operations-center-parent") ||
parent.matches("com.cloudbees.operations-center.client", "operations-center-parent-client");
boolean pluginPOM = parent.matches("org.jenkins-ci.plugins", "plugin");
boolean parentV2 = parent.compareVersionTo("2.0") >= 0;
boolean coreRequiresNewParentPOM = coreCoordinates.compareVersionTo(CORE_NEW_PARENT_POM) >= 0;
if ( isCB || (pluginPOM && parentV2)) {
List<String> argsToMod = (List<String>)info.get("args");
argsToMod.add("-Djenkins.version=" + coreCoordinates.version);
argsToMod.add("-Dhpi-plugin.version=1.117"); // TODO would ideally pick up exact version from org.jenkins-ci.main:pom
// There are rules that avoid dependencies on a higher java level. Depending on the baselines and target cores
// the plugin may be Java 6 and the dependencies bring Java 7
argsToMod.add("-Denforcer.skip=true");
info.put("args", argsToMod);
} else if (coreRequiresNewParentPOM && pluginPOM && !parentV2) {
throw new RuntimeException("New parent POM required for core >= 1.646");
} else {
mustTransformPom = true;
}
return mustTransformPom;
}
public Map<String, Object> action(Map<String, Object> moreInfo) throws Exception {
MavenCoordinates coreCoordinates = (MavenCoordinates)moreInfo.get("coreCoordinates");
((MavenPom)moreInfo.get("pom")).transformPom(coreCoordinates);
return moreInfo;
}
}