package fr.techad.sonar.utils; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang3.text.StrSubstitutor; import org.sonar.api.batch.postjob.issue.PostJobIssue; import org.sonar.api.config.Settings; public class MessageUtils { private static final String ISSUE_PREFIX = "issue"; private static final String ISSUE_IS_NEW = "isNew"; private static final String ISSUE_RULE_KEY = "ruleKey"; private static final String ISSUE_SEVERITY = "severity"; private static final String ISSUE_MESSAGE = "message"; private static final String ISSUE_SEPARATOR = "."; /** * Create the issue message. The variables contained in the original message * are replaced by the settings values and the issue data. * * @param originalMessage * the original message * @param settings * the settings * @param issue * the issue * @return a new message with the replaced variables by data. */ public String createIssueMessage(String originalMessage, Settings settings, PostJobIssue issue) { HashMap<String, Object> valueMap = new HashMap<>(); valueMap.put(prefixKey(ISSUE_PREFIX, ISSUE_IS_NEW), issue.isNew()); valueMap.put(prefixKey(ISSUE_PREFIX, ISSUE_RULE_KEY), issue.ruleKey()); valueMap.put(prefixKey(ISSUE_PREFIX, ISSUE_SEVERITY), issue.severity()); valueMap.put(prefixKey(ISSUE_PREFIX, ISSUE_MESSAGE), issue.message()); return substituteProperties(originalMessage, settings, valueMap); } /** * Create the message from originalMessage and Settings. The variables * contained in the originalMessage are replaced by the Settings value * * @param originalMessage * the original message which contains variables * @param settings * the settings * @return a new string with substituted variables. */ public String createMessage(String originalMessage, Settings settings) { return substituteProperties(originalMessage, settings, Collections.<String, Object>emptyMap()); } /** * Build a string based on an original string and the replacement by * settings and map values * * @param originalMessage * the original string * @param settings * the settings * @param additionalProperties * the additional values * @return the built message */ private String substituteProperties(String originalMessage, Settings settings, Map<String, Object> additionalProperties) { if (additionalProperties.isEmpty()) { return StrSubstitutor.replace(originalMessage, settings.getProperties()); } additionalProperties.putAll(settings.getProperties()); return StrSubstitutor.replace(originalMessage, additionalProperties); } /** * Create the key * * @param prefix * the prefix key * @param key * the key * @return the key */ private String prefixKey(String prefix, String key) { return new StringBuffer(prefix).append(ISSUE_SEPARATOR).append(key).toString(); } }