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 */
020 package org.sonar.server.ui;
021
022 import org.sonar.api.measures.CoreMetrics;
023 import org.sonar.api.resources.Qualifiers;
024 import org.sonar.api.web.*;
025
026 /**
027 * @since 2.7
028 */
029 public final class DefaultPages {
030
031 private static final View[] PAGES = {new SourceTab(), new CoverageTab(), new ViolationsTab(), new DuplicationsTab()};
032
033 private DefaultPages() {
034 }
035
036 public static View[] getPages() {
037 return PAGES.clone();
038 }
039
040 // should be qualifier FILE only but waiting for java refactoring
041 @NavigationSection(NavigationSection.RESOURCE_TAB)
042 @DefaultTab
043 @ResourceQualifier({Qualifiers.FILE, Qualifiers.CLASS, Qualifiers.UNIT_TEST_FILE})
044 @UserRole(UserRole.CODEVIEWER)
045 private static final class SourceTab implements RubyRailsPage {
046 public String getTemplate() {
047 //not used, hardcoded in BrowseController
048 return "browse/index";
049 }
050
051 public String getId() {
052 return "source";
053 }
054
055 public String getTitle() {
056 return "Source";
057 }
058 }
059
060
061 @NavigationSection(NavigationSection.RESOURCE_TAB)
062 @ResourceQualifier({Qualifiers.FILE, Qualifiers.CLASS})
063 @DefaultTab(metrics = {
064 /* unit tests */
065 CoreMetrics.COVERAGE_KEY, CoreMetrics.LINES_TO_COVER_KEY, CoreMetrics.UNCOVERED_LINES_KEY, CoreMetrics.LINE_COVERAGE_KEY,
066 CoreMetrics.CONDITIONS_TO_COVER_KEY, CoreMetrics.UNCOVERED_CONDITIONS_KEY, CoreMetrics.BRANCH_COVERAGE_KEY,
067 CoreMetrics.NEW_COVERAGE_KEY, CoreMetrics.NEW_UNCOVERED_LINES_KEY, CoreMetrics.NEW_LINE_COVERAGE_KEY,
068 CoreMetrics.NEW_LINES_TO_COVER_KEY, CoreMetrics.NEW_BRANCH_COVERAGE_KEY, CoreMetrics.NEW_CONDITIONS_TO_COVER_KEY, CoreMetrics.NEW_UNCOVERED_CONDITIONS_KEY,
069
070 /* integration tests */
071 CoreMetrics.IT_COVERAGE_KEY, CoreMetrics.IT_LINES_TO_COVER_KEY, CoreMetrics.IT_UNCOVERED_LINES_KEY, CoreMetrics.IT_LINE_COVERAGE_KEY,
072 CoreMetrics.IT_CONDITIONS_TO_COVER_KEY, CoreMetrics.IT_UNCOVERED_CONDITIONS_KEY, CoreMetrics.IT_BRANCH_COVERAGE_KEY,
073 CoreMetrics.NEW_IT_COVERAGE_KEY, CoreMetrics.NEW_IT_UNCOVERED_LINES_KEY, CoreMetrics.NEW_IT_LINE_COVERAGE_KEY,
074 CoreMetrics.NEW_IT_LINES_TO_COVER_KEY, CoreMetrics.NEW_IT_BRANCH_COVERAGE_KEY, CoreMetrics.NEW_IT_CONDITIONS_TO_COVER_KEY, CoreMetrics.NEW_IT_UNCOVERED_CONDITIONS_KEY
075 })
076 @RequiredMeasures(anyOf = {CoreMetrics.COVERAGE_KEY, CoreMetrics.IT_COVERAGE_KEY})
077 @UserRole(UserRole.CODEVIEWER)
078 private static final class CoverageTab implements RubyRailsPage {
079 public String getTemplate() {
080 //not used, hardcoded in BrowseController
081 return "browse/index";
082 }
083
084 public String getId() {
085 return "coverage";
086 }
087
088 public String getTitle() {
089 return "Coverage";
090 }
091 }
092
093 @NavigationSection(NavigationSection.RESOURCE_TAB)
094 @DefaultTab(metrics = {CoreMetrics.VIOLATIONS_DENSITY_KEY, CoreMetrics.WEIGHTED_VIOLATIONS_KEY, CoreMetrics.VIOLATIONS_KEY, CoreMetrics.BLOCKER_VIOLATIONS_KEY,
095 CoreMetrics.CRITICAL_VIOLATIONS_KEY, CoreMetrics.MAJOR_VIOLATIONS_KEY, CoreMetrics.MINOR_VIOLATIONS_KEY, CoreMetrics.INFO_VIOLATIONS_KEY,
096 CoreMetrics.NEW_VIOLATIONS_KEY, CoreMetrics.NEW_BLOCKER_VIOLATIONS_KEY, CoreMetrics.NEW_CRITICAL_VIOLATIONS_KEY, CoreMetrics.NEW_MAJOR_VIOLATIONS_KEY,
097 CoreMetrics.NEW_MINOR_VIOLATIONS_KEY, CoreMetrics.NEW_INFO_VIOLATIONS_KEY, CoreMetrics.ACTIVE_REVIEWS_KEY, CoreMetrics.UNASSIGNED_REVIEWS_KEY,
098 CoreMetrics.UNPLANNED_REVIEWS_KEY, CoreMetrics.FALSE_POSITIVE_REVIEWS_KEY, CoreMetrics.UNREVIEWED_VIOLATIONS_KEY, CoreMetrics.NEW_UNREVIEWED_VIOLATIONS_KEY})
099 @ResourceQualifier({Qualifiers.VIEW, Qualifiers.SUBVIEW, Qualifiers.PROJECT, Qualifiers.MODULE, Qualifiers.PACKAGE, Qualifiers.DIRECTORY, Qualifiers.FILE, Qualifiers.CLASS})
100 /* all exept unit tests...*/
101 @UserRole(UserRole.CODEVIEWER)
102 private static final class ViolationsTab implements RubyRailsPage {
103 public String getTemplate() {
104 //not used, hardcoded in BrowseController
105 return "browse/index";
106 }
107
108 public String getId() {
109 return "violations";
110 }
111
112 public String getTitle() {
113 return "Violations";
114 }
115 }
116
117 @NavigationSection(NavigationSection.RESOURCE_TAB)
118 @DefaultTab(metrics = {CoreMetrics.DUPLICATED_LINES_KEY, CoreMetrics.DUPLICATED_BLOCKS_KEY, CoreMetrics.DUPLICATED_FILES_KEY, CoreMetrics.DUPLICATED_LINES_DENSITY_KEY})
119 @ResourceQualifier({Qualifiers.FILE, Qualifiers.CLASS})
120 @UserRole(UserRole.CODEVIEWER)
121 private static final class DuplicationsTab implements RubyRailsPage {
122 public String getTemplate() {
123 //not used, hardcoded in BrowseController
124 return "browse/index";
125 }
126
127 public String getId() {
128 return "duplications";
129 }
130
131 public String getTitle() {
132 return "Duplications";
133 }
134 }
135 }