Diff
Added: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java (0 => 40576)
--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java (rev 0)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java 2012-05-18 20:10:20 UTC (rev 40576)
@@ -0,0 +1,165 @@
+package configurationslicing.executeshell;
+
+import hudson.matrix.MatrixProject;
+import hudson.model.AbstractProject;
+import hudson.model.Descriptor;
+import hudson.model.Hudson;
+import hudson.model.Project;
+import hudson.tasks.Builder;
+import hudson.util.DescribableList;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import configurationslicing.UnorderedStringSlicer;
+
+/**
+ * @author Jacob Robertson
+ */
+public abstract class AbstractBuildCommandSlicer<B extends Builder> extends UnorderedStringSlicer<AbstractProject<?,?>> {
+
+ public AbstractBuildCommandSlicer(AbstractBuildCommandSliceSpec<B> spec) {
+ super(spec);
+ }
+
+ public static abstract class AbstractBuildCommandSliceSpec<B extends Builder> extends UnorderedStringSlicerSpec<AbstractProject<?,?>> {
+
+ public static final String NOTHING = "(nothing)";
+
+ public String getDefaultValueString() {
+ return NOTHING;
+ }
+
+ public String getName(AbstractProject<?, ?> item) {
+ return item.getName();
+ }
+
+ @Override
+ public boolean isMultipleItemsAllowed() {
+ return true;
+ }
+
+ public List<String> getValues(AbstractProject<?, ?> item) {
+ List<String> content = new ArrayList<String>();
+ DescribableList<Builder,Descriptor<Builder>> buildersList = getBuildersList(item);
+
+ List<B> builders = getConcreteBuildersList(buildersList);
+ for (B builder: builders) {
+ content.add(getCommand(builder));
+ }
+ if (content.isEmpty()) {
+ content.add(NOTHING);
+ }
+
+ return content;
+ }
+ public abstract List<B> getConcreteBuildersList(DescribableList<Builder,Descriptor<Builder>> buildersList);
+ public abstract String getCommand(B builder);
+
+ @SuppressWarnings("unchecked")
+ public List<AbstractProject<?, ?>> getWorkDomain() {
+ List<AbstractProject<?, ?>> list = new ArrayList<AbstractProject<?, ?>>();
+ List<AbstractProject> temp = Hudson.getInstance().getItems(AbstractProject.class);
+ for (AbstractProject p: temp) {
+ if (p instanceof Project || p instanceof MatrixProject) {
+ list.add(p);
+ }
+ }
+ return list;
+ }
+
+ @SuppressWarnings("unchecked")
+ private DescribableList<Builder,Descriptor<Builder>> getBuildersList(AbstractProject<?, ?> item) {
+ if (item instanceof Project) {
+ return ((Project) item).getBuildersList();
+ } else if (item instanceof MatrixProject) {
+ return ((MatrixProject) item).getBuildersList();
+ } else {
+ return null;
+ }
+ }
+ public abstract B[] createBuilderArray(int len);
+ public abstract B createBuilder(String command);
+
+ public boolean setValues(AbstractProject<?, ?> item, List<String> list) {
+ DescribableList<Builder,Descriptor<Builder>> buildersList = getBuildersList(item);
+ List<B> builders = getConcreteBuildersList(buildersList);
+
+ int maxLen = Math.max(list.size(), builders.size());
+ B[] oldBuilders = createBuilderArray(maxLen);
+ B[] newBuilders = createBuilderArray(maxLen);
+
+ for (int i = 0; i < builders.size(); i++) {
+ oldBuilders[i] = builders.get(i);
+ }
+
+ for (int i = 0; i < list.size(); i++) {
+ String command = list.get(i);
+ if(!command.equals(NOTHING) && !command.equals("")) {
+ if (oldBuilders[i] != null && getCommand(oldBuilders[i]).equals(command)) {
+ newBuilders[i] = oldBuilders[i];
+ } else {
+ newBuilders[i] = createBuilder(command);
+ }
+ }
+ }
+
+ // perform any replacements
+ for (int i = 0; i < maxLen; i++) {
+ if (oldBuilders[i] != null && newBuilders[i] != null && oldBuilders[i] != newBuilders[i]) {
+ replaceBuilder(buildersList, oldBuilders[i], newBuilders[i]);
+ }
+ }
+
+ // add any new ones (should always add to the end, but might not if the original command was empty)
+ for (int i = 0; i < maxLen; i++) {
+ if (oldBuilders[i] == null && newBuilders[i] != null) {
+ try {
+ buildersList.add(newBuilders[i]);
+ } catch(java.io.IOException e) {
+ System.err.println("IOException Thrown add builder value");
+ return false;
+ }
+ }
+ }
+
+ // delete any old ones
+ for (int i = 0; i < maxLen; i++) {
+ if (oldBuilders[i] != null && newBuilders[i] == null) {
+ try {
+ // the remove command will persist the project
+ buildersList.remove(oldBuilders[i]);
+ } catch(java.io.IOException e) {
+ System.err.println("IOException Thrown removing builder value");
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * 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) {
+ List<Builder> newList = new ArrayList<Builder>(builders.toList());
+ for (int i = 0; i < newList.size(); i++) {
+ Builder b = newList.get(i);
+ if (b == oldBuilder) {
+ newList.set(i, newBuilder);
+ }
+ }
+ try {
+ builders.replaceBy(newList);
+ return true;
+ } catch(java.io.IOException e) {
+ System.err.println("IOException Thrown replacing builder list");
+ return false;
+ }
+ }
+ }
+}
+
Property changes on: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/AbstractBuildCommandSlicer.java
___________________________________________________________________
Added: svn:mime-type
Modified: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteShellSlicer.java (40575 => 40576)
--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteShellSlicer.java 2012-05-18 20:09:52 UTC (rev 40575)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteShellSlicer.java 2012-05-18 20:10:20 UTC (rev 40576)
@@ -1,174 +1,52 @@
package configurationslicing.executeshell;
import hudson.Extension;
-import hudson.matrix.MatrixProject;
-import hudson.model.AbstractProject;
import hudson.model.Descriptor;
-import hudson.model.Hudson;
-import hudson.model.Project;
import hudson.tasks.Builder;
import hudson.tasks.Shell;
import hudson.util.DescribableList;
-import java.io.IOException;
-import java.util.ArrayList;
import java.util.List;
-import configurationslicing.UnorderedStringSlicer;
-
/**
* Slicer for the shell builder
*
- * @author Victor Garcia <bravejo...@gmail.com> <vic...@tuenti.com>
+ * @author Victor Garcia <bravejo...@gmail.com> <vic...@tuenti.com>, Jacob Robertson
*/
@Extension
-public class ExecuteShellSlicer extends UnorderedStringSlicer<AbstractProject<?,?>>{
+public class ExecuteShellSlicer extends AbstractBuildCommandSlicer<Shell> {
public ExecuteShellSlicer() {
super(new ExecuteShellSliceSpec());
}
- public static class ExecuteShellSliceSpec extends UnorderedStringSlicerSpec<AbstractProject<?,?>> {
+ public static class ExecuteShellSliceSpec extends AbstractBuildCommandSliceSpec<Shell> {
- public static final String NOTHING = "(nothing)";
-
- public String getDefaultValueString() {
- return NOTHING;
- }
-
public String getName() {
return "Execute shell slicer";
}
- public String getName(AbstractProject<?, ?> item) {
- return item.getName();
- }
-
public String getUrl() {
return "executeshellslicestring";
}
-
@Override
- public boolean isMultipleItemsAllowed() {
- return true;
+ public Shell createBuilder(String command) {
+ return new Shell(command);
}
-
- public List<String> getValues(AbstractProject<?, ?> item) {
- List<String> shellContent = new ArrayList<String>();
- DescribableList<Builder,Descriptor<Builder>> buildersList = getBuildersList(item);
-
- List<Shell> shells = buildersList.getAll(Shell.class);
- for (Shell shell: shells) {
- shellContent.add(shell.getCommand());
- }
- if (shellContent.isEmpty()) {
- shellContent.add(NOTHING);
- }
-
- return shellContent;
+ @Override
+ public Shell[] createBuilderArray(int len) {
+ return new Shell[len];
}
-
- @SuppressWarnings("unchecked")
- public List<AbstractProject<?, ?>> getWorkDomain() {
- List<AbstractProject<?, ?>> list = new ArrayList<AbstractProject<?, ?>>();
- List<AbstractProject> temp = Hudson.getInstance().getItems(AbstractProject.class);
- for (AbstractProject p: temp) {
- if (p instanceof Project || p instanceof MatrixProject) {
- list.add(p);
- }
- }
- return list;
+ @Override
+ public String getCommand(Shell builder) {
+ return builder.getCommand();
}
-
- @SuppressWarnings("unchecked")
- private DescribableList<Builder,Descriptor<Builder>> getBuildersList(AbstractProject<?, ?> item) {
- if (item instanceof Project) {
- return ((Project) item).getBuildersList();
- } else if (item instanceof MatrixProject) {
- return ((MatrixProject) item).getBuildersList();
- } else {
- return null;
- }
+ @Override
+ public List<Shell> getConcreteBuildersList(
+ DescribableList<Builder, Descriptor<Builder>> buildersList) {
+ return buildersList.getAll(Shell.class);
}
- public boolean setValues(AbstractProject<?, ?> item, List<String> list) {
- DescribableList<Builder,Descriptor<Builder>> buildersList = getBuildersList(item);
- List<Shell> shells = buildersList.getAll(Shell.class);
-
- int maxLen = Math.max(list.size(), shells.size());
- Shell[] oldShells = new Shell[maxLen];
- Shell[] newShells = new Shell[maxLen];
-
- for (int i = 0; i < shells.size(); i++) {
- oldShells[i] = shells.get(i);
- }
-
- for (int i = 0; i < list.size(); i++) {
- String command = list.get(i);
- if(!command.equals(NOTHING) && !command.equals("")) {
- if (oldShells[i] != null && oldShells[i].getCommand().equals(command)) {
- newShells[i] = oldShells[i];
- } else {
- newShells[i] = new Shell(command);
- }
- }
- }
-
- // perform any replacements
- for (int i = 0; i < maxLen; i++) {
- if (oldShells[i] != null && newShells[i] != null && oldShells[i] != newShells[i]) {
- replaceBuilder(buildersList, oldShells[i], newShells[i]);
- }
- }
-
- // add any new ones (should always add to the end, but might not if the original command was empty)
- for (int i = 0; i < maxLen; i++) {
- if (oldShells[i] == null && newShells[i] != null) {
- try {
- buildersList.add(newShells[i]);
- } catch(java.io.IOException e) {
- System.err.println("IOException Thrown add builder value");
- return false;
- }
- }
- }
-
- // delete any old ones
- for (int i = 0; i < maxLen; i++) {
- if (oldShells[i] != null && newShells[i] == null) {
- try {
- // the remove command will persist the project
- buildersList.remove(oldShells[i]);
- } catch(java.io.IOException e) {
- System.err.println("IOException Thrown removing shell value");
- return false;
- }
- }
- }
-
- return true;
- }
-
- /**
- * 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) {
- List<Builder> newList = new ArrayList<Builder>(builders.toList());
- for (int i = 0; i < newList.size(); i++) {
- Builder b = newList.get(i);
- if (b == oldBuilder) {
- newList.set(i, newBuilder);
- }
- }
- try {
- builders.replaceBy(newList);
- return true;
- } catch(java.io.IOException e) {
- System.err.println("IOException Thrown replacing builder list");
- return false;
- }
- }
}
}
Added: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteWindowsBatchSlicer.java (0 => 40576)
--- trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteWindowsBatchSlicer.java (rev 0)
+++ trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteWindowsBatchSlicer.java 2012-05-18 20:10:20 UTC (rev 40576)
@@ -0,0 +1,52 @@
+package configurationslicing.executeshell;
+
+import hudson.Extension;
+import hudson.model.Descriptor;
+import hudson.tasks.BatchFile;
+import hudson.tasks.Builder;
+import hudson.util.DescribableList;
+
+import java.util.List;
+
+/**
+ * Slicer for the windows batch builder
+ *
+ * @author Jacob Robertson
+ */
+@Extension
+public class ExecuteWindowsBatchSlicer extends AbstractBuildCommandSlicer<BatchFile> {
+
+ public ExecuteWindowsBatchSlicer() {
+ super(new ExecuteWindowsBatchSliceSpec());
+ }
+
+ public static class ExecuteWindowsBatchSliceSpec extends AbstractBuildCommandSliceSpec<BatchFile> {
+
+ public String getName() {
+ return "Execute Windows batch command slicer";
+ }
+
+ public String getUrl() {
+ return "windowsbatchslice";
+ }
+ @Override
+ public BatchFile createBuilder(String command) {
+ return new BatchFile(command);
+ }
+ @Override
+ public BatchFile[] createBuilderArray(int len) {
+ return new BatchFile[len];
+ }
+ @Override
+ public String getCommand(BatchFile builder) {
+ return builder.getCommand();
+ }
+ @Override
+ public List<BatchFile> getConcreteBuildersList(
+ DescribableList<Builder, Descriptor<Builder>> buildersList) {
+ return buildersList.getAll(BatchFile.class);
+ }
+
+ }
+}
+
Property changes on: trunk/hudson/plugins/configurationslicing/src/main/java/configurationslicing/executeshell/ExecuteWindowsBatchSlicer.java
___________________________________________________________________
Added: svn:mime-type