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      @UserRole(UserRole.CODEVIEWER)
077      private static final class CoverageTab implements RubyRailsPage {
078        public String getTemplate() {
079          //not used, hardcoded in BrowseController
080          return "browse/index";
081        }
082    
083        public String getId() {
084          return "coverage";
085        }
086    
087        public String getTitle() {
088          return "Coverage";
089        }
090      }
091    
092      @NavigationSection(NavigationSection.RESOURCE_TAB)
093      @DefaultTab(metrics = {CoreMetrics.VIOLATIONS_DENSITY_KEY, CoreMetrics.WEIGHTED_VIOLATIONS_KEY, CoreMetrics.VIOLATIONS_KEY, CoreMetrics.BLOCKER_VIOLATIONS_KEY,
094          CoreMetrics.CRITICAL_VIOLATIONS_KEY, CoreMetrics.MAJOR_VIOLATIONS_KEY, CoreMetrics.MINOR_VIOLATIONS_KEY, CoreMetrics.INFO_VIOLATIONS_KEY,
095          CoreMetrics.NEW_VIOLATIONS_KEY, CoreMetrics.NEW_BLOCKER_VIOLATIONS_KEY, CoreMetrics.NEW_CRITICAL_VIOLATIONS_KEY, CoreMetrics.NEW_MAJOR_VIOLATIONS_KEY,
096          CoreMetrics.NEW_MINOR_VIOLATIONS_KEY, CoreMetrics.NEW_INFO_VIOLATIONS_KEY, CoreMetrics.ACTIVE_REVIEWS_KEY, CoreMetrics.UNASSIGNED_REVIEWS_KEY,
097          CoreMetrics.UNPLANNED_REVIEWS_KEY, CoreMetrics.FALSE_POSITIVE_REVIEWS_KEY, CoreMetrics.UNREVIEWED_VIOLATIONS_KEY, CoreMetrics.NEW_UNREVIEWED_VIOLATIONS_KEY})
098      @ResourceQualifier({Qualifiers.VIEW, Qualifiers.SUBVIEW, Qualifiers.PROJECT, Qualifiers.MODULE, Qualifiers.PACKAGE, Qualifiers.DIRECTORY, Qualifiers.FILE, Qualifiers.CLASS})
099      /* all exept unit tests...*/
100      @UserRole(UserRole.CODEVIEWER)
101      private static final class ViolationsTab implements RubyRailsPage {
102        public String getTemplate() {
103          //not used, hardcoded in BrowseController
104          return "browse/index";
105        }
106    
107        public String getId() {
108          return "violations";
109        }
110    
111        public String getTitle() {
112          return "Violations";
113        }
114      }
115    
116      @NavigationSection(NavigationSection.RESOURCE_TAB)
117      @DefaultTab(metrics = {CoreMetrics.DUPLICATED_LINES_KEY, CoreMetrics.DUPLICATED_BLOCKS_KEY, CoreMetrics.DUPLICATED_FILES_KEY, CoreMetrics.DUPLICATED_LINES_DENSITY_KEY})
118      @ResourceQualifier({Qualifiers.FILE, Qualifiers.CLASS})
119      @UserRole(UserRole.CODEVIEWER)
120      private static final class DuplicationsTab implements RubyRailsPage {
121        public String getTemplate() {
122          //not used, hardcoded in BrowseController
123          return "browse/index";
124        }
125    
126        public String getId() {
127          return "duplications";
128        }
129    
130        public String getTitle() {
131          return "Duplications";
132        }
133      }
134    }