001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019 */
020package org.sonar.squid.api;
021
022import org.apache.commons.lang.builder.ToStringBuilder;
023import org.sonar.check.Message;
024
025import java.text.MessageFormat;
026import java.util.Locale;
027
028public class CheckMessage implements Message {
029
030  private Integer line;
031  private Double cost;
032  private SourceCode sourceCode;
033  private Object check;
034  private String defaultMessage;
035  private Object[] messageArguments;
036  private Boolean bypassExclusion;
037
038  public CheckMessage(Object check, String message, Object... messageArguments) {
039    this.check = check;
040    this.defaultMessage = message;
041    this.messageArguments = messageArguments;
042  }
043
044  /**
045   * @deprecated replaced by the other constructor since 2.12. See SONAR-2875.
046   */
047  @Deprecated
048  public CheckMessage(CodeCheck check, String message, Object... messageArguments) {
049    this((Object)check, message, messageArguments);
050  }
051
052  public void setSourceCode(SourceCode sourceCode) {
053    this.sourceCode = sourceCode;
054  }
055
056  public SourceCode getSourceCode() {
057    return sourceCode;
058  }
059
060  public void setLine(int line) {
061    this.line = line;
062  }
063
064  public Integer getLine() {
065    return line;
066  }
067
068  public void setCost(double cost) {
069    this.cost = cost;
070  }
071
072  public Double getCost() {
073    return cost;
074  }
075
076  public void setBypassExclusion(boolean bypassExclusion) {
077    this.bypassExclusion = bypassExclusion;
078  }
079
080  public boolean isBypassExclusion() {
081    return bypassExclusion == null ? false : bypassExclusion;
082  }
083
084  /**
085   * @deprecated replaced by getCheck() since 2.12. Warning, to be called only if check is CodeCheck.
086   */
087  @Deprecated
088  public CodeCheck getChecker() {
089    return (CodeCheck)check;
090  }
091
092  public Object getCheck() {
093    return check;
094  }
095
096  public String getDefaultMessage() {
097    return defaultMessage;
098  }
099
100  public Object[] getMessageArguments() {
101    return messageArguments;
102  }
103
104  public String getText(Locale locale) {
105    return formatDefaultMessage();
106  }
107
108  @Override
109  public String toString() {
110    return new ToStringBuilder(this).append("source", sourceCode).append("check", check).append("msg", defaultMessage)
111        .append("line", line).toString();
112  }
113
114  public String formatDefaultMessage() {
115    if (messageArguments.length == 0) {
116      return defaultMessage;
117    } else {
118      return MessageFormat.format(defaultMessage, messageArguments);
119    }
120  }
121
122}