import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterators;
import com.google.common.collect.Maps;
import org.apache.commons.lang.StringUtils;
import org.sonar.api.rule.RuleKey;
// column 21
"r.language",
"p.uuid",
- "p.module_uuid",
"p.module_uuid_path",
"p.path",
"i.tags"
private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();
+ private static final Splitter MODULE_PATH_SPLITTER = Splitter.on('.').trimResults().omitEmptyStrings();
+
private IssueResultSetIterator(PreparedStatement stmt) throws SQLException {
super(stmt);
}
return null;
}
+ private static String extractModule(String moduleUuidPath) {
+ return Iterators.getLast(MODULE_PATH_SPLITTER.split(moduleUuidPath).iterator());
+ }
+
@Override
protected IssueDoc read(ResultSet rs) throws SQLException {
IssueDoc doc = new IssueDoc(Maps.<String, Object>newHashMapWithExpectedSize(30));
doc.setRuleKey(RuleKey.of(ruleRepo, ruleKey).toString());
doc.setLanguage(rs.getString(21));
doc.setComponentUuid(rs.getString(22));
- doc.setModuleUuid(rs.getString(23));
- doc.setModuleUuidPath(rs.getString(24));
- doc.setFilePath(rs.getString(25));
+ String moduleUuidPath = rs.getString(23);
+ doc.setModuleUuid(extractModule(moduleUuidPath));
+ doc.setModuleUuidPath(moduleUuidPath);
+ doc.setFilePath(rs.getString(24));
doc.setDirectoryPath(extractDirPath(doc.filePath()));
- String tags = rs.getString(26);
+ String tags = rs.getString(25);
doc.setTags(ImmutableList.copyOf(TAGS_SPLITTER.split(tags == null ? "" : tags)));
return doc;
}
});
it.close();
- assertThat(issuesByKey).hasSize(2);
+ assertThat(issuesByKey).hasSize(3);
IssueDoc issue = issuesByKey.get("ABC");
assertThat(issue.key()).isEqualTo("ABC");
assertThat(issue.assignee()).isEqualTo("guy1");
assertThat(issue.componentUuid()).isEqualTo("FILE1");
assertThat(issue.projectUuid()).isEqualTo("PROJECT1");
+ assertThat(issue.moduleUuid()).isEqualTo("PROJECT1");
+ assertThat(issue.modulePath()).isEqualTo(".PROJECT1.");
assertThat(issue.filePath()).isEqualTo("src/main/java/Action.java");
assertThat(issue.tags()).containsOnly("tag1", "tag2", "tag3");
assertThat(issue.debt().toMinutes()).isGreaterThan(0L);
+ issue = issuesByKey.get("BCD");
+ assertThat(issue.key()).isEqualTo("BCD");
+ assertThat(issue.assignee()).isEqualTo("guy1");
+ assertThat(issue.componentUuid()).isEqualTo("MODULE1");
+ assertThat(issue.projectUuid()).isEqualTo("PROJECT1");
+ assertThat(issue.moduleUuid()).isEqualTo("MODULE1");
+ assertThat(issue.modulePath()).isEqualTo(".PROJECT1.MODULE1.");
+ assertThat(issue.filePath()).isNull();
+ assertThat(issue.tags()).containsOnly("tag1", "tag2", "tag3");
+ assertThat(issue.debt().toMinutes()).isGreaterThan(0L);
+
issue = issuesByKey.get("DEF");
assertThat(issue.key()).isEqualTo("DEF");
assertThat(issue.assignee()).isEqualTo("guy2");
assertThat(issue.componentUuid()).isEqualTo("FILE1");
assertThat(issue.projectUuid()).isEqualTo("PROJECT1");
+ assertThat(issue.moduleUuid()).isEqualTo("PROJECT1");
+ assertThat(issue.modulePath()).isEqualTo(".PROJECT1.");
assertThat(issue.filePath()).isEqualTo("src/main/java/Action.java");
assertThat(issue.tags()).isEmpty();
assertThat(issue.debt().toMinutes()).isGreaterThan(0L);
<rules tags="[null]" system_tags="[null]" id="200" name="Avoid Cycles" plugin_rule_key="AvoidCycles"
plugin_config_key="[null]" plugin_name="squid"/>
- <projects id="10" scope="PRJ" qualifier="TRK" kee="struts" name="Struts" uuid="PROJECT1" path="[null]"/>
- <projects id="100" scope="FIL" qualifier="CLA" kee="struts:Action" name="Action" uuid="FILE1" path="src/main/java/Action.java"/>
- <projects id="101" scope="FIL" qualifier="CLA" kee="pom" name="pom.xml" uuid="ROOT_FILE1" path="pom.xml"/>
+ <projects id="10" scope="PRJ" qualifier="TRK" kee="struts" name="Struts" uuid="PROJECT1" path="[null]" module_uuid_path=".PROJECT1."/>
+ <projects id="100" scope="FIL" qualifier="CLA" kee="struts:Action" name="Action" uuid="FILE1" path="src/main/java/Action.java" module_uuid_path=".PROJECT1."/>
+ <projects id="101" scope="FIL" qualifier="CLA" kee="pom" name="pom.xml" uuid="ROOT_FILE1" path="pom.xml" module_uuid_path=".PROJECT1."/>
<issues
id="1"
<rules tags="[null]" system_tags="[null]" id="200" name="Avoid Cycles" plugin_rule_key="AvoidCycles"
plugin_config_key="[null]" plugin_name="squid"/>
- <projects id="10" scope="PRJ" qualifier="TRK" kee="struts" name="Struts" uuid="PROJECT1" path="[null]"/>
- <projects id="100" scope="FIL" qualifier="CLA" kee="struts:Action" name="Action" uuid="FILE1" path="src/main/java/Action.java"/>
+ <projects id="10" scope="PRJ" qualifier="TRK" kee="struts" name="Struts" uuid="PROJECT1" path="[null]" module_uuid_path=".PROJECT1."/>
+ <projects id="50" scope="PRJ" qualifier="BRC" kee="struts:struts-tiles" name="Struts Tiles" uuid="MODULE1" path="[null]" module_uuid_path=".PROJECT1.MODULE1."/>
+ <projects id="100" scope="FIL" qualifier="CLA" kee="struts:Action" name="Action" uuid="FILE1" path="src/main/java/Action.java" module_uuid_path=".PROJECT1."/>
<issues
id="1"
<issues
id="2"
+ kee="BCD"
+ resolution="FIXED"
+ status="RESOLVED"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ assignee="guy1"
+ author_login="guy2"
+ checksum="FFFFF"
+ effort_to_fix="[null]"
+ technical_debt="10"
+ message="[null]"
+ line="444"
+ component_uuid="MODULE1"
+ project_uuid="PROJECT1"
+ rule_id="200"
+ reporter="[null]"
+ issue_attributes="JIRA=http://jira.com"
+ action_plan_key="PLAN1"
+ tags="tag1,tag2,tag3"
+ created_at="1400000000000"
+ updated_at="1400000000000"
+ issue_creation_date="1115848800000"
+ issue_update_date="1356994800000"
+ issue_close_date="[null]"/>
+
+ <issues
+ id="3"
kee="DEF"
resolution="[null]"
status="OPEN"