Title: [40584] trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing: version slicing for non-Maven projects
Revision
40584
Author
jacob_robertson
Date
2012-05-21 15:15:21 -0400 (Mon, 21 May 2012)

Log Message

version slicing for non-Maven projects

Modified Paths


Diff

Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java (40583 => 40584)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java	2012-05-21 14:23:21 UTC (rev 40583)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java	2012-05-21 19:15:21 UTC (rev 40584)
@@ -72,7 +72,7 @@
         }
         
         @SuppressWarnings("unchecked")
-		private DescribableList<Builder,Descriptor<Builder>> getBuildersList(AbstractProject<?, ?> item) {
+		public static DescribableList<Builder,Descriptor<Builder>> getBuildersList(AbstractProject<?, ?> item) {
         	if (item instanceof Project) {
         		return ((Project) item).getBuildersList();
         	} else if (item instanceof MatrixProject) {
@@ -144,7 +144,7 @@
          * If we do other builders, publishers, etc - this should be the pattern to use.
          * @throws IOException 
          */
-        private boolean replaceBuilder(DescribableList<Builder,Descriptor<Builder>> builders, Builder oldBuilder, Builder newBuilder) {
+        public static boolean replaceBuilder(DescribableList<Builder,Descriptor<Builder>> builders, Builder oldBuilder, Builder newBuilder) {
         	List<Builder> newList = new ArrayList<Builder>(builders.toList());
         	for (int i = 0; i < newList.size(); i++) {
     			Builder b = newList.get(i);

Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/maven/MavenVersionSlicer.java (40583 => 40584)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/maven/MavenVersionSlicer.java	2012-05-21 14:23:21 UTC (rev 40583)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/maven/MavenVersionSlicer.java	2012-05-21 19:15:21 UTC (rev 40584)
@@ -2,35 +2,45 @@
 
 import hudson.Extension;
 import hudson.maven.MavenModuleSet;
+import hudson.model.AbstractProject;
+import hudson.model.Descriptor;
 import hudson.model.Hudson;
+import hudson.tasks.Builder;
+import hudson.tasks.Maven;
 import hudson.tasks.Maven.MavenInstallation;
+import hudson.util.DescribableList;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import configurationslicing.UnorderedStringSlicer;
+import configurationslicing.executeshell.AbstractBuildCommandSlicer.AbstractBuildCommandSliceSpec;
 
+@SuppressWarnings("unchecked")
 @Extension
-public class MavenVersionSlicer extends UnorderedStringSlicer<MavenModuleSet> {
+public class MavenVersionSlicer extends UnorderedStringSlicer<AbstractProject> {
 
 	public MavenVersionSlicer() {
 		super(new MavenVersionSlicerSpec());
 	}
 
 	public static class MavenVersionSlicerSpec extends
-			UnorderedStringSlicerSpec<MavenModuleSet> {
+			UnorderedStringSlicerSpec<AbstractProject> {
 		private static final String DEFAULT = "(Default)";
+		private static final String MULTIPLE = "(MULTIPLE)";
 
 		public String getDefaultValueString() {
 			return DEFAULT;
 		}
 
 		public String getName() {
-			return "Maven Version (Maven Projects)";
+			return "Maven Version";
 		}
 
-		public String getName(MavenModuleSet item) {
+		public String getName(AbstractProject item) {
 			return item.getName();
 		}
 
@@ -38,7 +48,36 @@
 			return "mavenversion";
 		}
 
-		
+		public List<String> getValues(AbstractProject item) {
+			if (item instanceof MavenModuleSet) {
+				return getValues((MavenModuleSet) item);
+			} else {
+				List<String> ret = new ArrayList<String>();
+				List<Maven> builders = getBuilders(item);
+				if (builders.isEmpty()) {
+					return ret;
+				}
+				String last = null;
+				Set<String> all = new HashSet<String>();
+				for (Maven builder: builders) {
+					last = builder.mavenName;
+					all.add(last);
+				}
+				if (all.size() > 1) {
+					ret.add(MULTIPLE);
+				} else if (last != null) {
+					ret.add(last);
+				} else {
+					ret.add(DEFAULT);
+				}
+				return ret;
+			}
+		}
+		private List<Maven> getBuilders(AbstractProject item) {
+			DescribableList<Builder,Descriptor<Builder>> buildersList = AbstractBuildCommandSliceSpec.getBuildersList(item);
+			List<Maven> builders = buildersList.getAll(Maven.class);
+			return builders;
+		}
 		public List<String> getValues(MavenModuleSet item) {
 			List<String> ret = new ArrayList<String>();
 			MavenInstallation itemMaven = item.getMaven();
@@ -55,37 +94,64 @@
 			return ret;
 		}
 
-		@SuppressWarnings("unchecked")
-		public List<MavenModuleSet> getWorkDomain() {
-			return (List) Hudson.getInstance().getItems(MavenModuleSet.class);
+		public List<AbstractProject> getWorkDomain() {
+			List<AbstractProject> list = new ArrayList<AbstractProject>();
+			list.addAll(Hudson.getInstance().getItems(AbstractProject.class));
+			list.addAll(Hudson.getInstance().getItems(MavenModuleSet.class));
+			return list;
 		}
 
-		public boolean setValues(MavenModuleSet item, List<String> set) {
+		public boolean setValues(AbstractProject item, List<String> set) {
+			String mavenVersion = null;
+			if (!set.isEmpty()) {
+				mavenVersion = set.iterator().next();
+			}
+			// do not attempt to update the multiple versions at all
+			if (MULTIPLE.equals(mavenVersion)) {
+				return true;
+			}
+			if (item instanceof MavenModuleSet) {
+				return setValues((MavenModuleSet) item, mavenVersion);
+			} else {
+				List<Maven> builders = getBuilders(item);
+				DescribableList<Builder,Descriptor<Builder>> buildersList = AbstractBuildCommandSliceSpec.getBuildersList(item);
+				for (Maven builder: builders) {
+					String oldName = builder.mavenName;
+					if (oldName == null) {
+						oldName = DEFAULT;
+					}
+					if (!oldName.equals(mavenVersion)) {
+						Maven newMaven = new Maven(builder.targets, mavenVersion, builder.pom, builder.properties, builder.jvmOptions, builder.usePrivateRepository);
+						AbstractBuildCommandSliceSpec.replaceBuilder(buildersList, builder, newMaven);
+					}
+				}
+				return true;
+			}
+		}
+		public boolean setValues(MavenModuleSet item, String mavenVersion) {
 			MavenInstallation old = item.getMaven();
 			String oldName = null;
 			if (old != null) {
 				oldName = old.getName();
 			}
-			for (String maven : set) {
-				if (maven.trim().length() == 0 || DEFAULT.equals(maven)) {
-					maven = null;
-				}
-				boolean save = false;
-				if (maven == null) {
-					if (oldName != null) {
-						save = true;
-					}
-				} else if (!maven.equals(oldName)) {
+			if (mavenVersion.trim().length() == 0 || DEFAULT.equals(mavenVersion)) {
+				mavenVersion = null;
+			}
+			boolean save = false;
+			if (mavenVersion == null) {
+				if (oldName != null) {
 					save = true;
 				}
-				if (save) {
-					item.setMaven(maven);
-					try {
-						item.save();
-						return true;
-					} catch (IOException e) {
-						return false;
-					}
+			} else if (!mavenVersion.equals(oldName)) {
+				save = true;
+			}
+			if (save) {
+				item.setMaven(mavenVersion);
+				try {
+					item.save();
+					return true;
+				} catch (IOException e) {
+					return false;
 				}
 			}
 			return false;

Reply via email to