Title: [40586] trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing: second pass at parameters

Diff

Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlice.java (40585 => 40586)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlice.java	2012-05-21 21:58:44 UTC (rev 40585)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlice.java	2012-05-22 02:22:51 UTC (rev 40586)
@@ -34,6 +34,7 @@
         	String value = configurationValues.get(i);
         	String namesString = itemNames.get(i);
         	String[] namesSplit = namesString.split("\\n");
+        	List<I> workDomain = spec.getWorkDomain();
             for(String itemName : namesSplit) {
             	itemName = itemName.trim();
             	if (itemName.length() > 0) {
@@ -42,8 +43,9 @@
 	                	int bracket = itemName.indexOf('[');
 	                	if (bracket > 0) {
 	                		String indexString = itemName.substring(bracket + 1, itemName.length() - 1);
-	                		index = Integer.parseInt(indexString);
 	                		itemName = itemName.substring(0, bracket);
+	                		I item = getItem(itemName, workDomain);
+	                		index = spec.getValueIndex(item, indexString);
 	                	}
             		}
             		addLine(nameToValues, itemName, value.trim(), index);
@@ -51,6 +53,14 @@
             }
         }
     }
+    public I getItem(String name, List<I> workDomain) {
+    	for (I item: workDomain) {
+    		if (name.equals(spec.getName(item))) {
+    			return item;
+    		}
+    	}
+    	throw new IllegalArgumentException(name);
+    }
     
     public UnorderedStringSlice(UnorderedStringSlicerSpec<I> spec) {
         valueToNames=new HashMap<String, Set<String>>();

Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlicer.java (40585 => 40586)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlicer.java	2012-05-21 21:58:44 UTC (rev 40585)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/UnorderedStringSlicer.java	2012-05-22 02:22:51 UTC (rev 40586)
@@ -27,6 +27,12 @@
         public boolean isMultipleItemsAllowed() {
         	return false;
         }
+        public String getValueIndex(I item, int index) {
+        	return String.valueOf(index);
+        }
+        public int getValueIndex(I item, String indexName) {
+        	return Integer.parseInt(indexName);
+        }
     }
 
     private UnorderedStringSlicerSpec<I> spec;
@@ -44,12 +50,11 @@
     public UnorderedStringSlice<I> accumulate(UnorderedStringSlice<I> t, I item) {
     	String name = spec.getName(item);
     	List<String> values = spec.getValues(item);
-    	// TODO This pattern doesn't work for parameters
     	if (values.size() > 1 && spec.isMultipleItemsAllowed()) {
 	    	for (int i = 0; i < values.size(); i++) {
 	    		List<String> _oneValueList_ = new ArrayList<String>();
 	    		oneValueList.add(values.get(i));
-	    		String valueIndex = getValueIndex(item, i);
+	    		String valueIndex = spec.getValueIndex(item, i);
 	    		String _oneName_ = name + "[" + valueIndex + "]";
 	    		t.add(oneName, oneValueList);
 	    	}
@@ -58,9 +63,6 @@
     	}
         return t;
     }
-    protected String getValueIndex(I item, int index) {
-    	return String.valueOf(index);
-    }
     public boolean transform(UnorderedStringSlice<I> t, I i) {
     	List<String> set = t.get(spec.getName(i));
     	if (set == null) {

Deleted: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/JobParameter.java (40585 => 40586)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/JobParameter.java	2012-05-21 21:58:44 UTC (rev 40585)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/JobParameter.java	2012-05-22 02:22:51 UTC (rev 40586)
@@ -1,30 +0,0 @@
-package configurationslicing.parameters;
-
-import hudson.model.Job;
-
-public class JobParameter {
-
-	@SuppressWarnings("unchecked")
-	private Job job;
-	private String parameterName;
-	private String parameterValue;
-	
-	@SuppressWarnings("unchecked")
-	public JobParameter(Job job, String parameterName, String parameterValue) {
-		this.job = job;
-		this.parameterName = parameterName;
-		this.parameterValue = parameterValue;
-	}
-
-	@SuppressWarnings("unchecked")
-	public Job getJob() {
-		return job;
-	}
-	public String getParameterName() {
-		return parameterName;
-	}
-	public String getParameterValue() {
-		return parameterValue;
-	}
-	
-}

Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/ParametersSlicer.java (40585 => 40586)


--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/ParametersSlicer.java	2012-05-21 21:58:44 UTC (rev 40585)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/parameters/ParametersSlicer.java	2012-05-22 02:22:51 UTC (rev 40586)
@@ -1,17 +1,17 @@
 package configurationslicing.parameters;
 
 import hudson.Extension;
+import hudson.model.ParameterValue;
 import hudson.model.BooleanParameterDefinition;
 import hudson.model.BooleanParameterValue;
-import hudson.model.ChoiceParameterDefinition;
 import hudson.model.Hudson;
 import hudson.model.Job;
 import hudson.model.ParameterDefinition;
-import hudson.model.ParameterValue;
 import hudson.model.ParametersDefinitionProperty;
 import hudson.model.StringParameterDefinition;
 import hudson.model.StringParameterValue;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -23,13 +23,13 @@
  */
 @SuppressWarnings("unchecked")
 @Extension
-public class ParametersSlicer extends UnorderedStringSlicer<JobParameter> {
+public class ParametersSlicer extends UnorderedStringSlicer<Job> {
 
     public ParametersSlicer() {
         super(new ParametersSliceSpec());
     }
 
-    public static class ParametersSliceSpec extends UnorderedStringSlicerSpec<JobParameter> {
+    public static class ParametersSliceSpec extends UnorderedStringSlicerSpec<Job> {
 
         public String getName() {
             return "Parameters";
@@ -46,39 +46,111 @@
             return "";
         }
 
-        public String getName(JobParameter item) {
-            return item.getJob().getName();
+        public String getName(Job item) {
+            return item.getName();
         }
 
         @Override
         public boolean isMultipleItemsAllowed() {
         	return true;
         }
+        @Override
+        public String getValueIndex(Job item, int index) {
+        	List<ParameterItem> pitems = getParameterItems(item);
+        	return pitems.get(index).name;
+        }
+        @Override
+        public int getValueIndex(Job item, String indexName) {
+        	List<ParameterItem> pitems = getParameterItems(item);
+        	for (ParameterItem pitem: pitems) {
+        		if (pitem.name.equals(indexName)) {
+        			return pitem.index;
+        		}
+        	}
+        	// this will happen if the user sets a param name that is not valid
+        	throw new IllegalArgumentException(indexName);
+        }
         
-        public List<String> getValues(JobParameter item) {
-            List<String> content = new ArrayList<String>();
-            content.add(item.getParameterValue());
-            return content;
+        public List<String> getValues(Job item) {
+        	List<String> values = new ArrayList<String>();
+        	List<ParameterItem> pitems = getParameterItems(item);
+        	for (ParameterItem pitem: pitems) {
+        		values.add(pitem.value);
+    		}
+            return values;
         }
-
-        public List<JobParameter> getWorkDomain() {
-        	List<Job> jobs = Hudson.getInstance().getItems(Job.class);
-        	List<JobParameter> params = new ArrayList<JobParameter>();
-        	for (Job job: jobs) {
-        		ParametersDefinitionProperty prop = (ParametersDefinitionProperty) job.getProperty(ParametersDefinitionProperty.class);
-        		if (prop != null) {
-	        		for (ParameterDefinition def: prop.getParameterDefinitions()) {
-	        			if (isSliceableProperty(def)) {
-	        				ParameterValue value = def.getDefaultParameterValue();
-	        				String stringValue = toStringValue(value);
-	        				JobParameter param = new JobParameter(job, def.getName(), stringValue);
-	        				params.add(param);
-	        			}
-	        		}
+        public boolean setValues(Job item, List<String> list) {
+            ParametersDefinitionProperty prop = (ParametersDefinitionProperty) item.getProperty(ParametersDefinitionProperty.class);
+            List<ParameterDefinition> defs = prop.getParameterDefinitions();
+        	List<ParameterItem> pitems = getParameterItems(item);
+    		if (prop != null) {
+    			boolean changes = false;
+    			for (int i = 0; i < list.size(); i++) {
+    				ParameterItem pitem = pitems.get(i);
+    				String newValue = list.get(i);
+					String oldValue = pitem.value;
+					if (!newValue.equals(oldValue)) {
+						replace(pitem, defs);
+						changes = true;
+					}
+				}
+    			if (changes) {
+    				try {
+						item.save();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+    			}
+    		}
+        	return true;
+        }
+        private void replace(ParameterItem item, List<ParameterDefinition> defs) {
+        	for (int i = 0; i < defs.size(); i++) {
+        		ParameterDefinition def = defs.get(i);
+        		if (def.getName().equals(item.name)) {
+        			ParameterDefinition newDef = newParameterDefinition(item, def);
+        			defs.set(i, newDef);
         		}
+			}
+        }
+        private ParameterDefinition newParameterDefinition(ParameterItem item, ParameterDefinition old) {
+        	if (old instanceof StringParameterDefinition) {
+        		return new StringParameterDefinition(item.name, item.value, old.getDescription());
+        	} else if (old instanceof BooleanParameterDefinition) {
+        		return new BooleanParameterDefinition(item.name, Boolean.parseBoolean(item.value), old.getDescription());
+//        	} else if (old instanceof ChoiceParameterDefinition) {
+//        		return new ChoiceParameterDefinition(item.name, choices, old.getDescription());
         	}
-        	return params;
+        	return null;
         }
+        private List<ParameterItem> getParameterItems(Job item) {
+            List<ParameterItem> items = new ArrayList<ParameterItem>();
+            ParametersDefinitionProperty prop = (ParametersDefinitionProperty) item.getProperty(ParametersDefinitionProperty.class);
+    		if (prop != null) {
+    			int count = 0;
+        		for (ParameterDefinition def: prop.getParameterDefinitions()) {
+        			if (isSliceableProperty(def)) {
+        				ParameterValue value = def.getDefaultParameterValue();
+        				String stringValue = toStringValue(value);
+        				ParameterItem pitem = new ParameterItem();
+        				pitem.index = count++;
+        				pitem.value = stringValue;
+        				pitem.name = value.getName();
+        				items.add(pitem);
+        			}
+        		}
+    		}
+            return items;
+        }
+        private static class ParameterItem {
+        	String name;
+        	String value;
+        	int index;
+        }
+        public List<Job> getWorkDomain() {
+        	List<Job> jobs = Hudson.getInstance().getItems(Job.class);
+        	return jobs;
+        }
         
         public String toStringValue(ParameterValue value) {
         	if (value instanceof BooleanParameterValue) {
@@ -93,17 +165,11 @@
         public boolean isSliceableProperty(ParameterDefinition def) {
         	return (def instanceof BooleanParameterDefinition
         			|| def instanceof StringParameterDefinition
-        			|| def instanceof ChoiceParameterDefinition
+//        			|| def instanceof ChoiceParameterDefinition
         			);
         }
         
-        public boolean setValues(JobParameter item, List<String> list) {
-        	return true;
-        }
     }
-    protected String getValueIndex(JobParameter item, int index) {
-    	return item.getParameterName();
-    }
 
 }
 

Reply via email to