Initial commit
Add jenkins configuration for sandbox

Change-Id: I117fecfe3af0b14ea4aac7db3211bc3517caf56b
Related-PROD: RE-336
diff --git a/scripted.groovy b/scripted.groovy
new file mode 100644
index 0000000..8815e73
--- /dev/null
+++ b/scripted.groovy
@@ -0,0 +1,158 @@
+#!groovy
+@Grab('org.yaml:snakeyaml:1.17')
+import jenkins.model.Jenkins;
+import jenkins.model.GlobalConfiguration
+import net.sf.json.JSONArray;
+import net.sf.json.JSONObject
+import org.yaml.snakeyaml.Yaml
+import io.jenkins.plugins.casc.ConfigurationAsCode
+import jenkins.security.UpdateSiteWarningsConfiguration
+
+Yaml parser = new Yaml()
+
+def casc = ConfigurationAsCode.get()
+def configPath = casc.getStandardConfig()[0]
+def symlFiles = new FileNameFinder().getFileNames(configPath, '**/*.syml', '.**/ **/.*')
+def configs = []
+symlFiles.each {
+    configs = configs + parser.load((it as File).text)
+}
+
+class Globals {
+    public static Boolean compareObjects( Object a, b) {
+        return Jenkins.XSTREAM.toXML(a) == Jenkins.XSTREAM.toXML(b)
+    }
+}
+
+class UpdateSiteWarnings {
+    UpdateSiteWarnings() {}
+    Boolean changed = false
+    def instance = Jenkins.instance
+    void configure(params) {
+        def config = GlobalConfiguration.all().get(UpdateSiteWarningsConfiguration.class)
+        def _config = new UpdateSiteWarningsConfiguration()
+
+        _config.configure(null, JSONObject.fromObject(params))
+        if (! Globals.compareObjects(config, _config)) {
+            config.configure(null, JSONObject.fromObject(params))
+            changed = true
+        }
+        _config = null
+    }
+}
+
+class CSP {
+    CSP() {}
+    Boolean changed = false
+    def instance = Jenkins.instance
+    void configure(param) {
+        String currentPolicy = System.getProperty("hudson.model.DirectoryBrowserSupport.CSP")
+        String newPolicy = param.policy.trim()
+        if ( currentPolicy != newPolicy ){
+            System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", newPolicy)
+            changed = true
+        }
+    }
+}
+
+class GerritTrigger {
+    GerritTrigger() {}
+
+    def instance = Jenkins.instance
+    Boolean changed = false
+    def defaultServerParam = [
+        noConnectionOnStartup: false,
+        gerritBuildStartedVerifiedValue: 0,
+        gerritBuildSuccessfulVerifiedValue: 1,
+        gerritBuildFailedVerifiedValue: -1,
+        gerritBuildUnstableVerifiedValue: 0,
+        gerritBuildNotBuiltVerifiedValue: 0,
+        gerritBuildStartedCodeReviewValue: 0,
+        gerritBuildSuccessfulCodeReviewValue: 0,
+        gerritBuildFailedCodeReviewValue: 0,
+        gerritBuildUnstableCodeReviewValue: -1,
+        gerritBuildNotBuiltCodeReviewValue: 0,
+        gerritVerifiedCmdBuildStarted:
+            "gerrit review <CHANGE>,<PATCHSET> --message 'Build Started <BUILDURL> <STARTED_STATS>' --verified <VERIFIED> --code-review <CODE_REVIEW>",
+        gerritVerifiedCmdBuildSuccessful:
+            "gerrit review <CHANGE>,<PATCHSET> --message 'Build Successful <BUILDS_STATS>' --verified <VERIFIED> --code-review <CODE_REVIEW>",
+        gerritVerifiedCmdBuildFailed:
+            "gerrit review <CHANGE>,<PATCHSET> --message 'Build Failed <BUILDS_STATS>' --verified <VERIFIED> --code-review <CODE_REVIEW>",
+        gerritVerifiedCmdBuildUnstable:
+            "gerrit review <CHANGE>,<PATCHSET> --message 'Build Unstable <BUILDS_STATS>' --verified <VERIFIED> --code-review <CODE_REVIEW>",
+        gerritVerifiedCmdBuildNotBuilt:
+            "gerrit review <CHANGE>,<PATCHSET> --message 'No Builds Executed <BUILDS_STATS>' --verified <VERIFIED> --code-review <CODE_REVIEW>",
+        verdictCategories: [
+            [ verdictValue: 'Code-Review', verdictDescription: 'Code Review' ],
+            [ verdictValue: 'Verified', verdictDescription: 'Verified' ],
+        ]
+    ]
+
+    Boolean compareObjects( Object a, b) {
+        String aXML = Jenkins.XSTREAM.toXML(a).replaceAll(/\{AQA[^\}]+\}/) {
+                          hudson.util.Secret.decrypt(it) }
+        String bXML = Jenkins.XSTREAM.toXML(b).replaceAll(/\{AQA[^\}]+\}/) {
+                          hudson.util.Secret.decrypt(it) }
+        return aXML == bXML
+    }
+
+    void configure(params) {
+        if ( Jenkins.instance.pluginManager.activePlugins.find { it.shortName == "gerrit-trigger" } == null ) {
+            return
+        }
+        def gerritPlugin = Jenkins.instance.getPlugin(com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl.class);
+
+        // Configure common parameters
+        def pluginConfig = gerritPlugin.getPluginConfig()
+        def _pluginConfig = new com.sonyericsson.hudson.plugins.gerrit.trigger.config.PluginConfig()
+
+        _pluginConfig.setValues(JSONArray.fromObject(params))
+        if (! compareObjects(pluginConfig, _pluginConfig)) {
+            pluginConfig.setValues(JSONArray.fromObject(params))
+            changed = true
+        }
+        _pluginConfig = null
+
+        // Configure servers
+        params.servers.each { _name, _params ->
+            def __params = defaultServerParam + _params
+            def values = JSONArray.fromObject(__params)
+            def server = gerritPlugin.getServer(_name)
+
+            if (! server) {
+                server = new com.sonyericsson.hudson.plugins.gerrit.trigger.GerritServer(
+                    _name, __params.noConnectionOnStartup)
+            }
+            def config = server.getConfig()
+            def _server = new com.sonyericsson.hudson.plugins.gerrit.trigger.GerritServer(
+                _name, __params.noConnectionOnStartup)
+            def _config = _server.getConfig()
+            _config.setValues(values)
+            _server.setConfig(_config)
+            if (! compareObjects(server, _server)) {
+                changed = true
+                if ( gerritPlugin.containsServer(_name) ) {
+                    gerritPlugin.removeServer(gerritPlugin.getServer(_name))
+                }
+                gerritPlugin.addServer(_server)
+                _server.start()
+                if (! __params.noConnectionOnStartup) {
+                    _server.startConnection()
+                }
+            }
+        }
+    }
+}
+
+configs.each { params ->
+    params.each { _name, _params ->
+        def clazz = Class.forName(_name)
+        if (clazz) {
+            def act = clazz.newInstance()
+            act.configure(_params)
+            if (act.changed) {
+                act.instance.save()
+            }
+        }
+    }
+}