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 */
020package org.sonar.server.ui;
021
022import org.sonar.api.measures.CoreMetrics;
023import org.sonar.api.resources.Qualifiers;
024import org.sonar.api.web.*;
025
026/**
027 * @since 2.7
028 */
029public 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    Qualifiers.UNIT_TEST_FILE})
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}