package hudson.plugins.groovy;
import hudson.model.Descriptor;
import hudson.tasks.Builder;
import hudson.util.DescriptorList;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest;
/**
* Shared functionality for Groovy builders
* (nothing but script sources at the moment)
*
* @author dvrzalik
*/
public abstract class AbstractGroovy extends Builder {
public ScriptSource scriptSource;
public AbstractGroovy(ScriptSource scriptSource) {
this.scriptSource = scriptSource;
}
public static abstract class AbstractGroovyDescriptor extends Descriptor<Builder> {
public AbstractGroovyDescriptor(Class<? extends Builder> clazz) {
super(clazz);
}
/**
* Exctrats ScriptSource from given form data
*/
protected ScriptSource getScriptSource(StaplerRequest req, JSONObject data) throws FormException {
Object scriptSourceObject = data.get("scriptSource");
if (scriptSourceObject instanceof JSONArray) {
//Dunno why this happens. Let's fix the JSON object so that newInstanceFromRadioList() doesn't go mad.
JSONArray scriptSourceJSONArray = (JSONArray) scriptSourceObject;
JSONObject scriptSourceJSONObject = new JSONObject();
Object nestedObject = scriptSourceJSONArray.get(1);
if (nestedObject instanceof JSONObject) {
//command/file path
scriptSourceJSONObject.putAll((JSONObject) nestedObject);
//selected radio button index
scriptSourceJSONObject.put("value", scriptSourceJSONArray.get(0));
data.put("scriptSource", scriptSourceJSONObject);
}
}
return ScriptSource.SOURCES.newInstanceFromRadioList(data, "scriptSource");
}
//shortcut
public static DescriptorList<ScriptSource> getScriptSources() {
return ScriptSource.SOURCES;
}
//Used for grouping radio buttons together
private AtomicInteger instanceCounter = new AtomicInteger(0);
public int nextInstanceID() {
return instanceCounter.incrementAndGet();
}
}
public ScriptSource getScriptSource() {
return scriptSource;
}
/**
* @return Parsed properties. Never null.
* @throws java.io.IOException
*/
public static Properties parseProperties(String properties) throws IOException {
Properties props = new Properties();
if (properties != null) {
try {
props.load(new StringReader(properties));
} catch (NoSuchMethodError err) {
props.load(new ByteArrayInputStream(properties.getBytes()));
}
}
return props;
}
}