diff --git a/build-config/swe_checkstyle.xml b/build-config/swe_checkstyle.xml index 95eb7e2c9..fa0d35c96 100644 --- a/build-config/swe_checkstyle.xml +++ b/build-config/swe_checkstyle.xml @@ -11,7 +11,7 @@ - + @@ -43,7 +43,7 @@ - + @@ -74,7 +74,6 @@ - @@ -82,7 +81,6 @@ - diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer.java index fd438c212..d75a82648 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer.java @@ -432,8 +432,8 @@ public void start() { categories = new LinkedList(); } if (categories.isEmpty()) { - categories.add(new VerdictCategory("Code-Review", "Code Review")); - categories.add(new VerdictCategory("Verified", "Verified")); + categories.add(new VerdictCategory(Config.CODE_REVIEW, Config.CODE_REVIEW)); + categories.add(new VerdictCategory(Config.VERIFIED, Config.VERIFIED)); } config.setCategories(categories); gerritEventManager = PluginImpl.getHandler_(); diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/VerdictCategory.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/VerdictCategory.java index 097e7ef1e..7e6ba3fe4 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/VerdictCategory.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/VerdictCategory.java @@ -23,10 +23,12 @@ */ package com.sonyericsson.hudson.plugins.gerrit.trigger; +import java.util.Objects; import hudson.Extension; import hudson.model.AbstractDescribableImpl; import hudson.model.Descriptor; import net.sf.json.JSONObject; +import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config; /** * A verdict category for setting comments in Gerrit, i.e. code-review, verify @@ -36,15 +38,78 @@ public class VerdictCategory extends AbstractDescribableImpl { private String verdictValue; private String verdictDescription; + private Integer defaultBuildStartedReportingValue; + private Integer defaultBuildSuccessfulReportingValue; + private Integer defaultBuildFailedReportingValue; + private Integer defaultBuildUnstableReportingValue; + private Integer defaultBuildNotBuiltReportingValue; /** * Standard constructor. + * * @param value the value in Gerrit for the verdict category. * @param description the text describing the verdict category. */ public VerdictCategory(String value, String description) { verdictValue = value; verdictDescription = description; + defaultBuildStartedReportingValue = 0; + defaultBuildSuccessfulReportingValue = 0; + defaultBuildFailedReportingValue = 0; + defaultBuildUnstableReportingValue = 0; + defaultBuildNotBuiltReportingValue = 0; + } + + /** + * Standard constructor with custom reporting votes. + * + * @param verdictValue name of VerdictCategory. + * @param verdictDescription description of VerdictCategory. + * @param defaultBuildStartedReportingValue Default build started vote value of VerdictCategory + * @param defaultBuildSuccessfulReportingValue Default build successful vote value of VerdictCategory + * @param defaultBuildFailedReportingValue Default build failed vote value of VerdictCategory + * @param defaultBuildUnstableReportingValue Default build unstable vote value of VerdictCategory + * @param defaultBuildNotBuiltReportingValue Default build not built vote value of VerdictCategory + */ + public VerdictCategory(String verdictValue, String verdictDescription, + Integer defaultBuildStartedReportingValue, + Integer defaultBuildSuccessfulReportingValue, + Integer defaultBuildFailedReportingValue, + Integer defaultBuildUnstableReportingValue, + Integer defaultBuildNotBuiltReportingValue) { + this.verdictValue = verdictValue; + this.verdictDescription = verdictDescription; + this.defaultBuildStartedReportingValue = defaultBuildStartedReportingValue; + this.defaultBuildSuccessfulReportingValue = defaultBuildSuccessfulReportingValue; + this.defaultBuildFailedReportingValue = defaultBuildFailedReportingValue; + this.defaultBuildUnstableReportingValue = defaultBuildUnstableReportingValue; + this.defaultBuildNotBuiltReportingValue = defaultBuildNotBuiltReportingValue; + } + + /** + * Creates a VerdictCategory from a JSONObject. + * + * @param obj the JSONObject. + * @param topLevelObj the outer JSONObject. + * @return a VerdictCategory. + */ + public static VerdictCategory fromJSON(JSONObject obj, JSONObject topLevelObj) { + String value = obj.getString("verdictValue"); + String description = obj.getString("verdictDescription"); + Integer defaultBuildStartedReportingValue = topLevelObj.containsKey(value + "Started") + ? Config.getIntegerFromString(topLevelObj.getString(value + "Started")) : null; + Integer defaultBuildSuccessfulReportingValue = topLevelObj.containsKey(value + "Successful") + ? Config.getIntegerFromString(topLevelObj.getString(value + "Successful")) : null; + Integer defaultBuildFailedReportingValue = topLevelObj.containsKey(value + "Failed") + ? Config.getIntegerFromString(topLevelObj.getString(value + "Failed")) : null; + Integer defaultBuildUnstableReportingValue = topLevelObj.containsKey(value + "Unstable") + ? Config.getIntegerFromString(topLevelObj.getString(value + "Unstable")) : null; + Integer defaultBuildNotBuiltReportingValue = topLevelObj.containsKey(value + "Not Built") + ? Config.getIntegerFromString(topLevelObj.getString(value + "Not Built")) : null; + + return new VerdictCategory(value, description, defaultBuildStartedReportingValue, + defaultBuildSuccessfulReportingValue, defaultBuildFailedReportingValue, + defaultBuildUnstableReportingValue, defaultBuildNotBuiltReportingValue); } /** @@ -64,14 +129,118 @@ public String getVerdictDescription() { } /** - * Creates a VerdictCategory from a JSONObject. - * @param obj the JSONObject. - * @return a VerdictCategory. + * Standard getter for the build started reporting value. + * + * @return the description. */ - public static VerdictCategory createVerdictCategoryFromJSON(JSONObject obj) { - String value = obj.getString("verdictValue"); - String description = obj.getString("verdictDescription"); - return new VerdictCategory(value, description); + public Integer getDefaultBuildStartedReportingValue() { + return defaultBuildStartedReportingValue; + } + + /** + * Standard setter for the build started reporting value. + * + * @param defaultBuildStartedReportingValue the default build started reporting value + */ + public void setDefaultBuildStartedReportingValue(Integer defaultBuildStartedReportingValue) { + this.defaultBuildStartedReportingValue = defaultBuildStartedReportingValue; + } + + /** + * Standard getter for the build successful reporting value. + * + * @return the description. + */ + public Integer getDefaultBuildSuccessfulReportingValue() { + return defaultBuildSuccessfulReportingValue; + } + + /** + * Standard setter for the build successful reporting value. + * + * @param defaultBuildSuccessfulReportingValue the default build successful reporting value + */ + public void setDefaultBuildSuccessfulReportingValue(Integer defaultBuildSuccessfulReportingValue) { + this.defaultBuildSuccessfulReportingValue = defaultBuildSuccessfulReportingValue; + } + + /** + * Standard getter for the build failed reporting value. + * + * @return the description. + */ + public Integer getDefaultBuildFailedReportingValue() { + return defaultBuildFailedReportingValue; + } + + /** + * Standard setter for the build failed reporting value. + * + * @param defaultBuildFailedReportingValue the default build failed reporting value + */ + public void setDefaultBuildFailedReportingValue(Integer defaultBuildFailedReportingValue) { + this.defaultBuildFailedReportingValue = defaultBuildFailedReportingValue; + } + + /** + * Standard getter for the build unstable reporting value. + * + * @return the description. + */ + public Integer getDefaultBuildUnstableReportingValue() { + return defaultBuildUnstableReportingValue; + } + + /** + * Standard setter for the build unstable reporting value. + * + * @param defaultBuildUnstableReportingValue the default build unstable reporting value + */ + public void setDefaultBuildUnstableReportingValue(Integer defaultBuildUnstableReportingValue) { + this.defaultBuildUnstableReportingValue = defaultBuildUnstableReportingValue; + } + + /** + * Standard getter for the build not built reporting value. + * + * @return the description. + */ + public Integer getDefaultBuildNotBuiltReportingValue() { + return defaultBuildNotBuiltReportingValue; + } + + /** + * Standard setter for the build not built reporting value. + * + * @param defaultBuildNotBuiltReportingValue the default build not built reporting value + */ + public void setDefaultBuildNotBuiltReportingValue(Integer defaultBuildNotBuiltReportingValue) { + this.defaultBuildNotBuiltReportingValue = defaultBuildNotBuiltReportingValue; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + VerdictCategory category = (VerdictCategory)o; + + return verdictValue != null ? verdictValue.equals(category.verdictValue) : category.verdictValue == null; + } + + @Override public int hashCode() { + return Objects + .hash(verdictValue, + verdictDescription, + defaultBuildStartedReportingValue, + defaultBuildSuccessfulReportingValue, + defaultBuildFailedReportingValue, + defaultBuildUnstableReportingValue, + defaultBuildNotBuiltReportingValue); } /** diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/Config.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/Config.java index 512ae0f1f..94ac10f42 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/Config.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/Config.java @@ -45,10 +45,14 @@ import org.kohsuke.stapler.StaplerRequest; import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.LinkedList; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; //CS IGNORE LineLength FOR NEXT 11 LINES. REASON: static import. import static com.sonymobile.tools.gerrit.gerritevents.GerritDefaultValues.DEFAULT_BUILD_SCHEDULE_DELAY; @@ -142,11 +146,35 @@ public class Config implements IGerritHudsonTriggerConfig { * Default value for {@link #isGerritBuildCurrentPatchesOnly()}. */ public static final boolean DEFAULT_BUILD_CURRENT_PATCHES_ONLY = false; + /** + * Default Code-Review vote label. + */ + public static final String CODE_REVIEW = "Code-Review"; + /** + * Default Verified vote label. + */ + public static final String VERIFIED = "Verified"; /** * Global default for notification level. */ public static final Notify DEFAULT_NOTIFICATION_LEVEL = Notify.ALL; + private static final String GERRIT_CMD_BUILD_STARTED_DEFAULT_VALUE = "gerrit review , " + + "--message 'Build Started ' " + + "--verified --code-review --tag " + Constants.TAG_VALUE; + private static final String GERRIT_CMD_BUILD_SUCCESSFUL_DEFAULT_VALUE = "gerrit review , " + + "--message 'Build Successful ' " + + "--verified --code-review --tag " + Constants.TAG_VALUE; + private static final String GERRIT_CMD_BUILD_FAILED_DEFAULT_VALUE = "gerrit review , " + + "--message 'Build Failed ' " + + "--verified --code-review --tag " + Constants.TAG_VALUE; + private static final String GERRIT_CMD_BUILD_UNSTABLE_DEFAULT_VALUE = "gerrit review , " + + "--message 'Build Unstable ' " + + "--verified --code-review --tag " + Constants.TAG_VALUE; + private static final String GERRIT_CMD_BUILD_NOT_BUILT_DEFAULT_VALUE = "gerrit review , " + + "--message 'No Builds Executed ' " + + "--verified --code-review --tag " + Constants.TAG_VALUE; + private String gerritHostName; private int gerritSshPort; private String gerritProxy; @@ -163,21 +191,36 @@ public class Config implements IGerritHudsonTriggerConfig { private transient boolean gerritBuildCurrentPatchesOnly; @Deprecated private transient int numberOfWorkerThreads; + @Deprecated private String gerritVerifiedCmdBuildSuccessful; + @Deprecated private String gerritVerifiedCmdBuildUnstable; + @Deprecated private String gerritVerifiedCmdBuildFailed; + @Deprecated private String gerritVerifiedCmdBuildStarted; + @Deprecated private String gerritVerifiedCmdBuildNotBuilt; private String gerritFrontEndUrl; + @Deprecated private Integer gerritBuildStartedVerifiedValue = null; + @Deprecated private Integer gerritBuildSuccessfulVerifiedValue = null; + @Deprecated private Integer gerritBuildFailedVerifiedValue = null; + @Deprecated private Integer gerritBuildUnstableVerifiedValue = null; + @Deprecated private Integer gerritBuildNotBuiltVerifiedValue = null; + @Deprecated private Integer gerritBuildStartedCodeReviewValue = null; + @Deprecated private Integer gerritBuildSuccessfulCodeReviewValue = null; + @Deprecated private Integer gerritBuildFailedCodeReviewValue = null; + @Deprecated private Integer gerritBuildUnstableCodeReviewValue = null; + @Deprecated private Integer gerritBuildNotBuiltCodeReviewValue = null; private boolean enableManualTrigger; private boolean enablePluginMessages; @@ -226,6 +269,8 @@ public Config(IGerritHudsonTriggerConfig config) { gerritHttpPassword = Secret.fromString(config.getGerritHttpPassword()); restCodeReview = config.isRestCodeReview(); restVerified = config.isRestVerified(); + + //these fields deprecated but kept for the sake of compatibility gerritBuildCurrentPatchesOnly = config.isGerritBuildCurrentPatchesOnly(); numberOfWorkerThreads = config.getNumberOfReceivingWorkerThreads(); numberOfSendingWorkerThreads = config.getNumberOfSendingWorkerThreads(); @@ -253,12 +298,9 @@ public Config(IGerritHudsonTriggerConfig config) { enableProjectAutoCompletion = config.isEnableProjectAutoCompletion(); projectListFetchDelay = config.getProjectListFetchDelay(); projectListRefreshInterval = config.getProjectListRefreshInterval(); - if (config.getCategories() != null) { - categories = new LinkedList(); - for (VerdictCategory cat : config.getCategories()) { - categories.add(new VerdictCategory(cat.getVerdictValue(), cat.getVerdictDescription())); - } - } + + assertDefaultCategories(); + if (config.getReplicationConfig() != null) { replicationConfig = new ReplicationConfig(config.getReplicationConfig()); } @@ -266,6 +308,117 @@ public Config(IGerritHudsonTriggerConfig config) { watchTimeExceptionData = addWatchTimeExceptionData(config.getExceptionData()); } + /** + * Converter from String to Integer. + * + * @param str the String to be parsed as Integer. + * @return the resulting Integer + */ + public static Integer getIntegerFromString(String str) { + try { + return Integer.parseInt(str); + } catch (NumberFormatException nfe) { + return null; + } + } + + // make sure that there is a Code-Review and Verified category + /** + * Initializes default voting categories. + */ + private void assertDefaultCategories() { + VerdictCategory[] defaultCategories = new VerdictCategory[]{ + new VerdictCategory(CODE_REVIEW, CODE_REVIEW, + gerritBuildStartedCodeReviewValue != null + ? gerritBuildStartedCodeReviewValue : DEFAULT_GERRIT_BUILD_STARTED_CODE_REVIEW_VALUE, + gerritBuildSuccessfulCodeReviewValue != null + ? gerritBuildSuccessfulCodeReviewValue : DEFAULT_GERRIT_BUILD_SUCCESSFUL_CODE_REVIEW_VALUE, + gerritBuildFailedCodeReviewValue != null + ? gerritBuildFailedCodeReviewValue : DEFAULT_GERRIT_BUILD_FAILURE_CODE_REVIEW_VALUE, + gerritBuildUnstableCodeReviewValue != null + ? gerritBuildUnstableCodeReviewValue : DEFAULT_GERRIT_BUILD_UNSTABLE_CODE_REVIEW_VALUE, + gerritBuildNotBuiltCodeReviewValue != null + ? gerritBuildNotBuiltCodeReviewValue : DEFAULT_GERRIT_BUILD_NOT_BUILT_CODE_REVIEW_VALUE), + new VerdictCategory(VERIFIED, VERIFIED, + gerritBuildStartedVerifiedValue != null + ? gerritBuildStartedVerifiedValue : DEFAULT_GERRIT_BUILD_STARTED_VERIFIED_VALUE, + gerritBuildSuccessfulVerifiedValue != null + ? gerritBuildSuccessfulVerifiedValue : DEFAULT_GERRIT_BUILD_SUCCESSFUL_VERIFIED_VALUE, + gerritBuildFailedVerifiedValue != null + ? gerritBuildFailedVerifiedValue : DEFAULT_GERRIT_BUILD_FAILURE_VERIFIED_VALUE, + gerritBuildUnstableVerifiedValue != null + ? gerritBuildUnstableVerifiedValue : DEFAULT_GERRIT_BUILD_UNSTABLE_VERIFIED_VALUE, + gerritBuildNotBuiltVerifiedValue != null + ? gerritBuildNotBuiltVerifiedValue : DEFAULT_GERRIT_BUILD_NOT_BUILT_VERIFIED_VALUE), + }; + if (categories == null) { + categories = new ArrayList(); + } + + if (allCategoriesHaveNullReportingValues(categories)) { + categories.remove(getVerdictCategory(CODE_REVIEW)); + categories.remove(getVerdictCategory(VERIFIED)); + } + + for (VerdictCategory category : defaultCategories) { + if (!categories.contains(category)) { + categories.add(category); + } + } + } + + /** + * Checks if all categories have null reporting values. + * + * @param verdictCategories the list of VerdictCategory. + * @return true if all categories have null reporting values + */ + private boolean allCategoriesHaveNullReportingValues(List verdictCategories) { + for (VerdictCategory cat : verdictCategories) { + if (cat.getDefaultBuildStartedReportingValue() != null + || cat.getDefaultBuildSuccessfulReportingValue() != null + || cat.getDefaultBuildFailedReportingValue() != null + || cat.getDefaultBuildUnstableReportingValue() != null + || cat.getDefaultBuildNotBuiltReportingValue() != null) { + return false; + } + } + return true; + } + + /** + * Standard getter. + * + * @return the Code-Review category + */ + public VerdictCategory getCodeReviewCategory() { + return getVerdictCategory(CODE_REVIEW); + } + + /** + * Standard getter. + * + * @return the Code-Review category + */ + public VerdictCategory getVerifyCategory() { + return getVerdictCategory(VERIFIED); + } + + /** + * Standard getter for additional verdict categories. + * + * @param value the name of wanted VerdictCategory. + * @return requested VerdictCategory + */ + public VerdictCategory getVerdictCategory(String value) { + for (VerdictCategory category : categories) { + if (category.getVerdictValue().equals(value)) { + return category; + } + } + return null; + } + @Override public void setValues(JSONObject formData) { gerritHostName = formData.optString("gerritHostName", DEFAULT_GERRIT_HOSTNAME); @@ -305,67 +458,21 @@ public void setValues(JSONObject formData) { numberOfSendingWorkerThreads = DEFAULT_NR_OF_SENDING_WORKER_THREADS; } - if (formData.isEmpty()) { - gerritBuildStartedVerifiedValue = DEFAULT_GERRIT_BUILD_STARTED_VERIFIED_VALUE; - gerritBuildSuccessfulVerifiedValue = DEFAULT_GERRIT_BUILD_SUCCESSFUL_VERIFIED_VALUE; - gerritBuildFailedVerifiedValue = DEFAULT_GERRIT_BUILD_FAILURE_VERIFIED_VALUE; - gerritBuildUnstableVerifiedValue = DEFAULT_GERRIT_BUILD_UNSTABLE_VERIFIED_VALUE; - gerritBuildNotBuiltVerifiedValue = DEFAULT_GERRIT_BUILD_NOT_BUILT_VERIFIED_VALUE; - gerritBuildStartedCodeReviewValue = DEFAULT_GERRIT_BUILD_STARTED_CODE_REVIEW_VALUE; - gerritBuildSuccessfulCodeReviewValue = DEFAULT_GERRIT_BUILD_SUCCESSFUL_CODE_REVIEW_VALUE; - gerritBuildFailedCodeReviewValue = DEFAULT_GERRIT_BUILD_FAILURE_CODE_REVIEW_VALUE; - gerritBuildUnstableCodeReviewValue = DEFAULT_GERRIT_BUILD_UNSTABLE_CODE_REVIEW_VALUE; - gerritBuildNotBuiltCodeReviewValue = DEFAULT_GERRIT_BUILD_NOT_BUILT_CODE_REVIEW_VALUE; - } else { - gerritBuildStartedVerifiedValue = getValueFromFormData(formData, "gerritBuildStartedVerifiedValue"); - gerritBuildSuccessfulVerifiedValue = getValueFromFormData(formData, "gerritBuildSuccessfulVerifiedValue"); - gerritBuildFailedVerifiedValue = getValueFromFormData(formData, "gerritBuildFailedVerifiedValue"); - gerritBuildUnstableVerifiedValue = getValueFromFormData(formData, "gerritBuildUnstableVerifiedValue"); - gerritBuildNotBuiltVerifiedValue = getValueFromFormData(formData, "gerritBuildNotBuiltVerifiedValue"); - gerritBuildStartedCodeReviewValue = getValueFromFormData(formData, "gerritBuildStartedCodeReviewValue"); - gerritBuildSuccessfulCodeReviewValue = getValueFromFormData(formData, - "gerritBuildSuccessfulCodeReviewValue"); - gerritBuildFailedCodeReviewValue = getValueFromFormData(formData, "gerritBuildFailedCodeReviewValue"); - gerritBuildUnstableCodeReviewValue = getValueFromFormData(formData, "gerritBuildUnstableCodeReviewValue"); - gerritBuildNotBuiltCodeReviewValue = getValueFromFormData(formData, "gerritBuildNotBuiltCodeReviewValue"); - } - + gerritVerifiedCmdBuildStarted = formData.optString("gerritVerifiedCmdBuildStarted", GERRIT_CMD_BUILD_STARTED_DEFAULT_VALUE); + gerritVerifiedCmdBuildSuccessful = formData.optString("gerritVerifiedCmdBuildSuccessful", GERRIT_CMD_BUILD_SUCCESSFUL_DEFAULT_VALUE); + gerritVerifiedCmdBuildFailed = formData.optString("gerritVerifiedCmdBuildFailed", GERRIT_CMD_BUILD_FAILED_DEFAULT_VALUE); + gerritVerifiedCmdBuildUnstable = formData.optString("gerritVerifiedCmdBuildUnstable", GERRIT_CMD_BUILD_UNSTABLE_DEFAULT_VALUE); + gerritVerifiedCmdBuildNotBuilt = formData.optString("gerritVerifiedCmdBuildNotBuilt", GERRIT_CMD_BUILD_NOT_BUILT_DEFAULT_VALUE); + gerritFrontEndUrl = formData.optString("gerritFrontEndUrl", DEFAULT_GERRIT_HOSTNAME); + enableManualTrigger = formData.optBoolean("enableManualTrigger", DEFAULT_ENABLE_MANUAL_TRIGGER); + enablePluginMessages = formData.optBoolean("enablePluginMessages", DEFAULT_ENABLE_PLUGIN_MESSAGES); + buildScheduleDelay = formData.optInt("buildScheduleDelay", DEFAULT_BUILD_SCHEDULE_DELAY); + projectListRefreshInterval = formData.optInt("projectListRefreshInterval", DEFAULT_PROJECT_LIST_REFRESH_INTERVAL); + enableProjectAutoCompletion = formData.optBoolean("enableProjectAutoCompletion", DEFAULT_ENABLE_PROJECT_AUTO_COMPLETION); - gerritVerifiedCmdBuildStarted = formData.optString( - "gerritVerifiedCmdBuildStarted", - "gerrit review , --message 'Build Started ' " - + "--verified --code-review --tag " + Constants.TAG_VALUE); - gerritVerifiedCmdBuildFailed = formData.optString( - "gerritVerifiedCmdBuildFailed", - "gerrit review , --message 'Build Failed ' " - + "--verified --code-review --tag " + Constants.TAG_VALUE); - gerritVerifiedCmdBuildSuccessful = formData.optString( - "gerritVerifiedCmdBuildSuccessful", - "gerrit review , --message 'Build Successful ' " - + "--verified --code-review --tag " + Constants.TAG_VALUE); - gerritVerifiedCmdBuildUnstable = formData.optString( - "gerritVerifiedCmdBuildUnstable", - "gerrit review , --message 'Build Unstable ' " - + "--verified --code-review --tag " + Constants.TAG_VALUE); - gerritVerifiedCmdBuildNotBuilt = formData.optString( - "gerritVerifiedCmdBuildNotBuilt", - "gerrit review , --message 'No Builds Executed ' " - + "--verified --code-review --tag " + Constants.TAG_VALUE); - gerritFrontEndUrl = formData.optString( - "gerritFrontEndUrl", - DEFAULT_GERRIT_HOSTNAME); - enableManualTrigger = formData.optBoolean( - "enableManualTrigger", - DEFAULT_ENABLE_MANUAL_TRIGGER); - enablePluginMessages = formData.optBoolean( - "enablePluginMessages", - DEFAULT_ENABLE_PLUGIN_MESSAGES); triggerOnAllComments = formData.optBoolean( "triggerOnAllComments", DEFAULT_TRIGGER_ON_ALL_COMMENTS); - buildScheduleDelay = formData.optInt( - "buildScheduleDelay", - DEFAULT_BUILD_SCHEDULE_DELAY); if (buildScheduleDelay < 0) { buildScheduleDelay = 0; } @@ -377,24 +484,38 @@ public void setValues(JSONObject formData) { "projectListFetchDelay", DEFAULT_PROJECT_LIST_FETCH_DELAY); - projectListRefreshInterval = formData.optInt( - "projectListRefreshInterval", - DEFAULT_PROJECT_LIST_REFRESH_INTERVAL); - enableProjectAutoCompletion = formData.optBoolean( - "enableProjectAutoCompletion", - DEFAULT_ENABLE_PROJECT_AUTO_COMPLETION); - categories = new LinkedList(); if (formData.has("verdictCategories")) { Object cat = formData.get("verdictCategories"); if (cat instanceof JSONArray) { for (Object jsonObject : (JSONArray)cat) { - categories.add(VerdictCategory.createVerdictCategoryFromJSON((JSONObject)jsonObject)); + categories.add(VerdictCategory.fromJSON((JSONObject)jsonObject, formData)); } } else if (cat instanceof JSONObject) { - categories.add(VerdictCategory.createVerdictCategoryFromJSON((JSONObject)cat)); + categories.add(VerdictCategory.fromJSON((JSONObject)cat, formData)); + } + } + assertDefaultCategories(); + //cover the migration of default gerrit reporting values + for (VerdictCategory cat : categories) { + if (formData.has(cat.getVerdictValue() + "Successful")) { + cat.setDefaultBuildSuccessfulReportingValue(getIntegerFromString((String)formData.get(cat.getVerdictValue() + "Successful"))); + } + if (formData.has(cat.getVerdictValue() + "Failed")) { + cat.setDefaultBuildFailedReportingValue(getIntegerFromString((String)formData.get(cat.getVerdictValue() + "Failed"))); + } + if (formData.has(cat.getVerdictValue() + "Started")) { + cat.setDefaultBuildStartedReportingValue(getIntegerFromString((String)formData.get(cat.getVerdictValue() + "Started"))); + } + if (formData.has(cat.getVerdictValue() + "Unstable")) { + cat.setDefaultBuildUnstableReportingValue(getIntegerFromString((String)formData.get(cat.getVerdictValue() + "Unstable"))); + } + if (formData.has(cat.getVerdictValue() + "Not Built")) { + cat.setDefaultBuildNotBuiltReportingValue(getIntegerFromString((String)formData.get(cat.getVerdictValue() + "Not Built"))); } } + + initializeGerritCommands(); watchdogTimeoutMinutes = formData.optInt("watchdogTimeoutMinutes", DEFAULT_GERRIT_WATCHDOG_TIMEOUT_MINUTES); watchTimeExceptionData = addWatchTimeExceptionData(formData); @@ -412,6 +533,47 @@ public void setValues(JSONObject formData) { replicationConfig = ReplicationConfig.createReplicationConfigFromJSON(formData); } + /** + * Enrich the gerrit commands with the additional labels, if present. + */ + private void initializeGerritCommands() { + List stringLabels = new ArrayList(Arrays.asList("verified", "code-review")); + + for (VerdictCategory label : categories) { + stringLabels.add(label.getVerdictValue().toLowerCase()); + + if (!label.getVerdictValue().equalsIgnoreCase(CODE_REVIEW) && !label.getVerdictValue().equalsIgnoreCase(VERIFIED)) { + String commandAddition = " --" + label.getVerdictValue().toLowerCase() + " <" + label.getVerdictValue().toUpperCase() + "> "; + gerritVerifiedCmdBuildStarted = gerritVerifiedCmdBuildStarted.contains(commandAddition) + ? gerritVerifiedCmdBuildStarted : (gerritVerifiedCmdBuildStarted += commandAddition); + + gerritVerifiedCmdBuildSuccessful = gerritVerifiedCmdBuildSuccessful.contains(commandAddition) + ? gerritVerifiedCmdBuildSuccessful : (gerritVerifiedCmdBuildSuccessful += commandAddition); + + gerritVerifiedCmdBuildFailed = gerritVerifiedCmdBuildFailed.contains(commandAddition) + ? gerritVerifiedCmdBuildFailed : (gerritVerifiedCmdBuildFailed += commandAddition); + + gerritVerifiedCmdBuildUnstable = gerritVerifiedCmdBuildUnstable.contains(commandAddition) + ? gerritVerifiedCmdBuildUnstable : (gerritVerifiedCmdBuildUnstable += commandAddition); + + gerritVerifiedCmdBuildNotBuilt = gerritVerifiedCmdBuildNotBuilt.contains(commandAddition) + ? gerritVerifiedCmdBuildNotBuilt : (gerritVerifiedCmdBuildNotBuilt += commandAddition); + } + } + String gerritCmdRegex = "(--([\\S]+) (<[\\S]+>)){1}"; + Pattern pattern = Pattern.compile(gerritCmdRegex); + Matcher matcher = pattern.matcher(gerritVerifiedCmdBuildStarted); + while (matcher.find()) { + if (!stringLabels.contains(matcher.group(2))) { + gerritVerifiedCmdBuildStarted = gerritVerifiedCmdBuildStarted.replace(matcher.group(1), ""); + gerritVerifiedCmdBuildSuccessful = gerritVerifiedCmdBuildSuccessful.replace(matcher.group(1), ""); + gerritVerifiedCmdBuildFailed = gerritVerifiedCmdBuildFailed.replace(matcher.group(1), ""); + gerritVerifiedCmdBuildUnstable = gerritVerifiedCmdBuildUnstable.replace(matcher.group(1), ""); + gerritVerifiedCmdBuildNotBuilt = gerritVerifiedCmdBuildNotBuilt.replace(matcher.group(1), ""); + } + } + } + /** * Obtain value from a key in formdata. * @param formData JSONObject. @@ -799,6 +961,7 @@ public BuildCancellationPolicy getBuildCurrentPatchesOnly() { return this.buildCurrentPatchesOnly; } + @Deprecated @Override public String getGerritCmdBuildSuccessful() { return gerritVerifiedCmdBuildSuccessful; @@ -810,10 +973,12 @@ public String getGerritCmdBuildSuccessful() { * @param cmd the command * @see #getGerritCmdBuildSuccessful() */ + @Deprecated public void setGerritVerifiedCmdBuildSuccessful(String cmd) { gerritVerifiedCmdBuildSuccessful = cmd; } + @Deprecated @Override public String getGerritCmdBuildUnstable() { return gerritVerifiedCmdBuildUnstable; @@ -825,10 +990,12 @@ public String getGerritCmdBuildUnstable() { * @param cmd the command * @see #getGerritCmdBuildUnstable() */ + @Deprecated public void setGerritVerifiedCmdBuildUnstable(String cmd) { gerritVerifiedCmdBuildUnstable = cmd; } + @Deprecated @Override public String getGerritCmdBuildFailed() { return gerritVerifiedCmdBuildFailed; @@ -840,10 +1007,12 @@ public String getGerritCmdBuildFailed() { * @param cmd the command * @see #setGerritVerifiedCmdBuildFailed(java.lang.String) */ + @Deprecated public void setGerritVerifiedCmdBuildFailed(String cmd) { gerritVerifiedCmdBuildFailed = cmd; } + @Deprecated @Override public String getGerritCmdBuildStarted() { return gerritVerifiedCmdBuildStarted; @@ -855,10 +1024,12 @@ public String getGerritCmdBuildStarted() { * @param cmd the command * @see #getGerritCmdBuildStarted() */ + @Deprecated public void setGerritVerifiedCmdBuildStarted(String cmd) { gerritVerifiedCmdBuildStarted = cmd; } + @Deprecated @Override public String getGerritCmdBuildNotBuilt() { return gerritVerifiedCmdBuildNotBuilt; @@ -870,58 +1041,69 @@ public String getGerritCmdBuildNotBuilt() { * @param cmd the command * @see #getGerritCmdBuildNotBuilt() */ + @Deprecated public void setGerritVerifiedCmdBuildNotBuilt(String cmd) { gerritVerifiedCmdBuildNotBuilt = cmd; } + @Deprecated @Override public Integer getGerritBuildStartedVerifiedValue() { - return gerritBuildStartedVerifiedValue; + return getVerifyCategory().getDefaultBuildStartedReportingValue(); } + @Deprecated @Override public Integer getGerritBuildStartedCodeReviewValue() { - return gerritBuildStartedCodeReviewValue; + return getCodeReviewCategory().getDefaultBuildStartedReportingValue(); } + @Deprecated @Override public Integer getGerritBuildSuccessfulVerifiedValue() { - return gerritBuildSuccessfulVerifiedValue; + return getVerifyCategory().getDefaultBuildSuccessfulReportingValue(); } + @Deprecated @Override public Integer getGerritBuildSuccessfulCodeReviewValue() { - return gerritBuildSuccessfulCodeReviewValue; + return getCodeReviewCategory().getDefaultBuildSuccessfulReportingValue(); } + @Deprecated @Override public Integer getGerritBuildFailedVerifiedValue() { - return gerritBuildFailedVerifiedValue; + return getVerifyCategory().getDefaultBuildFailedReportingValue(); } + @Deprecated @Override public Integer getGerritBuildFailedCodeReviewValue() { - return gerritBuildFailedCodeReviewValue; + return getCodeReviewCategory().getDefaultBuildFailedReportingValue(); } + @Deprecated @Override public Integer getGerritBuildUnstableVerifiedValue() { - return gerritBuildUnstableVerifiedValue; + return getVerifyCategory().getDefaultBuildUnstableReportingValue(); } + @Deprecated @Override public Integer getGerritBuildUnstableCodeReviewValue() { - return gerritBuildUnstableCodeReviewValue; + return getCodeReviewCategory().getDefaultBuildUnstableReportingValue(); } + @Deprecated @Override public Integer getGerritBuildNotBuiltVerifiedValue() { - return gerritBuildNotBuiltVerifiedValue; + return getVerifyCategory().getDefaultBuildNotBuiltReportingValue(); } + @Deprecated @Override public Integer getGerritBuildNotBuiltCodeReviewValue() { - return gerritBuildNotBuiltCodeReviewValue; + return getCodeReviewCategory().getDefaultBuildNotBuiltReportingValue(); } @Override @@ -1138,6 +1320,7 @@ Object readResolve() { this.buildCurrentPatchesOnly.setAbortManualPatchsets(false); this.buildCurrentPatchesOnly.setAbortNewPatchsets(false); } + this.assertDefaultCategories(); return this; } } diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/IGerritHudsonTriggerConfig.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/IGerritHudsonTriggerConfig.java index b93d18816..e7fd2eb9c 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/IGerritHudsonTriggerConfig.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/IGerritHudsonTriggerConfig.java @@ -96,62 +96,73 @@ public interface IGerritHudsonTriggerConfig extends GerritConnectionConfig2 { * The default verified value for build started. * @return the value. */ + @Deprecated Integer getGerritBuildStartedVerifiedValue(); /** * The default code review value for build started. * @return the value. */ + @Deprecated Integer getGerritBuildStartedCodeReviewValue(); /** * The default verified value for build successful. * @return the falue. */ + @Deprecated Integer getGerritBuildSuccessfulVerifiedValue(); /** * The default code review value for build successful. * @return the value. */ + @Deprecated Integer getGerritBuildSuccessfulCodeReviewValue(); /** * The default verified value for build failed. * @return the value. */ + @Deprecated Integer getGerritBuildFailedVerifiedValue(); /** * The default code review value for build failed. * @return the value. */ + @Deprecated Integer getGerritBuildFailedCodeReviewValue(); /** * The default verified value for build unstable. * @return the value. */ + @Deprecated Integer getGerritBuildUnstableVerifiedValue(); /** * The default code review value for build unstable. * @return the value. */ + @Deprecated Integer getGerritBuildUnstableCodeReviewValue(); /** * The default verified value for build not built. * @return the value. */ + @Deprecated Integer getGerritBuildNotBuiltVerifiedValue(); /** * The default code review value for build not built. * @return the value. */ + @Deprecated Integer getGerritBuildNotBuiltCodeReviewValue(); + /** * Sets all config values from the provided JSONObject. * @param form the JSON object with form data. @@ -298,6 +309,14 @@ public interface IGerritHudsonTriggerConfig extends GerritConnectionConfig2 { */ void setNumberOfSendingWorkerThreads(int numberOfSendingWorkerThreads); + /** + * Method to retrieve a specific VerdictCategory. + * + * @param verdictCategoryName the name of the VerdictCategory to be retrieved. + * @return the requested VerdictCategory. + */ + VerdictCategory getVerdictCategory(String verdictCategoryName); + /** * The number of threads to handle incoming events with. * @return the number of worker threads. diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpander.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpander.java index 8c8172121..59bd76073 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpander.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpander.java @@ -25,12 +25,14 @@ package com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier; +import com.sonyericsson.hudson.plugins.gerrit.trigger.VerdictCategory; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.IGerritHudsonTriggerConfig; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildMemory.MemoryImprint; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildMemory.MemoryImprint.Entry; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildsStartedStats; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger; +import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.LabelValue; import com.sonyericsson.hudson.plugins.gerrit.trigger.utils.StringUtil; import com.sonymobile.tools.gerrit.gerritevents.dto.events.ChangeBasedEvent; import com.sonymobile.tools.gerrit.gerritevents.dto.events.GerritTriggeredEvent; @@ -46,11 +48,15 @@ import java.util.Comparator; import java.util.HashMap; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import jenkins.model.Jenkins; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static com.sonyericsson.hudson.plugins.gerrit.trigger.utils.Logic.shouldSkip; /** @@ -104,11 +110,19 @@ public String getBuildStartedCommand(Run r, TaskListener taskListener, ChangeBasedEvent event, BuildsStartedStats stats) { GerritTrigger trigger = GerritTrigger.getTrigger(r.getParent()); + + Map labelVotes = new HashMap(); + + for (LabelValue label : trigger.getLabelValues()) { + if (label.getName().contains("-")) { + labelVotes.put(label.getName().toUpperCase().replace("-", "_"), getBuildStartedLabelValue(label)); + } else { + labelVotes.put(label.getName().toUpperCase(), getBuildStartedLabelValue(label)); + } + } + String gerritCmd = config.getGerritCmdBuildStarted(); - Map parameters = createStandardParameters(r, event, - getBuildStartedCodeReviewValue(r), - getBuildStartedVerifiedValue(r), - Notify.ALL.name()); + Map parameters = createStandardParameters(r, event, labelVotes, Notify.ALL.name()); StringBuilder startedStats = new StringBuilder(); if (stats.getTotalBuildsToStart() > 1) { startedStats.append(stats.toString()); @@ -155,6 +169,7 @@ private static Iterable emptyIfNull(Iterable iterable) { * @param r the build. * @return the value. */ + @Deprecated private Integer getBuildStartedVerifiedValue(Run r) { GerritTrigger trigger = GerritTrigger.getTrigger(r.getParent()); if (trigger == null) { @@ -179,6 +194,7 @@ private Integer getBuildStartedVerifiedValue(Run r) { * @param r the build. * @return the value. */ + @Deprecated private Integer getBuildStartedCodeReviewValue(Run r) { GerritTrigger trigger = GerritTrigger.getTrigger(r.getParent()); if (trigger == null) { @@ -195,6 +211,30 @@ private Integer getBuildStartedCodeReviewValue(Run r) { } } + /** + * Standard getter for reporting vote of gerrit Label. + * + * @param label the LabelValue. + * @return build started vote value for requested Label + */ + private Integer getBuildStartedLabelValue(LabelValue label) { + Integer globalConfigValue = 0; + + if (label != null && label.getBuildStartedVoteValue() != null) { + logger.trace("BuildStarted value for " + label.getName() + " overridden in project config. returning {}", + label.getBuildStartedVoteValue()); + return label.getBuildStartedVoteValue(); + } else { + for (VerdictCategory cat : config.getCategories()) { + if (label != null && label.getName().equals(cat.getVerdictValue())) { + globalConfigValue = cat.getDefaultBuildStartedReportingValue(); + logger.trace("BuildStarted value for" + cat.getVerdictValue() + "standard value used {}", globalConfigValue); + } + } + return globalConfigValue; + } + } + /** * Creates a list of the "standard" trigger parameters. * They are present both for build started and completed. @@ -242,13 +282,62 @@ private Map createStandardParameters(Run r, GerritTriggeredEvent if (r != null) { map.put("BUILDURL", jenkins.getRootUrl() + r.getUrl()); } - map.put("VERIFIED", String.valueOf(verified)); - map.put("CODE_REVIEW", String.valueOf(codeReview)); + map.put(VERIFIED, String.valueOf(verified)); + map.put(CODE_REVIEW, String.valueOf(codeReview)); map.put("NOTIFICATION_LEVEL", notifyLevel); return map; } + /** + * Creates a list of the "standard" trigger parameters. + * They are present both for build started and completed. + * The parameters are: + *
    + *
  • GERRIT_NAME: The Gerrit project name.
  • + *
  • CHANGE_ID: The Gerrit change-id (SHA-1).
  • + *
  • BRANCH: The branch of the project.
  • + *
  • TOPIC: Topic name for change series.
  • + *
  • CHANGE: The change number.
  • + *
  • PATCHSET: The patchset number.
  • + *
  • PATCHSET_REVISION: The patchset revision.
  • + *
  • REFSPEC: The ref-spec. (refs/changes/xx/xxxx/z).
  • + *
  • BUILDURL: The URL to the build.
  • + *
  • VERIFIED: The verified vote.
  • + *
  • CODE_REVIEW: The code review vote.
  • + *
  • NOTIFICATION_LEVEL: The notification level.
  • + *
+ * @param r the build. + * @param gerritEvent the event. + * @param labelVotes the labels and associated votes. + * @param notifyLevel the notify level. + * @return the parameters and their values. + */ + private Map createStandardParameters(Run r, + GerritTriggeredEvent gerritEvent, + Map labelVotes, + String notifyLevel) { + + int codeReviewValue = 0; + int verifiedValue = 0; + + if (labelVotes.containsKey(CODE_REVIEW)) { + codeReviewValue = labelVotes.get(CODE_REVIEW); + } + if (labelVotes.containsKey(VERIFIED)) { + verifiedValue = labelVotes.get(VERIFIED); + } + + Map map = createStandardParameters(r, gerritEvent, codeReviewValue, verifiedValue, notifyLevel); + + for (String label : labelVotes.keySet()) { + if (!label.equalsIgnoreCase(CODE_REVIEW) && !label.equalsIgnoreCase(VERIFIED)) { + map.put(label.toUpperCase(), String.valueOf(labelVotes.get(label))); + } + } + return map; + } + /** * Expands all types of parameters in the string and returns the "replaced" string. * Both types means both $ENV_VARS and <PLUGIN_VARS> @@ -260,6 +349,7 @@ private Map createStandardParameters(Run r, GerritTriggeredEvent */ private String expandParameters(String gerritCommand, Run r, TaskListener taskListener, Map parameters) { + final int thirdMatcherGroup = 3; String command = gerritCommand; if (r != null && taskListener != null) { try { @@ -273,21 +363,126 @@ private String expandParameters(String gerritCommand, Run r, TaskListener taskLi for (Map.Entry param : parameters.entrySet()) { command = command.replace("<" + param.getKey() + ">", param.getValue()); } - //replace null and Integer.MAX_VALUE code review value - command = command.replace("--code-review null", ""); - command = command.replace("--code-review " + Integer.MAX_VALUE, ""); - command = command.replace("--verified null", ""); - command = command.replace("--verified " + Integer.MAX_VALUE, ""); + + String regexToIdentifyNullOrIntegerMaxValue = "(--([\\S]+) (\\w+)){1}"; + Pattern pattern = Pattern.compile(regexToIdentifyNullOrIntegerMaxValue); + Matcher matcher = pattern.matcher(command); + while (matcher.find()) { + if (matcher.group(thirdMatcherGroup).equalsIgnoreCase("null") + || matcher.group(thirdMatcherGroup).equalsIgnoreCase(String.valueOf(Integer.MAX_VALUE))) { + command = command.replaceAll(matcher.group(1), ""); + } + } return command; } /** * Finds the code review value for the specified build result on the configured trigger. - * @param res the build result. + * + * @param res the build result. + * @param trigger the trigger that might have overridden values. + * @param labelName the name of the label for which votes are needed. + * @return the value. + */ + protected Integer getLabelVoteValue(Result res, GerritTrigger trigger, String labelName) { + LabelValue labelValue = null; + for (LabelValue label : trigger.getLabelValues()) { + if (label.getName().equalsIgnoreCase(labelName)) { + labelValue = label; + } + } + + //same for all the other cases + if (res == Result.SUCCESS) { + if (labelValue != null && labelValue.getBuildSuccessfulVoteValue() != null) { + return labelValue.getBuildSuccessfulVoteValue(); + } else { + return config.getVerdictCategory(labelName) != null + ? config.getVerdictCategory(labelName).getDefaultBuildSuccessfulReportingValue() : null; + } + } else if (res == Result.FAILURE || res == Result.ABORTED) { + if (labelValue != null && labelValue.getBuildFailedVoteValue() != null) { + return labelValue.getBuildFailedVoteValue(); + } else { + return config.getVerdictCategory(labelName) != null + ? config.getVerdictCategory(labelName).getDefaultBuildFailedReportingValue() : null; + } + } else if (res == Result.UNSTABLE) { + if (labelValue != null && labelValue.getBuildUnstableVoteValue() != null) { + return labelValue.getBuildUnstableVoteValue(); + } else { + return config.getVerdictCategory(labelName) != null + ? config.getVerdictCategory(labelName).getDefaultBuildUnstableReportingValue() : null; + } + } else if (res == Result.NOT_BUILT) { + if (labelValue != null && labelValue.getBuildNotBuiltVoteValue() != null) { + return labelValue.getBuildNotBuiltVoteValue(); + } else { + return config.getVerdictCategory(labelName) != null + ? config.getVerdictCategory(labelName).getDefaultBuildNotBuiltReportingValue() : null; + } + } else { + //As bad as failure, for now + if (labelValue != null && labelValue.getBuildFailedVoteValue() != null) { + return labelValue.getBuildFailedVoteValue(); + } else { + return config.getVerdictCategory(labelName) != null + ? config.getVerdictCategory(labelName).getDefaultBuildSuccessfulReportingValue() : null; + } + } + } + + /** + * Returns the minimum verified value for the build results in the memory. + * If no builds have contributed to verified value, this method returns null + * + * @param memoryImprint the memory. + * @param onlyBuilt only count builds that completed (no NOT_BUILT builds) + * @param labelName the label for which you want to return the vote value + * @return the lowest verified value. + */ + @CheckForNull + public Integer getMinimumLabelVoteValue(MemoryImprint memoryImprint, boolean onlyBuilt, String labelName) { + Integer labelVote = Integer.MAX_VALUE; + for (Entry entry : memoryImprint.getEntries()) { + if (entry == null) { + continue; + } + Run build = entry.getBuild(); + if (build == null) { + continue; + } + Result result = build.getResult(); + if (onlyBuilt && result == Result.NOT_BUILT) { + continue; + } + + GerritTrigger trigger = GerritTrigger.getTrigger(entry.getProject()); + if (shouldSkip(trigger.getSkipVote(), result)) { + continue; + } + Integer labelObj = getLabelVoteValue(result, trigger, labelName); + if (labelObj != null) { + labelVote = Math.min(labelVote, labelObj); + } + } + + if (labelVote == Integer.MAX_VALUE) { + return null; + } + + return labelVote; + } + + /** + * Finds the code review value for the specified build result on the configured trigger. + * + * @param res the build result. * @param trigger the trigger that might have overridden values. * @return the value. */ + @Deprecated protected Integer getCodeReviewValue(Result res, GerritTrigger trigger) { if (res == Result.SUCCESS) { if (trigger.getGerritBuildSuccessfulCodeReviewValue() != null) { @@ -329,6 +524,7 @@ protected Integer getCodeReviewValue(Result res, GerritTrigger trigger) { * @param trigger the trigger that might have overridden values. * @return the value. */ + @Deprecated protected Integer getVerifiedValue(Result res, GerritTrigger trigger) { if (res == Result.SUCCESS) { if (trigger.getGerritBuildSuccessfulVerifiedValue() != null) { @@ -371,6 +567,7 @@ protected Integer getVerifiedValue(Result res, GerritTrigger trigger) { * @param onlyBuilt only count builds that completed (no NOT_BUILT builds) * @return the lowest verified value. */ + @Deprecated @CheckForNull public Integer getMinimumVerifiedValue(MemoryImprint memoryImprint, boolean onlyBuilt) { Integer verified = Integer.MAX_VALUE; @@ -411,6 +608,7 @@ public Integer getMinimumVerifiedValue(MemoryImprint memoryImprint, boolean only * @param onlyBuilt only count builds that completed (no NOT_BUILT builds) * @return the lowest code review value. */ + @Deprecated @CheckForNull public Integer getMinimumCodeReviewValue(MemoryImprint memoryImprint, boolean onlyBuilt) { Integer codeReview = Integer.MAX_VALUE; @@ -521,17 +719,24 @@ public String getBuildCompletedCommand(MemoryImprint memoryImprint, TaskListener command = config.getGerritCmdBuildFailed(); } - Integer verified = null; - Integer codeReview = null; Notify notifyLevel = Notify.ALL; + Map labelVotes = new HashMap(); + if (memoryImprint.getEvent().isScorable()) { - verified = getMinimumVerifiedValue(memoryImprint, onlyCountBuilt); - codeReview = getMinimumCodeReviewValue(memoryImprint, onlyCountBuilt); notifyLevel = getHighestNotificationLevel(memoryImprint, onlyCountBuilt); } - Map parameters = createStandardParameters(null, memoryImprint.getEvent(), - codeReview, verified, notifyLevel.name()); + for (VerdictCategory vc : config.getCategories()) { + if (vc.getVerdictValue().contains("-")) { + labelVotes.put(vc.getVerdictValue().toUpperCase().replace("-", "_"), + getMinimumLabelVoteValue(memoryImprint, onlyCountBuilt, vc.getVerdictValue())); + } else { + labelVotes.put(vc.getVerdictValue().toUpperCase(), + getMinimumLabelVoteValue(memoryImprint, onlyCountBuilt, vc.getVerdictValue())); + } + } + + Map parameters = createStandardParameters(null, memoryImprint.getEvent(), labelVotes, notifyLevel.name()); // escapes ' as '"'"' in order to avoid breaking command line param // Details: http://stackoverflow.com/a/26165123/99834 parameters.put("BUILDS_STATS", createBuildsStats(memoryImprint, diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJob.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJob.java index 14c5728b5..d6cebdfdd 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJob.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJob.java @@ -24,6 +24,7 @@ */ package com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.job.rest; +import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config; import com.sonymobile.tools.gerrit.gerritevents.dto.events.ChangeBasedEvent; import com.sonymobile.tools.gerrit.gerritevents.workers.rest.AbstractRestCommandJob; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Constants; @@ -50,9 +51,6 @@ */ public class BuildCompletedRestCommandJob extends AbstractRestCommandJob { - private static final String LABEL_CODEREVIEW = "Code-Review"; - private static final String LABEL_VERIFIED = "Verified"; - private final BuildMemory.MemoryImprint memoryImprint; private final TaskListener listener; private final ParameterExpander parameterExpander; @@ -82,18 +80,18 @@ protected ReviewInput createReview() { Collection scoredLabels = new ArrayList(); if (memoryImprint.getEvent().isScorable()) { if (config.isRestCodeReview()) { - Integer crValue = parameterExpander.getMinimumCodeReviewValue(memoryImprint, true); + Integer crValue = parameterExpander.getMinimumLabelVoteValue(memoryImprint, true, Config.CODE_REVIEW); if (crValue != null && crValue != Integer.MAX_VALUE) { scoredLabels.add(new ReviewLabel( - LABEL_CODEREVIEW, + Config.CODE_REVIEW, crValue)); } } if (config.isRestVerified()) { - Integer verValue = parameterExpander.getMinimumVerifiedValue(memoryImprint, true); + Integer verValue = parameterExpander.getMinimumLabelVoteValue(memoryImprint, true, Config.VERIFIED); if (verValue != null && verValue != Integer.MAX_VALUE) { scoredLabels.add(new ReviewLabel( - LABEL_VERIFIED, + Config.VERIFIED, verValue)); } } diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger.java index f4891ebb9..1310d1869 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger.java @@ -56,6 +56,8 @@ import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.events.PluginPatchsetCreatedEvent; import com.sonyericsson.hudson.plugins.gerrit.trigger.version.GerritVersionChecker; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static com.sonymobile.tools.gerrit.gerritevents.GerritDefaultValues.DEFAULT_BUILD_SCHEDULE_DELAY; import static jenkins.model.ParameterizedJobMixIn.ParameterizedJob; @@ -158,16 +160,7 @@ public class GerritTrigger extends Trigger { private List gerritProjects; private List dynamicGerritProjects; private SkipVote skipVote; - private Integer gerritBuildStartedVerifiedValue; - private Integer gerritBuildStartedCodeReviewValue; - private Integer gerritBuildSuccessfulVerifiedValue; - private Integer gerritBuildSuccessfulCodeReviewValue; - private Integer gerritBuildFailedVerifiedValue; - private Integer gerritBuildFailedCodeReviewValue; - private Integer gerritBuildUnstableVerifiedValue; - private Integer gerritBuildUnstableCodeReviewValue; - private Integer gerritBuildNotBuiltVerifiedValue; - private Integer gerritBuildNotBuiltCodeReviewValue; + private List labelValues; private boolean silentMode; private String notificationLevel; private boolean silentStartMode; @@ -232,6 +225,7 @@ public GerritTrigger(List gerritProjects) { this.buildNotBuiltMessage = ""; this.buildUnsuccessfulFilepath = ""; this.triggerConfigURL = ""; + initLabelValues(); } /** @@ -304,16 +298,17 @@ public GerritTrigger(List gerritProjects, SkipVote skipVote, Inte boolean dynamicTriggerConfiguration, String triggerConfigURL, String notificationLevel) { this.gerritProjects = gerritProjects; this.skipVote = skipVote; - this.gerritBuildStartedVerifiedValue = gerritBuildStartedVerifiedValue; - this.gerritBuildStartedCodeReviewValue = gerritBuildStartedCodeReviewValue; - this.gerritBuildSuccessfulVerifiedValue = gerritBuildSuccessfulVerifiedValue; - this.gerritBuildSuccessfulCodeReviewValue = gerritBuildSuccessfulCodeReviewValue; - this.gerritBuildFailedVerifiedValue = gerritBuildFailedVerifiedValue; - this.gerritBuildFailedCodeReviewValue = gerritBuildFailedCodeReviewValue; - this.gerritBuildUnstableVerifiedValue = gerritBuildUnstableVerifiedValue; - this.gerritBuildUnstableCodeReviewValue = gerritBuildUnstableCodeReviewValue; - this.gerritBuildNotBuiltVerifiedValue = gerritBuildNotBuiltVerifiedValue; - this.gerritBuildNotBuiltCodeReviewValue = gerritBuildNotBuiltCodeReviewValue; + initLabelValues(); + getVerifiedLabel().setBuildStartedVoteValue(gerritBuildStartedVerifiedValue); + getCodeReviewLabel().setBuildStartedVoteValue(gerritBuildStartedCodeReviewValue); + getVerifiedLabel().setBuildSuccessfulVoteValue(gerritBuildSuccessfulVerifiedValue); + getCodeReviewLabel().setBuildSuccessfulVoteValue(gerritBuildSuccessfulCodeReviewValue); + getVerifiedLabel().setBuildFailedVoteValue(gerritBuildFailedVerifiedValue); + getCodeReviewLabel().setBuildFailedVoteValue(gerritBuildFailedCodeReviewValue); + getVerifiedLabel().setBuildUnstableVoteValue(gerritBuildUnstableVerifiedValue); + getCodeReviewLabel().setBuildFailedVoteValue(gerritBuildUnstableCodeReviewValue); + getVerifiedLabel().setBuildNotBuiltVoteValue(gerritBuildNotBuiltVerifiedValue); + getCodeReviewLabel().setBuildNotBuiltVoteValue(gerritBuildNotBuiltCodeReviewValue); this.silentMode = silentMode; this.silentStartMode = silentStartMode; this.escapeQuotes = escapeQuotes; @@ -751,13 +746,106 @@ protected ParametersAction createParameters(GerritTriggeredEvent event, Job proj * @return the list of verdict categories, or an empty linkedlist if server not found. */ private List getVerdictCategoriesList() { - GerritServer server = PluginImpl.getServer_(serverName); - if (server != null) { - return server.getConfig().getCategories(); - } else { - logger.error("Could not find server {}", serverName); - return new LinkedList(); - } + if (isAnyServer()) { + List labels = new ArrayList(); + List servers = PluginImpl.getServers_(); + for (GerritServer server : servers) { + if (server.getConfig() != null) { + List categories = server.getConfig().getCategories(); + if (categories != null) { + labels.addAll(server.getConfig().getCategories()); + } + } + } + return labels; + } else { + GerritServer server = PluginImpl.getServer_(serverName); + if (server != null) { + return server.getConfig().getCategories(); + } else { + logger.error("Could not find server {}", serverName); + return new LinkedList(); + } + + } + } + + /** + * Standard getter for the Code-Review label. + * + * @return the Code-Review label. + */ + public LabelValue getCodeReviewLabel() { + return getLabel(CODE_REVIEW); + } + + /** + * Standard getter for the Verified label. + * + * @return the Verified label. + */ + public LabelValue getVerifiedLabel() { + return getLabel(VERIFIED); + } + + /** + * Standard getter for additional labels. + * + * @param name name of LabelValue to search against. + * @return the requested label by name. + */ + private LabelValue getLabel(String name) { + if (labelValues == null) { + return null; + } + for (LabelValue label: labelValues) { + if (label.getName().equals(name)) { + return label; + } + } + System.err.println("Label " + name + " not found!"); + return null; + } + + /** + * Ensures that the list of labels is initialized with predefined labels. + */ + private void initLabelValues() { + labelValues = new ArrayList(); + for (VerdictCategory label : getVerdictCategoriesList()) { + labelValues.add(new LabelValue(label.getVerdictValue())); + } + LabelValue[] defaultLabels = new LabelValue[]{ + new LabelValue(CODE_REVIEW, 0, 0, 0, 0, 0), + new LabelValue(VERIFIED, 0, 0, 0, 0, 0), + }; + for (LabelValue label: defaultLabels) { + if (!labelValues.contains(label)) { + labelValues.add(label); + } + } + } + + /** + * Standard getter for label values. + * + * @return all available gerrit labels. + */ + public List getLabelValues() { + if (labelValues == null) { + initLabelValues(); + } + return labelValues; + } + + /** + * Setter for the list of gerrit labels. + * + * @param labelValues the list of labels + */ + @DataBoundSetter + public void setLabelValues(List labelValues) { + this.labelValues = labelValues; } /** @@ -1125,7 +1213,7 @@ public void setGerritProjects(List gerritProjects) { * @return the vote value. */ public Integer getGerritBuildFailedCodeReviewValue() { - return gerritBuildFailedCodeReviewValue; + return getCodeReviewLabel().getBuildFailedVoteValue(); } /** @@ -1137,7 +1225,7 @@ public Integer getGerritBuildFailedCodeReviewValue() { */ @DataBoundSetter public void setGerritBuildFailedCodeReviewValue(Integer gerritBuildFailedCodeReviewValue) { - this.gerritBuildFailedCodeReviewValue = gerritBuildFailedCodeReviewValue; + this.getCodeReviewLabel().setBuildSuccessfulVoteValue(gerritBuildFailedCodeReviewValue); } /** @@ -1146,7 +1234,7 @@ public void setGerritBuildFailedCodeReviewValue(Integer gerritBuildFailedCodeRev * @return the vote value. */ public Integer getGerritBuildFailedVerifiedValue() { - return gerritBuildFailedVerifiedValue; + return getVerifiedLabel().getBuildFailedVoteValue(); } /** @@ -1157,7 +1245,7 @@ public Integer getGerritBuildFailedVerifiedValue() { */ @DataBoundSetter public void setGerritBuildFailedVerifiedValue(Integer gerritBuildFailedVerifiedValue) { - this.gerritBuildFailedVerifiedValue = gerritBuildFailedVerifiedValue; + this.getVerifiedLabel().setBuildFailedVoteValue(gerritBuildFailedVerifiedValue); } /** @@ -1166,7 +1254,7 @@ public void setGerritBuildFailedVerifiedValue(Integer gerritBuildFailedVerifiedV * @return the vote value. */ public Integer getGerritBuildStartedCodeReviewValue() { - return gerritBuildStartedCodeReviewValue; + return getCodeReviewLabel().getBuildStartedVoteValue(); } /** @@ -1178,7 +1266,7 @@ public Integer getGerritBuildStartedCodeReviewValue() { */ @DataBoundSetter public void setGerritBuildStartedCodeReviewValue(Integer gerritBuildStartedCodeReviewValue) { - this.gerritBuildStartedCodeReviewValue = gerritBuildStartedCodeReviewValue; + this.getCodeReviewLabel().setBuildStartedVoteValue(gerritBuildStartedCodeReviewValue); } /** @@ -1187,19 +1275,18 @@ public void setGerritBuildStartedCodeReviewValue(Integer gerritBuildStartedCodeR * @return the vote value. */ public Integer getGerritBuildStartedVerifiedValue() { - return gerritBuildStartedVerifiedValue; + return getVerifiedLabel().getBuildStartedVoteValue(); } /** * Job specific Gerrit verified vote when a build is started, providing null means that the global value should be * used. * - * @param gerritBuildStartedVerifiedValue - * the vote value. + * @param gerritBuildStartedVerifiedValue the vote value. */ @DataBoundSetter public void setGerritBuildStartedVerifiedValue(Integer gerritBuildStartedVerifiedValue) { - this.gerritBuildStartedVerifiedValue = gerritBuildStartedVerifiedValue; + getVerifiedLabel().setBuildStartedVoteValue(gerritBuildStartedVerifiedValue); } /** @@ -1209,7 +1296,7 @@ public void setGerritBuildStartedVerifiedValue(Integer gerritBuildStartedVerifie * @return the vote value. */ public Integer getGerritBuildSuccessfulCodeReviewValue() { - return gerritBuildSuccessfulCodeReviewValue; + return getCodeReviewLabel().getBuildSuccessfulVoteValue(); } /** @@ -1221,7 +1308,7 @@ public Integer getGerritBuildSuccessfulCodeReviewValue() { */ @DataBoundSetter public void setGerritBuildSuccessfulCodeReviewValue(Integer gerritBuildSuccessfulCodeReviewValue) { - this.gerritBuildSuccessfulCodeReviewValue = gerritBuildSuccessfulCodeReviewValue; + this.getCodeReviewLabel().setBuildSuccessfulVoteValue(gerritBuildSuccessfulCodeReviewValue); } /** @@ -1230,19 +1317,18 @@ public void setGerritBuildSuccessfulCodeReviewValue(Integer gerritBuildSuccessfu * @return the vote value. */ public Integer getGerritBuildSuccessfulVerifiedValue() { - return gerritBuildSuccessfulVerifiedValue; + return getVerifiedLabel().getBuildSuccessfulVoteValue(); } /** * Job specific Gerrit verified vote when a build is successful, providing null means that the global value should * be used. * - * @param gerritBuildSuccessfulVerifiedValue - * the vote value. + * @param gerritBuildSuccessfulVerifiedValue the vote value. */ @DataBoundSetter public void setGerritBuildSuccessfulVerifiedValue(Integer gerritBuildSuccessfulVerifiedValue) { - this.gerritBuildSuccessfulVerifiedValue = gerritBuildSuccessfulVerifiedValue; + this.getVerifiedLabel().setBuildSuccessfulVoteValue(gerritBuildSuccessfulVerifiedValue); } /** @@ -1251,7 +1337,7 @@ public void setGerritBuildSuccessfulVerifiedValue(Integer gerritBuildSuccessfulV * @return the vote value. */ public Integer getGerritBuildUnstableCodeReviewValue() { - return gerritBuildUnstableCodeReviewValue; + return getCodeReviewLabel().getBuildUnstableVoteValue(); } /** @@ -1263,7 +1349,7 @@ public Integer getGerritBuildUnstableCodeReviewValue() { */ @DataBoundSetter public void setGerritBuildUnstableCodeReviewValue(Integer gerritBuildUnstableCodeReviewValue) { - this.gerritBuildUnstableCodeReviewValue = gerritBuildUnstableCodeReviewValue; + this.getCodeReviewLabel().setBuildUnstableVoteValue(gerritBuildUnstableCodeReviewValue); } /** @@ -1272,19 +1358,18 @@ public void setGerritBuildUnstableCodeReviewValue(Integer gerritBuildUnstableCod * @return the vote value. */ public Integer getGerritBuildUnstableVerifiedValue() { - return gerritBuildUnstableVerifiedValue; + return getVerifiedLabel().getBuildUnstableVoteValue(); } /** * Job specific Gerrit verified vote when a build is unstable, providing null means that the global value should be * used. * - * @param gerritBuildUnstableVerifiedValue - * the vote value. + * @param gerritBuildUnstableVerifiedValue the vote value. */ @DataBoundSetter public void setGerritBuildUnstableVerifiedValue(Integer gerritBuildUnstableVerifiedValue) { - this.gerritBuildUnstableVerifiedValue = gerritBuildUnstableVerifiedValue; + this.getVerifiedLabel().setBuildUnstableVoteValue(gerritBuildUnstableVerifiedValue); } /** @@ -1293,19 +1378,18 @@ public void setGerritBuildUnstableVerifiedValue(Integer gerritBuildUnstableVerif * @return the vote value. */ public Integer getGerritBuildNotBuiltCodeReviewValue() { - return gerritBuildNotBuiltCodeReviewValue; + return getCodeReviewLabel().getBuildNotBuiltVoteValue(); } /** * Job specific Gerrit code review vote when a build is not built, providing null means that the global value should * be used. * - * @param gerritBuildNotBuiltCodeReviewValue - * the vote value. + * @param gerritBuildNotBuiltCodeReviewValue the vote value. */ @DataBoundSetter public void setGerritBuildNotBuiltCodeReviewValue(Integer gerritBuildNotBuiltCodeReviewValue) { - this.gerritBuildNotBuiltCodeReviewValue = gerritBuildNotBuiltCodeReviewValue; + this.getCodeReviewLabel().setBuildNotBuiltVoteValue(gerritBuildNotBuiltCodeReviewValue); } /** @@ -1314,19 +1398,18 @@ public void setGerritBuildNotBuiltCodeReviewValue(Integer gerritBuildNotBuiltCod * @return the vote value. */ public Integer getGerritBuildNotBuiltVerifiedValue() { - return gerritBuildNotBuiltVerifiedValue; + return getVerifiedLabel().getBuildNotBuiltVoteValue(); } /** * Job specific Gerrit verified vote when a build is not built, providing null means that the global value should be * used. * - * @param gerritBuildNotBuiltVerifiedValue - * the vote value. + * @param gerritBuildNotBuiltVerifiedValue the vote value. */ @DataBoundSetter public void setGerritBuildNotBuiltVerifiedValue(Integer gerritBuildNotBuiltVerifiedValue) { - this.gerritBuildNotBuiltVerifiedValue = gerritBuildNotBuiltVerifiedValue; + this.getVerifiedLabel().setBuildNotBuiltVoteValue(gerritBuildNotBuiltVerifiedValue); } /** @@ -2015,8 +2098,8 @@ public FormValidation doCheckDependencyJobsNames(@AncestorInPath Item project, @ } return FormValidation.error( Messages.NoSuchJobExists( - projectName, - path)); + projectName, + path)); } } } @@ -2044,7 +2127,7 @@ public FormValidation doCheckDependencyJobsNames(@AncestorInPath Item project, @ } String currentDependenciesString = getTrigger(currentlyExploring).getDependencyJobsNames(); List currentDependencies = DependencyQueueTaskDispatcher.getProjectsFromString( - currentDependenciesString, project); + currentDependenciesString, project); if (currentDependencies == null) { continue; } diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/LabelValue.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/LabelValue.java new file mode 100644 index 000000000..4e968a15d --- /dev/null +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/LabelValue.java @@ -0,0 +1,220 @@ +package com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger; + +import java.util.Objects; +import hudson.Extension; +import hudson.model.Describable; +import hudson.model.Descriptor; +import jenkins.model.Jenkins; +import org.kohsuke.stapler.DataBoundConstructor; +import org.kohsuke.stapler.DataBoundSetter; + +/** + * Gerrit label model for Gerrit Trigger. + * + * @author George Cimpoies <george.cimpoies@itiviti.com> + */ +public class LabelValue implements Describable { + private String name; + private Integer buildStartedVoteValue; + private Integer buildSuccessfulVoteValue; + private Integer buildFailedVoteValue; + private Integer buildUnstableVoteValue; + private Integer buildNotBuiltVoteValue; + + /** + * Default constructor. + */ + public LabelValue() { } + + /** + * Name-based constructor with default votes. + * + * @param name name of the LabelValue. + */ + public LabelValue(String name) { + this.name = name; + this.buildFailedVoteValue = 0; + this.buildNotBuiltVoteValue = 0; + this.buildStartedVoteValue = 0; + this.buildUnstableVoteValue = 0; + this.buildSuccessfulVoteValue = 0; + } + + /** + * Constructor for LabelValue. + * + * @param name name of LabelValue. + * @param buildStartedVoteValue Build started vote value of LabelValue + * @param buildSuccessfulVoteValue Build successful vote value of LabelValue + * @param buildFailedVoteValue Build failed vote value of LabelValue + * @param buildUnstableVoteValue Build unstable vote value of LabelValue + * @param buildNotBuiltVoteValue Build not built vote value of LabelValue + */ + @DataBoundConstructor + public LabelValue(String name, + Integer buildStartedVoteValue, + Integer buildSuccessfulVoteValue, + Integer buildFailedVoteValue, + Integer buildUnstableVoteValue, + Integer buildNotBuiltVoteValue) { + this.name = name; + this.buildStartedVoteValue = buildStartedVoteValue; + this.buildSuccessfulVoteValue = buildSuccessfulVoteValue; + this.buildFailedVoteValue = buildFailedVoteValue; + this.buildUnstableVoteValue = buildUnstableVoteValue; + this.buildNotBuiltVoteValue = buildNotBuiltVoteValue; + } + + /** + * Standard getter for name of LabelValue. + * + * @return name of the LabelValue. + */ + public String getName() { + return name; + } + + /** + * Standard setter for name of LabelValue. + * + * @param name of the LabelValue. + */ + @DataBoundSetter + public void setName(String name) { + this.name = name; + } + + /** + * Standard getter for name of LabelValue. + * + * @return name of the LabelValue. + */ + public Integer getBuildStartedVoteValue() { + return buildStartedVoteValue; + } + + /** + * Standard setter for buildStartedVoteValue of LabelValue. + * + * @param buildStartedVoteValue of the LabelValue. + */ + @DataBoundSetter + public void setBuildStartedVoteValue(Integer buildStartedVoteValue) { + this.buildStartedVoteValue = buildStartedVoteValue; + } + + /** + * Standard getter for buildSuccessfulVoteValue of LabelValue. + * + * @return buildSuccessfulVoteValue of the LabelValue. + */ + public Integer getBuildSuccessfulVoteValue() { + return buildSuccessfulVoteValue; + } + + /** + * Standard setter for buildSuccessfulVoteValue of LabelValue. + * + * @param buildSuccessfulVoteValue of the LabelValue. + */ + @DataBoundSetter + public void setBuildSuccessfulVoteValue(Integer buildSuccessfulVoteValue) { + this.buildSuccessfulVoteValue = buildSuccessfulVoteValue; + } + + /** + * Standard getter for buildFailedVoteValue of LabelValue. + * + * @return buildFailedVoteValue of the LabelValue. + */ + public Integer getBuildFailedVoteValue() { + return buildFailedVoteValue; + } + + /** + * Standard setter for buildFailedVoteValue of LabelValue. + * + * @param buildFailedVoteValue of the LabelValue. + */ + @DataBoundSetter + public void setBuildFailedVoteValue(Integer buildFailedVoteValue) { + this.buildFailedVoteValue = buildFailedVoteValue; + } + + /** + * Standard getter for buildUnstableVoteValue of LabelValue. + * + * @return buildUnstableVoteValue of the LabelValue. + */ + public Integer getBuildUnstableVoteValue() { + return buildUnstableVoteValue; + } + + /** + * Standard setter for buildUnstableVoteValue of LabelValue. + * + * @param buildUnstableVoteValue of the LabelValue. + */ + @DataBoundSetter + public void setBuildUnstableVoteValue(Integer buildUnstableVoteValue) { + this.buildUnstableVoteValue = buildUnstableVoteValue; + } + + /** + * Standard getter for buildNotBuiltVoteValue of LabelValue. + * + * @return buildNotBuiltVoteValue of the LabelValue. + */ + public Integer getBuildNotBuiltVoteValue() { + return buildNotBuiltVoteValue; + } + + /** + * Standard setter for buildNotBuiltVoteValue of LabelValue. + * + * @param buildNotBuiltVoteValue of the LabelValue. + */ + @DataBoundSetter + public void setBuildNotBuiltVoteValue(Integer buildNotBuiltVoteValue) { + this.buildNotBuiltVoteValue = buildNotBuiltVoteValue; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LabelValue that = (LabelValue)o; + + return name.equals(that.name); + } + + @Override public int hashCode() { + return Objects.hash(name, + buildStartedVoteValue, + buildSuccessfulVoteValue, + buildFailedVoteValue, + buildUnstableVoteValue, + buildNotBuiltVoteValue); + } + + @Override + public Descriptor getDescriptor() { + return Jenkins.getInstance().getDescriptor(getClass()); + } + + /** + * The Descriptor for a LabelValue. + */ + @Extension + public static final class DescriptorImpl extends Descriptor { + @Override + public String getDisplayName() { + return "Label value"; + } + + } +} diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerAction.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerAction.java index 1686cea14..7449edbf0 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerAction.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerAction.java @@ -26,6 +26,7 @@ import com.sonyericsson.hudson.plugins.gerrit.trigger.GerritServer; import com.sonyericsson.hudson.plugins.gerrit.trigger.Messages; import com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl; +import com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.IGerritHudsonTriggerConfig; import com.sonyericsson.hudson.plugins.gerrit.trigger.events.ManualPatchsetCreated; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTriggerParameters; @@ -712,11 +713,11 @@ public static enum Approval { /** * A Code Review Approval type Code-Review. */ - CODE_REVIEW("Code-Review"), + CODE_REVIEW(Config.CODE_REVIEW), /** * A Verified Approval type Verified. */ - VERIFIED("Verified"); + VERIFIED(Config.VERIFIED); private String type; /** diff --git a/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer/index.jelly b/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer/index.jelly index 7972a4b79..dfc3a899c 100644 --- a/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer/index.jelly +++ b/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/GerritServer/index.jelly @@ -107,82 +107,41 @@ with="gerritHostName,gerritSshPort,gerritProxy,gerritUserName,gerritAuthKeyFile,gerritAuthKeyFilePassword"/> - - - -
- ${%Verify} -
- - - - - - - - - - - - - - - - - - - - -
- ${%Code Review} -
- - - - - - - - - - - - - - - - - + + + + +
+ ${p.verdictValue} +
+ + + + + + + + + + + + + + + + + +
diff --git a/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger/config.jelly b/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger/config.jelly index 4f3502806..b8b0dbc28 100644 --- a/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger/config.jelly +++ b/src/main/resources/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/GerritTrigger/config.jelly @@ -72,87 +72,52 @@ -
${%Verify}
- - - - - - - - - - - - - - - -
${%Code Review}
- - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ${instance.name} +
${%Started} + +
${%Successful} + +
${%Failed} + +
${%Unstable} + +
${%Not Built} + +
+
diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/ConfigTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/ConfigTest.java index 596ff9855..484ca7d5d 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/ConfigTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/config/ConfigTest.java @@ -74,16 +74,16 @@ public void testSetValues() { + "--message 'You are not built for it ' --verified --code-review \"," + "\"gerritAuthKeyFile\":\"/home/local/gerrit/.ssh/id_rsa\"," + "\"gerritAuthKeyFilePassword\":\"passis\"," - + "\"gerritBuildFailedCodeReviewValue\":\"1\"," - + "\"gerritBuildFailedVerifiedValue\":\"-1\"," - + "\"gerritBuildStartedCodeReviewValue\":\"2\"," - + "\"gerritBuildStartedVerifiedValue\":\"-2\"," - + "\"gerritBuildSuccessfulCodeReviewValue\":\"3\"," - + "\"gerritBuildSuccessfulVerifiedValue\":\"-3\"," - + "\"gerritBuildUnstableCodeReviewValue\":\"4\"," - + "\"gerritBuildUnstableVerifiedValue\":\"-4\"," - + "\"gerritBuildNotBuiltCodeReviewValue\":\"5\"," - + "\"gerritBuildNotBuiltVerifiedValue\":\"-5\"," + + "\"Code-ReviewFailed\":\"1\"," + + "\"VerifiedFailed\":\"-1\"," + + "\"Code-ReviewStarted\":\"2\"," + + "\"VerifiedStarted\":\"-2\"," + + "\"Code-ReviewSuccessful\":\"3\"," + + "\"VerifiedSuccessful\":\"-3\"," + + "\"Code-ReviewUnstable\":\"4\"," + + "\"VerifiedUnstable\":\"-4\"," + + "\"Code-ReviewNot Built\":\"5\"," + + "\"VerifiedNot Built\":\"-5\"," + "\"gerritFrontEndUrl\":\"http://gerrit:8088\"," + "\"gerritHostName\":\"gerrit\"," + "\"gerritSshPort\":\"1337\"," @@ -169,16 +169,16 @@ public void testCopyConfig() { + "--message 'You are not built for it ' --verified --code-review \"," + "\"gerritAuthKeyFile\":\"/home/local/gerrit/.ssh/id_rsa\"," + "\"gerritAuthKeyFilePassword\":\"passis\"," - + "\"gerritBuildFailedCodeReviewValue\":\"1\"," - + "\"gerritBuildFailedVerifiedValue\":\"-1\"," - + "\"gerritBuildStartedCodeReviewValue\":\"2\"," - + "\"gerritBuildStartedVerifiedValue\":\"-2\"," - + "\"gerritBuildSuccessfulCodeReviewValue\":\"3\"," - + "\"gerritBuildSuccessfulVerifiedValue\":\"-3\"," - + "\"gerritBuildUnstableCodeReviewValue\":\"4\"," - + "\"gerritBuildUnstableVerifiedValue\":\"-4\"," - + "\"gerritBuildNotBuiltCodeReviewValue\":\"5\"," - + "\"gerritBuildNotBuiltVerifiedValue\":\"-5\"," + + "\"Code-ReviewFailed\":\"1\"," + + "\"VerifiedFailed\":\"-1\"," + + "\"Code-ReviewStarted\":\"2\"," + + "\"VerifiedStarted\":\"-2\"," + + "\"Code-ReviewSuccessful\":\"3\"," + + "\"VerifiedSuccessful\":\"-3\"," + + "\"Code-ReviewUnstable\":\"4\"," + + "\"VerifiedUnstable\":\"-4\"," + + "\"Code-ReviewNot Built\":\"5\"," + + "\"VerifiedNot Built\":\"-5\"," + "\"gerritFrontEndUrl\":\"http://gerrit:8088\"," + "\"gerritHostName\":\"gerrit\"," + "\"gerritSshPort\":\"1337\"," diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpanderTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpanderTest.java index 9845cbe52..e602f887a 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpanderTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/ParameterExpanderTest.java @@ -28,6 +28,7 @@ import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildMemory.MemoryImprint; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildsStartedStats; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger; +import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.LabelValue; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.SkipVote; import com.sonyericsson.hudson.plugins.gerrit.trigger.mock.Setup; import com.sonyericsson.hudson.plugins.gerrit.trigger.utils.StringUtil; @@ -58,6 +59,8 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertEquals; @@ -97,10 +100,14 @@ public void setup() { @Test public void testGetBuildStartedCommand() throws Exception { TaskListener taskListener = mock(TaskListener.class); - GerritTrigger trigger = mock(GerritTrigger.class); - when(trigger.getGerritBuildStartedVerifiedValue()).thenReturn(null); - when(trigger.getGerritBuildStartedCodeReviewValue()).thenReturn(32); + + LabelValue cr = new LabelValue(CODE_REVIEW, 2, 1, 0, 0, 0); + LabelValue v = new LabelValue(VERIFIED, 1, 2, -1, -1, -1); + + when(trigger.getLabelValues()).thenReturn(Arrays.asList(cr, v)); + when(trigger.getCodeReviewLabel()).thenReturn(cr); + when(trigger.getVerifiedLabel()).thenReturn(v); when(trigger.getBuildStartMessage()).thenReturn("${START_MESSAGE_VAR}"); AbstractProject project = mock(AbstractProject.class); @@ -130,7 +137,7 @@ public void testGetBuildStartedCommand() throws Exception { assertTrue("Missing CHANGE_ID", result.indexOf("CHANGE_ID=Iddaaddaa123456789") >= 0); assertTrue("Missing PATCHSET", result.indexOf("PATCHSET=1") >= 0); assertTrue("Missing VERIFIED", result.indexOf("VERIFIED=1") >= 0); - assertTrue("Missing CODEREVIEW", result.indexOf("CODEREVIEW=32") >= 0); + assertTrue("Missing CODEREVIEW", result.indexOf("CODEREVIEW=2") >= 0); assertTrue("Missing NOTIFICATION_LEVEL", result.indexOf("NOTIFICATION_LEVEL=ALL") >= 0); assertTrue("Missing REFSPEC", result.indexOf("REFSPEC=" + expectedRefSpec) >= 0); assertTrue("Missing ENV_BRANCH", result.indexOf("ENV_BRANCH=branch") >= 0); @@ -548,8 +555,13 @@ public void tryGetBuildCompletedCommandEventWithResults(String customUrl, String TaskListener taskListener = mock(TaskListener.class); GerritTrigger trigger = mock(GerritTrigger.class); - when(trigger.getGerritBuildSuccessfulVerifiedValue()).thenReturn(null); - when(trigger.getGerritBuildSuccessfulCodeReviewValue()).thenReturn(32); + + LabelValue cr = new LabelValue(CODE_REVIEW, 32, expectedCodeReviewVote, 0, 0, 0); + LabelValue v = new LabelValue(VERIFIED, 1, expectedVerifiedVote, -1, -1, -1); + + when(trigger.getLabelValues()).thenReturn(Arrays.asList(cr, v)); + when(trigger.getCodeReviewLabel()).thenReturn(cr); + when(trigger.getVerifiedLabel()).thenReturn(v); when(trigger.getCustomUrl()).thenReturn(customUrl); AbstractProject project = mock(AbstractProject.class); Setup.setTrigger(trigger, project); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJobHudsonTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJobHudsonTest.java index 77d101a17..4c9fcca8c 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJobHudsonTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/gerritnotifier/job/rest/BuildCompletedRestCommandJobHudsonTest.java @@ -129,8 +129,8 @@ private void runTest() throws Exception { j.assertStringContains(json.getString("message"), "Build Successful"); JSONObject labels = json.getJSONObject("labels"); - assertEquals(1, labels.getInt("Code-Review")); - assertEquals(1, labels.getInt("Verified")); + assertEquals(1, labels.getInt(Config.CODE_REVIEW)); + assertEquals(1, labels.getInt(Config.VERIFIED)); } /** * The test with a locked down instance. diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/WorkflowTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/WorkflowTest.java index d9c264c59..14ba1c0e3 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/WorkflowTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/WorkflowTest.java @@ -102,7 +102,7 @@ public void testTriggerWorkflow() throws Exception { Assert.assertTrue(message.startsWith("Build Successful")); Assert.assertTrue(message.contains("job/WFJob/1/")); JSONObject labels = verifiedMessage.getJSONObject("labels"); - assertEquals(1, labels.getInt("Verified")); + assertEquals(1, labels.getInt(Config.VERIFIED)); } finally { gerritServer.stop(); } @@ -142,7 +142,7 @@ public void testWorkflowStepSetsCustomUrl() throws Exception { Assert.assertTrue(message.startsWith("Build Successful")); Assert.assertTrue(message.contains("myCustomUrl")); JSONObject labels = verifiedMessage.getJSONObject("labels"); - assertEquals(1, labels.getInt("Verified")); + assertEquals(1, labels.getInt(Config.VERIFIED)); } finally { gerritServer.stop(); } @@ -184,7 +184,7 @@ public void testWorkflowStepSetsUnsuccessfulMessage() throws Exception { Assert.assertTrue(message.startsWith("Build Failed")); Assert.assertTrue(message.contains("myMessage")); JSONObject labels = verifiedMessage.getJSONObject("labels"); - assertEquals(0, labels.getInt("Verified")); + assertEquals(0, labels.getInt(Config.VERIFIED)); } finally { gerritServer.stop(); } @@ -225,7 +225,7 @@ public void testWorkflowStepSetsUnsuccessfulMessageWithSuccessfulBuild() throws Assert.assertTrue(message.startsWith("Build Successful")); Assert.assertFalse(message.contains("myMessage")); JSONObject labels = verifiedMessage.getJSONObject("labels"); - assertEquals(1, labels.getInt("Verified")); + assertEquals(1, labels.getInt(Config.VERIFIED)); } finally { gerritServer.stop(); } diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionTest.java index 75db5af23..3883a2e3e 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/actions/manual/ManualTriggerActionTest.java @@ -24,6 +24,8 @@ package com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.actions.manual; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static org.mockito.Mockito.any; import com.sonyericsson.hudson.plugins.gerrit.trigger.GerritServer; import com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl; @@ -68,19 +70,19 @@ public void testGetCodeReview() throws Exception { JSONArray approvals = new JSONArray(); JSONObject crw = new JSONObject(); - crw.put("type", "Code-Review"); + crw.put("type", CODE_REVIEW); crw.put("value", "2"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Code-Review"); + crw.put("type", CODE_REVIEW); crw.put("value", "1"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Verified"); + crw.put("type", VERIFIED); crw.put("value", "1"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Code-Review"); + crw.put("type", CODE_REVIEW); crw.put("value", "-1"); approvals.add(crw); currentPatchSet.put("approvals", approvals); @@ -130,19 +132,19 @@ public void testGetVerified() throws Exception { JSONArray approvals = new JSONArray(); JSONObject crw = new JSONObject(); - crw.put("type", "Verified"); + crw.put("type", VERIFIED); crw.put("value", "2"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Verified"); + crw.put("type", VERIFIED); crw.put("value", "1"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Code-Review"); + crw.put("type", CODE_REVIEW); crw.put("value", "1"); approvals.add(crw); crw = new JSONObject(); - crw.put("type", "Verified"); + crw.put("type", VERIFIED); crw.put("value", "-1"); approvals.add(crw); currentPatchSet.put("approvals", approvals); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/DuplicatesUtil.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/DuplicatesUtil.java index c9c79f2e4..e237ef22b 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/DuplicatesUtil.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/DuplicatesUtil.java @@ -23,6 +23,8 @@ */ package com.sonyericsson.hudson.plugins.gerrit.trigger.mock; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; + import com.sonyericsson.hudson.plugins.gerrit.trigger.PluginImpl; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.data.Branch; @@ -157,7 +159,7 @@ public static FreeStyleProject createGerritTriggeredJobForCommentAdded(JenkinsRu List projects = new LinkedList(); projects.add(new GerritProject(CompareType.ANT, "**", Collections.singletonList(new Branch(CompareType.ANT, "**")), null, null, null, false)); - PluginCommentAddedEvent event = new PluginCommentAddedEvent("Code-Review", "1"); + PluginCommentAddedEvent event = new PluginCommentAddedEvent(CODE_REVIEW, "1"); List list = new LinkedList(); list.add(event); p.addTrigger(new GerritTrigger(projects, null, diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/MockGerritHudsonTriggerConfig.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/MockGerritHudsonTriggerConfig.java index b26fc7ec7..c93c61261 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/MockGerritHudsonTriggerConfig.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/MockGerritHudsonTriggerConfig.java @@ -194,6 +194,10 @@ public void setNumberOfSendingWorkerThreads(int numberOfSendingWorkerThreads) { return; } + @Override public VerdictCategory getVerdictCategory(String verdictCategoryName) { + return null; + } + @Override public void setValues(JSONObject form) { //Empty @@ -212,50 +216,44 @@ public void setValues(JSONObject form) { private Integer gerritBuildUnstableVerifiedValue = Integer.valueOf(-3); private Integer gerritBuildNotBuiltVerifiedValue = Integer.valueOf(-5); - @Override - public Integer getGerritBuildStartedVerifiedValue() { - return gerritBuildStartedVerifiedValue; + @Override public Integer getGerritBuildStartedVerifiedValue() { + return 0; } - @Override - public Integer getGerritBuildSuccessfulVerifiedValue() { - return gerritBuildSuccessfulVerifiedValue; + @Override public Integer getGerritBuildStartedCodeReviewValue() { + return 0; } - @Override - public Integer getGerritBuildFailedVerifiedValue() { - return gerritBuildFailedVerifiedValue; + @Override public Integer getGerritBuildSuccessfulVerifiedValue() { + return 0; } - @Override - public Integer getGerritBuildUnstableVerifiedValue() { - return gerritBuildUnstableVerifiedValue; + @Override public Integer getGerritBuildSuccessfulCodeReviewValue() { + return 0; } - @Override - public Integer getGerritBuildNotBuiltVerifiedValue() { - return gerritBuildNotBuiltVerifiedValue; + @Override public Integer getGerritBuildFailedVerifiedValue() { + return 0; } - @Override - public Integer getGerritBuildStartedCodeReviewValue() { - return gerritBuildStartedCodeReviewValue; + @Override public Integer getGerritBuildFailedCodeReviewValue() { + return 0; } - @Override - public Integer getGerritBuildSuccessfulCodeReviewValue() { - return gerritBuildSuccessfulCodeReviewValue; + + @Override public Integer getGerritBuildUnstableVerifiedValue() { + return 0; } - @Override - public Integer getGerritBuildFailedCodeReviewValue() { - return gerritBuildFailedCodeReviewValue; + + @Override public Integer getGerritBuildUnstableCodeReviewValue() { + return 0; } - @Override - public Integer getGerritBuildUnstableCodeReviewValue() { - return gerritBuildUnstableCodeReviewValue; + + @Override public Integer getGerritBuildNotBuiltVerifiedValue() { + return 0; } - @Override - public Integer getGerritBuildNotBuiltCodeReviewValue() { - return gerritBuildNotBuiltCodeReviewValue; + + @Override public Integer getGerritBuildNotBuiltCodeReviewValue() { + return 0; } /** diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/Setup.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/Setup.java index 511ea0500..4c189318a 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/Setup.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/mock/Setup.java @@ -82,6 +82,7 @@ import java.util.LinkedList; import java.util.List; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.spy; @@ -496,7 +497,7 @@ public static CommentAdded createCommentAdded() { event.setPatchset(patch); List approvals = new LinkedList(); Approval approval = new Approval(); - approval.setType("Code-Review"); + approval.setType(CODE_REVIEW); approval.setValue("1"); approvals.add(approval); event.setApprovals(approvals); @@ -719,7 +720,7 @@ public static ToGerritRunListener createFailureMessageRunListener(final Abstract * @return the List. */ public static List createCodeReviewVerdictCategoryList() { - VerdictCategory cat = new VerdictCategory("Code-Review", "Code review"); + VerdictCategory cat = new VerdictCategory(CODE_REVIEW, "Code review"); List list = new LinkedList(); list.add(cat); return list; diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/project/GerritTriggerProjectHudsonTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/project/GerritTriggerProjectHudsonTest.java index dae7d4ee4..8e9fd45b9 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/project/GerritTriggerProjectHudsonTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/project/GerritTriggerProjectHudsonTest.java @@ -46,6 +46,8 @@ import java.util.Iterator; import java.util.List; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @@ -89,7 +91,7 @@ public void testPopulateDropDown() throws Exception { assertNotNull(tr); HtmlElement settingsMainElement = tr.getOneHtmlElementByAttribute("td", "class", "setting-main"); HtmlSelect select = (HtmlSelect)settingsMainElement.getChildElements().iterator().next(); - List expected = Arrays.asList("Verified", "Code-Review"); + List expected = Arrays.asList(VERIFIED, CODE_REVIEW); verifyOptions(select, expected); } @@ -129,7 +131,7 @@ public void testPopulateDropDownFromTwoServers() throws Exception { HtmlElement settingsMainElement = tr.getOneHtmlElementByAttribute("td", "class", "setting-main"); HtmlSelect select = (HtmlSelect)settingsMainElement.getChildElements().iterator().next(); - List expected = Arrays.asList("Verified", "Code-Review", "Code-Review2", "Verified2"); + List expected = Arrays.asList(VERIFIED, CODE_REVIEW, "Code-Review2", "Verified2"); verifyOptions(select, expected); } diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat2173JenkinsTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat2173JenkinsTest.java index ea1f1fb7e..72ca3c518 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat2173JenkinsTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/BackCompat2173JenkinsTest.java @@ -90,9 +90,6 @@ private void verifyAllOff(GerritTrigger trigger) { assertNotNull(trigger); assertNotNull(trigger.getSkipVote()); assertFalse("Skip not built", trigger.getSkipVote().isOnNotBuilt()); - assertNotNull(trigger.getGerritBuildFailedCodeReviewValue()); - assertEquals("Build Failed Code Review value", Integer.valueOf(0), - trigger.getGerritBuildFailedCodeReviewValue()); assertFalse("Silent Mode", trigger.isSilentMode()); assertEquals("Notification level", "ALL", trigger.getNotificationLevel()); assertFalse("Silent start", trigger.isSilentStartMode()); @@ -164,9 +161,6 @@ private void verifyAllOn(GerritTrigger trigger) { assertNotNull(trigger); assertNotNull(trigger.getSkipVote()); assertTrue("Skip not built", trigger.getSkipVote().isOnNotBuilt()); - assertNotNull(trigger.getGerritBuildNotBuiltCodeReviewValue()); - assertEquals("Build Failed Code Review value", Integer.valueOf(0), - trigger.getGerritBuildNotBuiltCodeReviewValue()); assertFalse("Silent Mode", trigger.isSilentMode()); assertEquals("Notification level", "OWNER", trigger.getNotificationLevel()); assertTrue("Silent start", trigger.isSilentStartMode()); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/ParameterModeJenkinsTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/ParameterModeJenkinsTest.java index 31d2c81e4..1d85e39a2 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/ParameterModeJenkinsTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/ParameterModeJenkinsTest.java @@ -45,6 +45,7 @@ import java.util.List; import java.util.Map; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; @@ -366,7 +367,7 @@ public void testCommitMessageParameterModeNone() throws Exception { @Test public void testCommentTextParameterModeDefault() throws Exception { assertSame(GerritTriggerParameters.ParameterMode.BASE64, trigger.getCommentTextParameterMode()); - trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent("Code-Review", "1")); + trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent(CODE_REVIEW, "1")); String expected = "Triggering comment"; CommentAdded event = Setup.createCommentAdded(); event.setComment(expected); @@ -388,7 +389,7 @@ public void testCommentTextParameterModeDefault() throws Exception { @Test public void testCommentTextParameterModePlain() throws Exception { trigger.setCommentTextParameterMode(GerritTriggerParameters.ParameterMode.PLAIN); - trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent("Code-Review", "1")); + trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent(CODE_REVIEW, "1")); String expected = "Triggering comment"; CommentAdded event = Setup.createCommentAdded(); event.setComment(expected); @@ -410,7 +411,7 @@ public void testCommentTextParameterModePlain() throws Exception { @Test public void testCommentTextParameterModeNone() throws Exception { trigger.setCommentTextParameterMode(GerritTriggerParameters.ParameterMode.NONE); - trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent("Code-Review", "1")); + trigger.getTriggerOnEvents().add(new PluginCommentAddedEvent(CODE_REVIEW, "1")); String expected = "Triggering comment"; CommentAdded event = Setup.createCommentAdded(); event.setComment(expected); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/gerritnotifier/SpecGerritVerifiedSetterTest.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/gerritnotifier/SpecGerritVerifiedSetterTest.java index 761d6161e..a70fe1d9b 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/gerritnotifier/SpecGerritVerifiedSetterTest.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/spec/gerritnotifier/SpecGerritVerifiedSetterTest.java @@ -24,12 +24,14 @@ */ package com.sonyericsson.hudson.plugins.gerrit.trigger.spec.gerritnotifier; +import com.sonyericsson.hudson.plugins.gerrit.trigger.VerdictCategory; import com.sonyericsson.hudson.plugins.gerrit.trigger.config.IGerritHudsonTriggerConfig; import com.sonyericsson.hudson.plugins.gerrit.trigger.extensions.GerritTriggeredBuildListener; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.GerritMessageProvider; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.GerritNotifier; import com.sonyericsson.hudson.plugins.gerrit.trigger.gerritnotifier.model.BuildMemory; import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.GerritTrigger; +import com.sonyericsson.hudson.plugins.gerrit.trigger.hudsontrigger.LabelValue; import com.sonyericsson.hudson.plugins.gerrit.trigger.mock.Setup; import com.sonymobile.tools.gerrit.gerritevents.GerritCmdRunner; import com.sonymobile.tools.gerrit.gerritevents.dto.events.PatchsetCreated; @@ -45,12 +47,16 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mockito; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import java.io.IOException; +import java.util.Arrays; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.CODE_REVIEW; +import static com.sonyericsson.hudson.plugins.gerrit.trigger.config.Config.VERIFIED; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.same; @@ -147,10 +153,15 @@ public void shouldCallGerritWithVerifiedOkFlagWhenBuildWasSuccessful() IGerritHudsonTriggerConfig config = mock(IGerritHudsonTriggerConfig.class); + String crvw = CODE_REVIEW; + String vrif = VERIFIED; String parameterString = "gerrit review MSG=OK VERIFIED= CODEREVIEW="; when(config.getGerritCmdBuildSuccessful()).thenReturn(parameterString); - when(config.getGerritBuildSuccessfulVerifiedValue()).thenReturn(1); - when(config.getGerritBuildSuccessfulCodeReviewValue()).thenReturn(1); + VerdictCategory verified = new VerdictCategory(vrif, vrif, 0, 1, -1, 0, 0); + VerdictCategory codeReview = new VerdictCategory(crvw, crvw, 0, 1, -1, 0, 0); + Mockito.when(config.getCategories()).thenReturn(Arrays.asList(codeReview, verified)); + Mockito.when(config.getVerdictCategory(crvw)).thenReturn(codeReview); + Mockito.when(config.getVerdictCategory(vrif)).thenReturn(verified); GerritNotifier notifier = new GerritNotifier(config, mockGerritCmdRunner, hudson); notifier.buildCompleted(memory.getMemoryImprint(event), taskListener); @@ -177,10 +188,15 @@ public void shouldCallGerritWithVerifiedRejectFlagWhenBuildWasNotSuccessful() IGerritHudsonTriggerConfig config = mock(IGerritHudsonTriggerConfig.class); + String crvw = CODE_REVIEW; + String vrif = VERIFIED; String parameterString = "gerrit review MSG=Failed VERIFIED= CODEREVIEW="; when(config.getGerritCmdBuildFailed()).thenReturn(parameterString); - when(config.getGerritBuildFailedVerifiedValue()).thenReturn(-1); - when(config.getGerritBuildFailedCodeReviewValue()).thenReturn(-1); + VerdictCategory verified = new VerdictCategory(vrif, vrif, 0, 1, -1, 0, 0); + VerdictCategory codeReview = new VerdictCategory(crvw, crvw, 0, 1, -1, 0, 0); + Mockito.when(config.getCategories()).thenReturn(Arrays.asList(codeReview, verified)); + Mockito.when(config.getVerdictCategory(crvw)).thenReturn(codeReview); + Mockito.when(config.getVerdictCategory(vrif)).thenReturn(verified); GerritNotifier notifier = new GerritNotifier(config, mockGerritCmdRunner, hudson); notifier.buildCompleted(memory.getMemoryImprint(event), taskListener); @@ -219,9 +235,14 @@ public void shouldCallGerritWithVerifiedFailedFlagWhenBuildOneBuildFailedAndAnot when(jenkins.getItemByFullName(eq("MockProject2"), same(AbstractProject.class))).thenReturn(project); when(jenkins.getItemByFullName(eq("MockProject2"), same(Job.class))).thenReturn(project); - trigger = mock(GerritTrigger.class); - when(trigger.getGerritBuildFailedCodeReviewValue()).thenReturn(null); - when(trigger.getGerritBuildFailedVerifiedValue()).thenReturn(null); + String crvw = CODE_REVIEW; + String vrif = VERIFIED; + final LabelValue cr = new LabelValue(crvw, 0, 0, null, 0, 0); + final LabelValue v = new LabelValue(vrif, 0, 0, null, 0, 0); + + Mockito.when(trigger.getLabelValues()).thenReturn(Arrays.asList(cr, v)); + Mockito.when(trigger.getCodeReviewLabel()).thenReturn(cr); + Mockito.when(trigger.getVerifiedLabel()).thenReturn(v); Setup.setTrigger(trigger, project); memory.completed(event, build); @@ -229,11 +250,13 @@ public void shouldCallGerritWithVerifiedFailedFlagWhenBuildOneBuildFailedAndAnot IGerritHudsonTriggerConfig config = mock(IGerritHudsonTriggerConfig.class); String parameterString = "gerrit review MSG=FAILED VERIFIED= CODEREVIEW="; + + VerdictCategory verified = new VerdictCategory(vrif, vrif, 0, 1, -1, 0, 0); + VerdictCategory codeReview = new VerdictCategory(crvw, crvw, 0, 1, -1, 0, 0); + Mockito.when(config.getCategories()).thenReturn(Arrays.asList(codeReview, verified)); + Mockito.when(config.getVerdictCategory(crvw)).thenReturn(codeReview); + Mockito.when(config.getVerdictCategory(vrif)).thenReturn(verified); when(config.getGerritCmdBuildFailed()).thenReturn(parameterString); - when(config.getGerritBuildSuccessfulVerifiedValue()).thenReturn(1); - when(config.getGerritBuildSuccessfulCodeReviewValue()).thenReturn(1); - when(config.getGerritBuildFailedCodeReviewValue()).thenReturn(-1); - when(config.getGerritBuildFailedVerifiedValue()).thenReturn(-1); GerritNotifier notifier = new GerritNotifier(config, mockGerritCmdRunner, hudson); notifier.buildCompleted(memory.getMemoryImprint(event), taskListener); diff --git a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/utils/MockPluginCheckerConfig.java b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/utils/MockPluginCheckerConfig.java index ac1442631..53c81b513 100644 --- a/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/utils/MockPluginCheckerConfig.java +++ b/src/test/java/com/sonyericsson/hudson/plugins/gerrit/trigger/utils/MockPluginCheckerConfig.java @@ -103,53 +103,43 @@ public String getGerritCmdBuildNotBuilt() { return null; } - @Override - public Integer getGerritBuildStartedVerifiedValue() { + @Override public Integer getGerritBuildStartedVerifiedValue() { return 0; } - @Override - public Integer getGerritBuildStartedCodeReviewValue() { + @Override public Integer getGerritBuildStartedCodeReviewValue() { return 0; } - @Override - public Integer getGerritBuildSuccessfulVerifiedValue() { + @Override public Integer getGerritBuildSuccessfulVerifiedValue() { return 0; } - @Override - public Integer getGerritBuildSuccessfulCodeReviewValue() { + @Override public Integer getGerritBuildSuccessfulCodeReviewValue() { return 0; } - @Override - public Integer getGerritBuildFailedVerifiedValue() { + @Override public Integer getGerritBuildFailedVerifiedValue() { return 0; } - @Override - public Integer getGerritBuildFailedCodeReviewValue() { + @Override public Integer getGerritBuildFailedCodeReviewValue() { return 0; } - @Override - public Integer getGerritBuildUnstableVerifiedValue() { + @Override public Integer getGerritBuildUnstableVerifiedValue() { return 0; } - @Override - public Integer getGerritBuildUnstableCodeReviewValue() { + @Override public Integer getGerritBuildUnstableCodeReviewValue() { return 0; } - @Override - public Integer getGerritBuildNotBuiltVerifiedValue() { + @Override public Integer getGerritBuildNotBuiltVerifiedValue() { return 0; } - @Override - public Integer getGerritBuildNotBuiltCodeReviewValue() { + @Override public Integer getGerritBuildNotBuiltCodeReviewValue() { return 0; } @@ -246,6 +236,10 @@ public void setNumberOfSendingWorkerThreads(int numberOfSendingWorkerThreads) { } + @Override public VerdictCategory getVerdictCategory(String verdictCategoryName) { + return null; + } + @Override public int getNumberOfReceivingWorkerThreads() { return 0; diff --git a/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java b/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java index 64a900526..886e34a23 100644 --- a/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java +++ b/src/test/java/com/sonymobile/tools/gerrit/gerritevents/mock/SshdServerMock.java @@ -815,32 +815,32 @@ public void start(final Environment environment) throws IOException { JSONArray approvals = new JSONArray(); JSONObject crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "2"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "-1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "2"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "-1"); approvals.add(crw); @@ -914,32 +914,32 @@ public void start(final Environment environment) throws IOException { JSONArray approvals = new JSONArray(); JSONObject crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "2"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Code-Review"); + crw.put(TYPE, Config.CODE_REVIEW); crw.put(VALUE, "-1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "2"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "1"); approvals.add(crw); crw = new JSONObject(); - crw.put(TYPE, "Verified"); + crw.put(TYPE, Config.VERIFIED); crw.put(VALUE, "-1"); approvals.add(crw);