001 /* 002 * SonarQube, open source software quality management tool. 003 * Copyright (C) 2008-2014 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * SonarQube 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 * SonarQube 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 License 017 * along with this program; if not, write to the Free Software Foundation, 018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 019 */ 020 package org.sonar.api.issue; 021 022 import com.google.common.collect.ImmutableList; 023 import org.sonar.api.rule.RuleKey; 024 025 import javax.annotation.CheckForNull; 026 027 import java.io.Serializable; 028 import java.util.Date; 029 import java.util.List; 030 import java.util.Map; 031 032 /** 033 * @since 3.6 034 */ 035 public interface Issue extends Serializable { 036 037 /** 038 * Maximum number of characters in the message. 039 */ 040 int MESSAGE_MAX_SIZE = 4000; 041 042 /** 043 * Default status when creating an issue. 044 */ 045 String STATUS_OPEN = "OPEN"; 046 String STATUS_CONFIRMED = "CONFIRMED"; 047 String STATUS_REOPENED = "REOPENED"; 048 String STATUS_RESOLVED = "RESOLVED"; 049 String STATUS_CLOSED = "CLOSED"; 050 051 String RESOLUTION_FIXED = "FIXED"; 052 053 /** 054 * Resolution when issue is flagged as false positive. 055 */ 056 String RESOLUTION_FALSE_POSITIVE = "FALSE-POSITIVE"; 057 058 /** 059 * Resolution when rule has been uninstalled or disabled in the Quality profile. 060 */ 061 String RESOLUTION_REMOVED = "REMOVED"; 062 063 List<String> RESOLUTIONS = ImmutableList.of(RESOLUTION_FALSE_POSITIVE, RESOLUTION_FIXED, RESOLUTION_REMOVED); 064 065 /** 066 * Return all available statuses 067 * 068 * @since 4.4 069 */ 070 List<String> STATUSES = ImmutableList.of(STATUS_OPEN, STATUS_CONFIRMED, STATUS_REOPENED, STATUS_RESOLVED, STATUS_CLOSED); 071 072 /** 073 * Unique generated key. It looks like "d2de809c-1512-4ae2-9f34-f5345c9f1a13". 074 */ 075 String key(); 076 077 /** 078 * Components are modules ("my_project"), directories ("my_project:my/dir") or files ("my_project:my/file.c"). 079 * Keys of Java packages and classes are currently in a special format: "my_project:com.company" and "my_project:com.company.Foo". 080 */ 081 String componentKey(); 082 083 RuleKey ruleKey(); 084 085 /** 086 * See constants in {@link org.sonar.api.rule.Severity}. 087 */ 088 String severity(); 089 090 @CheckForNull 091 String message(); 092 093 /** 094 * Optional line number. If set, then it's greater than or equal 1. 095 */ 096 @CheckForNull 097 Integer line(); 098 099 /** 100 * Arbitrary distance to threshold for resolving the issue. 101 * <p/> 102 * For examples: 103 * <ul> 104 * <li>for the rule "Avoid too complex methods" : current complexity - max allowed complexity</li> 105 * <li>for the rule "Avoid Duplications" : number of duplicated blocks</li> 106 * <li>for the rule "Insufficient Line Coverage" : number of lines to cover to reach the accepted threshold</li> 107 * </ul> 108 */ 109 @CheckForNull 110 Double effortToFix(); 111 112 /** 113 * See constant values in {@link Issue}. 114 */ 115 String status(); 116 117 /** 118 * The type of resolution, or null if the issue is not resolved. See constant values in {@link Issue}. 119 */ 120 @CheckForNull 121 String resolution(); 122 123 /** 124 * Login of the user who reported this issue. Null if the issue is reported by a rule engine. 125 */ 126 @CheckForNull 127 String reporter(); 128 129 /** 130 * Login of the user who is assigned to this issue. Null if the issue is not assigned. 131 */ 132 @CheckForNull 133 String assignee(); 134 135 Date creationDate(); 136 137 Date updateDate(); 138 139 /** 140 * Date when status was set to {@link Issue#STATUS_CLOSED}, else null. 141 */ 142 @CheckForNull 143 Date closeDate(); 144 145 @CheckForNull 146 String attribute(String key); 147 148 Map<String, String> attributes(); 149 150 /** 151 * Login of the SCM account that introduced this issue. Requires the 152 * <a href="http://www.sonarsource.com/products/plugins/developer-tools/developer-cockpit/">Developer Cockpit Plugin</a> to be installed. 153 */ 154 @CheckForNull 155 String authorLogin(); 156 157 @CheckForNull 158 String actionPlanKey(); 159 160 /** 161 * Non-null list of comments, ordered by chronological order. 162 * <p/> 163 * IMPORTANT: existing comments are not loaded when this method is called when analyzing project 164 * (from {@link org.sonar.api.BatchExtension}). 165 */ 166 List<IssueComment> comments(); 167 168 /** 169 * During a scan return if the current issue is a new one. 170 * @return always false on server side 171 * @since 4.0 172 */ 173 boolean isNew(); 174 }