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    }