001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 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})
097      @ResourceQualifier({Qualifiers.VIEW, Qualifiers.SUBVIEW, Qualifiers.PROJECT, Qualifiers.MODULE, Qualifiers.PACKAGE, Qualifiers.DIRECTORY, Qualifiers.FILE, Qualifiers.CLASS})
098      /* all exept unit tests...*/
099      @UserRole(UserRole.CODEVIEWER)
100      private static final class ViolationsTab implements RubyRailsPage {
101        public String getTemplate() {
102          //not used, hardcoded in BrowseController
103          return "browse/index";
104        }
105    
106        public String getId() {
107          return "violations";
108        }
109    
110        public String getTitle() {
111          return "Violations";
112        }
113      }
114    
115      @NavigationSection(NavigationSection.RESOURCE_TAB)
116      @DefaultTab(metrics = {CoreMetrics.DUPLICATED_LINES_KEY, CoreMetrics.DUPLICATED_BLOCKS_KEY, CoreMetrics.DUPLICATED_FILES_KEY, CoreMetrics.DUPLICATED_LINES_DENSITY_KEY})
117      @ResourceQualifier({Qualifiers.FILE, Qualifiers.CLASS})
118      @UserRole(UserRole.CODEVIEWER)
119      private static final class DuplicationsTab implements RubyRailsPage {
120        public String getTemplate() {
121          //not used, hardcoded in BrowseController
122          return "browse/index";
123        }
124    
125        public String getId() {
126          return "duplications";
127        }
128    
129        public String getTitle() {
130          return "Duplications";
131        }
132      }
133    }