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();
- }
}